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
相关产品推荐
相关产品推荐

