You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用Regex匹配指定字符串后取13个字符,转义不生效问题求助

代码问题修复方案

存在的问题

  • soup.findAll("script")[2] 返回的是BeautifulSoup的Tag对象,不是脚本的文本内容,直接存入列表后传入正则方法会触发类型错误
  • re.findall 要求第二个参数为字符串类型,你传入的是列表对象script2,类型不匹配直接触发异常
  • 同时使用HTMLSession和urllib3重复请求同一个链接,属于冗余操作,还可能触发反爬规则导致请求失败
  • 裸except会吞掉所有异常信息,无法定位具体错误点

修正后代码

import re
from bs4 import BeautifulSoup
import urllib3

# 禁用urllib3的不安全请求警告(可选)
urllib3.disable_warnings()
http = urllib3.PoolManager()

for link in productlinks:
    try:
        # 仅保留一次请求即可
        response = http.request(
            "GET", link, headers={'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"})
        html = response.data.decode('utf-8')
        soup = BeautifulSoup(html, 'html.parser')
        # 先判断是否存在第三个script标签,避免索引越界
        script_tags = soup.find_all("script")
        if len(script_tags) < 3:
            print("未找到对应script标签")
            continue
        # 获取script的文本内容
        script_content = script_tags[2].text
        special_string = '"ean",values:[{text:"'
        x_letters_afterwards = 13
        # 正则使用捕获组直接提取目标13个字符
        result = re.findall(re.escape(special_string) + f"(.{{{x_letters_afterwards}}})", script_content)
        print(result)
    except Exception as e:
        # 打印异常信息方便排查,调试完成后可替换为省略号输出
        print(f"出错:{str(e)}")
        # print("...")

额外优化说明

  • 将User-Agent修改为浏览器UA,避免被网站反爬策略拦截
  • 增加script标签数量判断,避免索引越界报错
  • 正则增加捕获组,直接返回你需要的13个目标字符,无需再做二次截取
  • 异常部分打印具体错误信息,方便调试定位问题

内容的提问来源于stack exchange,提问作者lanavargas2002

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:39:02