我无法将请求的响应解码为有用的格式。代码如下:
import json
import requests
url = "https://www.tsx.com/json/company-directory/search/tsx/%5EC?callback=jQuery17109078120971266259_1565471114746&_=1565481666704"
r = requests.get(url)
字符串
我试着从论坛上的想法修改这些变体,但我得到了以下错误消息:
文件“C:\Users\XXXXX\Anaconda3\lib\json\decoder.py”,第357行,在raw_decode中,从None引发JSONDecodeError(“Expecting value”,s,err.value)JSONDecodeError:Expecting value
r = requests.get(url).json()
型
或
json_data = json.loads(r.text)
型
没有成功.为了展示我试图解码的内容:这里是r.text的第一行输出:
In [71]: runfile('C:/python...)
b'jQuery17109078120971266259_1565471114739({"last_updated":1565340914,"length":158,"results":[{"symbol":"AUMB","name":"1911 Gold Corporation","instruments":[{"symbol":"AUMB","name":"1911 Gold Corporation"}]},{"symbol":"ALBS.P","name":"A-Labs Capital I Corp.","instruments":[{"symbol":"ALBS.P","name":"A-Labs Capital I Corp."}]},{"symbol":"ALAB.P","name":"A-Labs Capital II Corp.","instruments":[{"symbol":"ALAB.P","name":"A-Labs Capital II Corp."}]},...
型
旁注:我在Google Chrome开发者工具中的“网络”下找到了“AJAX”URL。这些努力是我无法使用传统的BS 4刮取网站和学习请求刮取AJAX内容的能力的结果,如果我可以使用AJAX内容这个术语的话。
1条答案
按热度按时间ep6jt1vc1#
错误的原因是因为请求文本实际上不是有效的
json
。它有一些额外的文本,这些文本是来自前端的jquery调用。使用一点
regex
,你可以从你刚才展示的结果中提取json
,并在python
中作为json
对象使用:(?:jQuery[0-9_]*\()(.+)(?:\);)
,本质上意味着:(?:jQuery[0-9_]*\()
以jQuery开头,有一个可能带有下划线的大数字(非捕获);(.+)
之间的任何内容(?:\);)
以括号和分号结尾(非捕获)这里的结果:
字符串