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

Python提取HTML中window.__INITIAL_STATE__内容并解析为JSON

问题原因
  • re.search()返回值是正则匹配对象(Match类型),并非匹配到的文本内容,直接传入json.loads()必然触发类型报错
  • 你看到的\u002F是JSON标准中对斜杠/的转义写法,不属于字节/字符串混合异常,JSON解析器可自动识别处理,无需额外手动替换
  • 原正则(.*?);采用非贪婪匹配,遇到JSON内容中第一个分号就会停止匹配,截取的JSON片段不完整,无法正常解析;同时原正则未开启跨行匹配模式,无法匹配跨多行的JSON内容
修复代码
import re
import json
import requests

# 模拟浏览器请求头,避免被站点反爬策略拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
url = "https://zum.com/"
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = resp.apparent_encoding
html_doc = resp.text

# 开启re.S模式让.匹配换行符,捕获完整JSON结构,兼容末尾分号、空白符等场景
match_result = re.search(
    r"window\.__INITIAL_STATE__\s*=\s*(\{.*?\})\s*;?\s*</script>",
    html_doc,
    flags=re.S
)

if match_result:
    json_content = match_result.group(1)
    # 直接解析即可,所有转义字符会自动还原
    parsed_data = json.loads(json_content)
    # 测试输出:打印第一条股指数据
    print(parsed_data["headerStore"]["tickers"]["items"][0])
else:
    raise ValueError("页面中未找到__INITIAL_STATE__数据")
关键说明
  • 解析完成后所有\u002F会自动还原为正常的/,URL可直接使用,无需额外转义处理
  • 如果后续遇到JSON结构更复杂、正则容易截断的场景,可以改用宽松JSON解析库,或者用脚本执行引擎提取变量,当前场景用上述正则已经足够稳定
  • 若请求返回内容乱码,可手动指定resp.encoding = "utf-8"适配站点编码

内容的提问来源于stack exchange,提问作者KimGyeongMin-KR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:27:23