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

如何使用BeautifulSoup提取script标签内var定义的数据并解决匹配报错

thumbdata提取报错问题解决

错误原因

  • re.match()方法要求匹配内容必须从字符串起始位置开始,你提取的script内容开头是sometext;加换行,并非以var thumbdata开头,因此匹配直接失败返回None,调用groups()方法自然抛出属性错误。
  • 正则默认不识别换行符,你的thumbdata内容跨多行,不加匹配模式的情况下.*?只会匹配到第一行结束,无法拿到完整数据。
  • 你当前正则仅捕获了{之后的片段,没有包含完整的对象结构,且JS对象的键没有双引号,不符合JSON规范,即使匹配成功也会在json.loads阶段报错。

修正后代码

import re
import json

# 正则匹配逻辑
pattern = re.compile(r"var thumbdata = (.*?);", re.DOTALL)
m = pattern.search(script9.string)

if m:
    js_obj_content = m.group(1).strip()
    # 补全键的双引号,转为合法JSON格式
    standard_json = re.sub(r'(\w+):', r'"\1":', js_obj_content)
    thumbdata = json.loads(standard_json)
    # 遍历输出thumbs
    for thumb in thumbdata['thumbs']:
        print(thumb)
else:
    # 匹配失败的兜底逻辑,可根据需求调整
    print("未找到thumbdata数据")

改动说明

  • 把re.match替换为re.search,支持在整个字符串范围内扫描匹配片段,不需要从开头对齐。
  • 新增re.DOTALL匹配模式,让.可以识别换行符,支持跨多行的内容匹配。
  • 调整正则捕获规则,直接提取完整的thumbdata对象内容。
  • 新增键的双引号补全逻辑,把非标准的JS对象转为合规JSON字符串,避免解析报错。
  • 新增匹配结果判空逻辑,避免匹配失败时抛出属性错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:30:04