如何用Python从静态HTML文件的Script标签中提取JSON数据
提取HTML中script标签内的JSON数据
嘿,我来帮你搞定这个问题!你已经会用BeautifulSoup处理XML,那处理这个HTML里的JS对象其实也不难,只是多了一步提取JSON的操作而已。下面是具体的步骤和代码示例:
步骤分解
- 用BeautifulSoup定位目标script标签:首先从HTML里找到包含
AC.org_json的那个script标签,页面可能有多个script标签,得精准筛选。 - 提取script标签内的文本内容:拿到标签里的JS代码文本。
- 从JS代码中剥离出JSON字符串:这是JS变量赋值语句,不是纯JSON,所以需要用正则表达式把
AC.org_json =后面的JSON部分提取出来。 - 解析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
相关产品推荐
相关产品推荐

