You need to enable JavaScript to run this app. 如何使用BeautifulSoup提取<script>标签内modelData的指定字段数据
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BeautifulSoup提取<script>标签内modelData的指定字段数据

目标数据提取实现方法

你已经成功定位到了存放目标内容的script标签,接下来不需要做复杂的页面结构解析,按下面的步骤操作就能稳定拿到四个字段的值:

1. 先取出script标签内的纯文本内容

你当前代码拿到的results是BeautifulSoup的标签对象,要先把标签内嵌的JS纯文本提取出来,别把带<script>尖括号的HTML结构拿出来解析:

# 接在你现有代码的results定义后面
# 如果后续页面结构调整,靠索引取第6个script的方式可能失效,可以直接通过文本内容定位包含var modelData的标签,稳定性更高
js_content = results.get_text().strip()

2. 按需求选择适配的提取逻辑

目标数据都集中在var modelData = {...}的JS对象块里,有两种零踩坑的实现方案:

方案A:正则精准匹配(无额外依赖,适配当前场景)

四个目标字段的固定写法都是字段名: '单引号包裹的值',,直接写正则匹配即可,不会和后面store.initOmlib参数块里的同名Id字段混淆(后者是双引号包裹的JSON格式,和单引号的写法完全不冲突):

import re

# 定义需要提取的目标字段列表
target_list = ["name", "thumbnailUrl", "account", "Id"]
result = {}

for field in target_list:
    # 匹配规则:字段名后跟冒号、可选空白、单引号包裹的非单引号字符内容
    match_pattern = rf"{field}: '([^']*)'"
    matched = re.search(match_pattern, js_content)
    if matched:
        result[field] = matched.group(1)

# 运行后即可得到完整的目标字段值
print(result)

执行后得到的提取结果示例:

{
    'name': 'somename',
    'thumbnailUrl': 'https://website.com/blob/bG9uZ2RhbjovL0ZPVVIvbGRwcm9kLWRlL3ljb3B6YTY4N0pnQ2Nfc3JYcVV3VXc9PQ',
    'account': '5LH7J44IYPAGEZEYA9KIL',
    'Id': 'someid'
}

方案B:JS对象转Python字典(适合后续要扩展提取更多字段的场景)

如果不想逐字段写正则规则,可以用js2py把整段modelData的JS定义转成原生Python字典,直接按键取值:

import js2py

# 先从JS文本里截取完整的modelData定义块
model_block = re.search(r"var modelData = {.*?};", js_content, re.DOTALL).group()
# 执行这段JS代码,拿到可交互的对象
model_data = js2py.eval_js(model_block)

# 直接取字段值即可
name_val = model_data.name
thumbnail_val = model_data.thumbnailUrl
account_val = model_data.account
id_val = model_data.Id

避坑提示

  • 不要直接用标准JSON解析器处理整段script内容:modelData是原生JS对象,键没有双引号、字符串值用单引号包裹,完全不符合JSON语法,直接调用json.loads会触发格式报错。
  • 不要靠固定字符位置切片取内容:页面后续改版调整字段顺序、新增其他字段后,硬编码的切片位置会立刻失效,基于字段名的正则匹配和具体位置无关,适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 12:24:04