python中关于处理json数据问题

python中关于处理json数据问题

问题描述:

import requests
import json


headers = {
        'Connection': 'keep-alive',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
        'Accept': '*/*',
        'Referer': 'http://data.eastmoney.com/',
        'Accept-Language': 'zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6',
    }

url = 'http://push2.eastmoney.com/api/qt/ulist.np/get?cb=jQuery1123047756628911864274_1612930605920&fltt=2&secids=0.002594&fields=f62%2Cf184%2Cf66%2Cf69%2Cf72%2Cf75%2Cf78%2Cf81%2Cf84%2Cf87%2Cf64%2Cf65%2Cf70%2Cf71%2Cf76%2Cf77%2Cf82%2Cf83%2Cf164%2Cf166%2Cf168%2Cf170%2Cf172%2Cf252%2Cf253%2Cf254%2Cf255%2Cf256%2Cf124%2Cf6%2Cf278%2Cf279%2Cf280%2Cf281%2Cf282&ut=b2884a393a59ad64002292a3e90d46a5'
html = requests.get(url,headers = headers)

content = html.text
print(type(content))
data = json.loads(content)

该代码运行的时候报错

这是不是因为返回的json数据格式不对导致的?

html.text 获取的是jsonp格式, 比json格式多套了一个函数调用。
jQuery1123047756628911864274_1612930605920(  );
把这个函数调用去掉即可。
content = re.findall(r'^jQuery\w+\((.+)\);$',html.text)[0]

获取的是跨域 json 格式, 简单来说类似于下面这种 : 

html_text = 'jsonpxxxxxx({"name":"shawn","passwd":123456})'

...

..

可以使用 Python的 re 模块将其匹配出来

.

import re

json_text = re.findall(".*?\((.*?)\).*?",html_text)[0]
print(json_text)

...

..

 

html_text 换成你的 html.text 就行了