Python中如何解析淘宝的非常规JSON数据?
python 版本: 2.7 本人能力:非程序员,有一点点喜欢 python ,想折腾一些数据采集之类的,以便今后转运营助理或者运营,方便数据记录、分析。 环境模拟:想要采集皮鞋第一页、第二页全部产品的标题、图片、价格等前端展现的内容,可能详情页也需要用代码做截图处理,可能需要采集正文和评价。 问题:淘宝里的 json 是非正常的,由于技术问题,先用 sub 替换了 jsonp232(),也不能正常解析。求前辈折腾一下。
python 不用处理就能正常 dumps 、 load 能解析的
淘宝 json

Python中如何解析淘宝的非常规JSON数据?
9 回复
这个是 JSONP 的,不光是最前面有额外字符,最后面也有字符
我经常处理淘宝API返回的JSON,确实会遇到一些“非常规”格式。最常见的问题是JSONP响应和不标准的JSON结构。
1. JSONP响应处理 淘宝有些接口返回的是JSONP格式,比如:
callbackFunction({"status": "success", "data": {...}})
你需要先提取JSON部分:
import re
import json
response = 'callbackFunction({"status": "success", "data": {}})'
# 提取大括号内的内容
match = re.search(r'\{.*\}', response)
if match:
data = json.loads(match.group())
print(data)
2. 键名不规范的JSON 淘宝JSON有时键名不带引号或使用单引号:
# 使用demjson库处理非标准JSON
# pip install demjson
import demjson
nonstandard_json = "{status: 'success', data: {}}"
data = demjson.decode(nonstandard_json)
print(data)
3. 完整的处理方案
import re
import json
import demjson
from typing import Union
def parse_taobao_json(response_text: str) -> Union[dict, list]:
"""
解析淘宝API返回的各种JSON格式
"""
# 尝试标准JSON解析
try:
return json.loads(response_text)
except json.JSONDecodeError:
pass
# 处理JSONP格式
jsonp_match = re.search(r'\((\{.*\})\)', response_text)
if jsonp_match:
try:
return json.loads(jsonp_match.group(1))
except:
pass
# 使用demjson处理非标准格式
try:
return demjson.decode(response_text)
except:
raise ValueError("无法解析的JSON格式")
# 使用示例
response1 = 'jsonp123({"code":0,"data":{}})'
response2 = "{code: 0, 'data': []}"
print(parse_taobao_json(response1))
print(parse_taobao_json(response2))
简单总结:先用标准库处理,不行再用demjson兜底。
ls +1
地址里的 callback=jsonp232 直接改为 callback= 不就是 json 了
谢谢上面两个大神 我测试一下
JSONP
不一一答谢了,各位层主谢谢,搞定了。
js=1 我觉得也要删

