jQuery112307997584997957201_1684933524717({
"version": "885c6d33cf9ec1dda48bc709b0513859",
"result": {
"pages": 1,
"data": [{
"S_CODE": "代码1",
"S_NAME": "名称1"
},{
"S_CODE": "代码2",
"S_NAME": "名称2"
}],
"count": 32
},
"success": true,
"message": "ok",
"code": 0
});
我用python requests 采集网页数据,返回就是上述的代码
response = requests.get(url)
try:
resultdata = response.content.decode('utf-8')
jsDumps = json.dumps(resultdata)
rd = json.loads(jsDumps)
print(rd)
d1 = jsonpath.jsonpath(rd,"$..S_CODE")
print(d1) #这句总是打印False
except Exception as e1:
print(e1)
我想取得多个S_CODE和S_NAME值,但总是打印False, 我对py和jsonPath都不熟悉,麻烦各位帮我看看,谢谢啊!
json_data = response.content.decode('utf-8')
# 从字符串中删除'jQuery...'前面的内容以及末尾的分号 ';'
json_data = json_data.replace('jQuery112307997584997957201_1684933524717(', '')
json_data = json_data[:-2]
# 解析json数据
data = json.loads(json_data)
# 通过jsonpath提取所有"S_CODE"的值
s_codes = jsonpath.jsonpath(data, '$..S_CODE')
该回答引用ChatGPT4与博主@晓码自在合作编写:
根据你提供的代码和错误信息,出现问题的原因很可能是:
解决方法:
首先需要使用正则表达式或其他方法确保resultdata是标准JSON格式的字符串,如果不是需要进行修复后再解析。
JSON字符串解析后得到的是一个JSON对象(Dictionary),需要传入这个对象给jsonpath,而不是原始字符串。
修复后的代码如下:
python
import requests
import json
import jsonpath
import re
response = requests.get(url)
resultdata = response.content.decode('utf-8')
# 修复resultdata为JSON格式字符串
resultdata = re.sub(r'^jQuery\d+\((.*)\)$', r'\1', resultdata)
# JSON字符串解析为Python对象
rd = json.loads(resultdata)
# 传入JSON对象给jsonpath
d1 = jsonpath.jsonpath(rd,"$..S_CODE")
print(d1)
首先使用正则表达式去掉开头的jQuery...,修复为JSON字符串。然后使用JSON.loads()解析为Python对象,这个对象才是jsonpath所需要的输入。
传入修复后的JSON对象rd给jsonpath后,就可以正确获取S_CODE的值并打印出来。
JSON和jsonpath都是比较常用的工具,了解数据格式与解析对象的对应关系,对调用各种API和处理响应数据很重要。