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

如何提取bs4.element.Tag类型script标签内容并转换为指定结构JSON文件

问题原因

报错的核心原因是你直接将BeautifulSoup返回的script标签对象整体转为字符串,得到的结果包含<script>标签外壳,并非纯JSON内容,所以json.loads无法解析。

解决方法
  • 提取script标签内部的纯文本内容,调用BeautifulSoup标签对象的.text属性即可获取标签包裹的原始JSON字符串。
  • 对纯JSON字符串执行json.loads解析,即可得到Python字典结构,后续可以直接处理或者导出为JSON文件。
修正后的完整代码
import requests
from bs4 import BeautifulSoup as BS
import json

url = 'https://www.economist.com/'
# 增加请求头避免被反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
r = requests.get(url, headers=headers)
r.encoding = r.apparent_encoding # 自动匹配页面编码,避免乱码问题

soup = BS(r.content,'html.parser')
data_tag = soup.find('script', attrs={'type':'application/ld+json'})

# 判空逻辑避免标签不存在时报错
if data_tag:
    json_str = data_tag.text.strip() # 取出文本并去除首尾空白字符
    json_data = json.loads(json_str)
    print(json_data)
    # 如果需要保存为本地JSON文件,添加以下代码
    with open('economist_ld.json', 'w', encoding='utf-8') as f:
        json.dump(json_data, f, ensure_ascii=False, indent=2)
else:
    print("未找到符合条件的script标签")
额外说明
  • 部分网站的application/ld+json内容可能存在转义字符,.text属性会自动处理HTML转义,不需要额外手动处理。
  • 增加请求头和判空逻辑可以大幅提升代码兼容性,应对反爬拦截、页面结构变动等异常场景。

内容的提问来源于stack exchange,提问作者mira.162

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:27:01