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

如何在Python中解析JavaScript变量内容并转换为JSON格式

解析方案

你遇到的是前端页面常见的内联JS对象提取场景,这类数据不属于标准JSON(标准JSON要求键和字符串必须使用双引号,不支持单引号、尾逗号等JS语法),可以按兼容性从低到高选用以下方案:

方案1:Python标准库 ast.literal_eval (无额外依赖)

适合结构简单、没有JS特殊值(undefined/NaN/Infinity等)的场景:

  • 先从HTML响应中截取window.INIT_STATE = 之后到语句结束(通常是最近的独立分号、或者</script>标签前)的完整内容,注意补全你示例中缺失的赋值语句左大括号
  • 直接使用ast模块解析:
import ast

# 示例截取到的内容
raw_js_obj = "{'configuration': {'navigationData': {'catalog': {'id': 1, 'active': 1, 'tenant': 'pyStore', 'type': 'catalog', 'name': 'Initial catalog', 'version': '2021-06-02T16:26:56.446Z'}}}"
data = ast.literal_eval(raw_js_obj)

方案2:demjson3 第三方库(兼容非标准JSON语法)

支持单引号、注释、尾逗号等非标准JSON写法,兼容大部分前端手写JS对象格式:

  • 安装依赖:pip install demjson3
  • 解析代码:
import demjson3

raw_js_obj = "你截取的待解析内容"
data = demjson3.decode(raw_js_obj)

方案3:py_mini_racer 内嵌V8引擎解析(全场景兼容)

如果上述两个方案都失败,说明数据包含JS特有表达式,直接用JS引擎执行赋值语句取值即可,100%兼容浏览器可识别的所有JS写法:

  • 安装依赖:pip install py_mini_racer
  • 解析代码:
from py_mini_racer import MiniRacer

ctx = MiniRacer()
# 预先声明window对象避免执行报错
ctx.eval("window = {}")
# 传入你提取到的包含INIT_STATE赋值的完整script代码
full_script_content = "你从页面script标签中提取到的包含window.INIT_STATE赋值的全部代码"
ctx.eval(full_script_content)
# 直接读取变量值
init_state = ctx.eval("window.INIT_STATE")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 18:15:03