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

如何从Beautiful Soup输出中解析<script>标签内的JSON数据?

解析带注释包裹的JSON数据(来自指定script标签)

一、内容是否为JSON?

大概率是合法JSON。这类场景下,网站通常会把结构化数据用HTML注释(<!-- ... -->)或JS注释(/* ... */)包裹后放在script标签里,避免浏览器直接解析执行,本质内容是标准JSON格式。你可以先去除注释后,用json.JSONDecoder().decode()验证合法性。

二、提取步骤及代码示例

以下是基于Python + BeautifulSoup的完整提取流程:

步骤分解

  • 定位目标script标签:通过data-zrr-shared-data-key="mobileSearchPageStore"属性筛选
  • 提取标签内的原始文本
  • 清理注释包裹:移除首尾的注释符号
  • 解析为Python字典/列表

代码实现

from bs4 import BeautifulSoup
import json

# 假设html_content是你获取到的网页源码
soup = BeautifulSoup(html_content, "html.parser")

# 定位目标script标签
target_script = soup.find("script", attrs={"data-zrr-shared-data-key": "mobileSearchPageStore"})

if target_script:
    # 提取原始文本
    raw_content = target_script.string.strip()
    
    # 处理HTML注释包裹的情况(最常见)
    if raw_content.startswith("<!--") and raw_content.endswith("-->"):
        cleaned_content = raw_content[4:-3].strip()
    # 处理JS注释包裹的情况
    elif raw_content.startswith("/*") and raw_content.endswith("*/"):
        cleaned_content = raw_content[2:-2].strip()
    else:
        cleaned_content = raw_content
    
    # 解析为JSON对象
    try:
        data = json.loads(cleaned_content)
        # 现在data就是你要的结构化数据
        print(data)
    except json.JSONDecodeError as e:
        print(f"JSON解析失败:{e}")
else:
    print("未找到目标script标签")

注意事项

  • 如果注释不是首尾完整包裹,可能需要用正则匹配清理,比如用re.sub(r'<!--|-->', '', raw_content)或re.sub(r'/\*|\*/', '', raw_content)
  • 部分网站可能会对JSON做轻微混淆(比如转义字符处理),解析失败时可以先打印cleaned_content查看具体格式问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:05:48