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
相关产品推荐
相关产品推荐

