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

如何用Python从静态HTML文件的Script标签中提取JSON数据

提取HTML中script标签内的JSON数据

嘿,我来帮你搞定这个问题!你已经会用BeautifulSoup处理XML,那处理这个HTML里的JS对象其实也不难,只是多了一步提取JSON的操作而已。下面是具体的步骤和代码示例:

步骤分解

  1. 用BeautifulSoup定位目标script标签:首先从HTML里找到包含AC.org_json的那个script标签,页面可能有多个script标签,得精准筛选。
  2. 提取script标签内的文本内容:拿到标签里的JS代码文本。
  3. 从JS代码中剥离出JSON字符串:这是JS变量赋值语句,不是纯JSON,所以需要用正则表达式把AC.org_json = 后面的JSON部分提取出来。
  4. 解析JSON为Python字典:用Python的json模块把字符串转成可操作的字典,之后就像处理普通字典一样取数据啦!

完整代码示例

from bs4 import BeautifulSoup
import json
import re

# 读取你的HTML文件
with open("your_downloaded_file.html", "r", encoding="utf-8") as file:
    html_content = file.read()

# 初始化BeautifulSoup
soup = BeautifulSoup(html_content, "html.parser")

# 找到包含AC.org_json的script标签
script_tag = soup.find(
    "script",
    string=lambda text: text and "AC.org_json" in text
)

if script_tag:
    # 提取script标签内的文本
    script_text = script_tag.string
    
    # 用正则匹配出AC.org_json对应的JSON部分
    # re.DOTALL让.可以匹配换行符,适配多行JSON的情况
    pattern = r'AC.org_json = (\{.*?\});'
    match = re.search(pattern, script_text, re.DOTALL)
    
    if match:
        json_str = match.group(1)
        # 解析JSON为Python字典
        org_data = json.loads(json_str)
        
        # 现在就可以轻松提取你需要的数据了!
        # 比如获取第一个员工的全名
        first_employee_name = org_data["children"][0]["data"]["full_name"]
        print(f"第一个员工的全名:{first_employee_name}")
        
        # 获取他的职位
        first_employee_title = org_data["children"][0]["data"]["job_title"]
        print(f"第一个员工的职位:{first_employee_title}")
    else:
        print("没有找到匹配的JSON数据")
else:
    print("找不到包含AC.org_json的script标签")

一些注意事项

  • 如果HTML里的JSON结构更复杂(比如嵌套更深或有换行),正则里的re.DOTALL很关键,它能让.匹配换行符,避免因为JSON换行导致匹配失败。
  • 要是正则匹配出问题,也可以手动截取字符串:找到AC.org_json = 的起始索引,再找到后面};的结束索引,截取中间部分即可,不过正则更通用灵活。
  • 解析成字典后,你可以用普通的字典操作遍历所有数据,比如循环children数组获取所有员工的信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:40:08