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

如何将网页script标签中的App JSON对象解析为Python可识别格式?

解决Script标签内JS对象转Python可解析JSON的通用方法

方法一:使用json5库(推荐)

json5专门支持解析JS风格的对象,完美兼容JSON和JS对象的语法差异(比如单引号、末尾逗号、未加引号的键名)

  • 安装依赖:
pip install json5
  • 解析步骤:
  1. 抓取页面后提取包含App = 的script标签内容
  2. 截取App = 之后到末尾分号前的JS对象字符串
  3. 直接用json5解析为Python字典
import json5
import requests
from bs4 import BeautifulSoup

url = "https://polymetalinternational.com/en/investors-and-media/news/press-releases/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 定位目标script标签
script_content = soup.find("script", text=lambda t: t and "App = " in t).text
# 提取App对象的字符串内容
app_data_str = script_content.split("App = ")[1].rstrip(";")
# 解析为Python可识别的数据结构
app_data = json5.loads(app_data_str)

# 提取新闻标题示例
press_releases = app_data.get("props", {}).get("pageProps", {}).get("pressReleases", [])
for release in press_releases:
    print(release.get("title"))

方法二:使用demjson库

demjson同样支持JS对象到Python数据结构的转换,语法兼容度高:

  • 安装依赖:
pip install demjson
  • 解析代码(请求和提取步骤同上):
import demjson
app_data = demjson.decode(app_data_str)

方法三:手动处理(不推荐)

如果不想额外安装库,可尝试用ast.literal_eval,但需要先处理JS与JSON的语法差异:

  1. 用正则给未加引号的键名添加双引号
  2. 将true/false/null替换为True/False/None
  3. 处理单引号与双引号的冲突
    但这种方法容易在复杂嵌套字符串场景下出现误替换,仅作为无库环境下的临时方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:50:02