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

Python解析网页JSON遇Invalid \escape错误的解决咨询

问题原因与解决方案

为什么浏览器不报错?

浏览器的JavaScript引擎对JS语法容错性远高于Python的json模块。JSON规范里不允许用\'转义单引号(仅允许转义双引号、反斜杠等特定字符),但JS会将这种写法视为合法,所以浏览器能正常解析;而Python的json模块严格遵循JSON标准,遇到无效转义就会抛出错误。

解决方法

1. 修复无效转义字符

在解析前,把匹配到的JSON字符串中的\'替换为'——双引号包裹的JSON字符串里,单引号无需转义,替换后即可符合JSON规范。

2. 优化正则匹配逻辑

原正则可能因JSON对象内部嵌套}导致匹配不完整,改用非贪婪匹配+多行模式来准确捕获完整的JSON结构。

修改后的代码示例

import re
import json
import requests

url = "https://www.zacks.com/stock/research/ADIL/earnings-calendar"
# 模拟浏览器请求头,避免被网站拦截
requestHeader = {
    "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"
}

s = requests.Session()
response = s.get(url, headers=requestHeader)
content = response.content.decode('utf-8')

# 匹配document.obj_data后的完整JSON对象,支持跨行匹配
regex_match = re.search(r"(?<=document\.obj_data = )({.*?})", content, re.DOTALL)

if regex_match:
    raw_json = regex_match.group(1)
    # 修复无效的单引号转义
    fixed_json = raw_json.replace(r"\'", "'")
    try:
        full_data = json.loads(fixed_json)
        print("JSON解析成功")
        # 此处添加数据处理逻辑
    except json.JSONDecodeError as e:
        print(f"解析失败:{str(e)}")
else:
    print("未找到目标JSON数据")

额外说明

  • 务必添加合理的请求头(如User-Agent),否则网站可能会拒绝请求或返回不完整内容。
  • 如果后续还有其他无效转义问题,可以针对性添加替换规则,处理其他非法转义字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:12:53