我正在尝试为数据聚合项目检索 json 格式的交易所定价信息。一个 API 给我带来了问题。
在我的浏览器中调用一个 url 显示了我所需要的,但我的调用引发了错误。 我想知道我是否正在处理格式错误的响应、不理解某些编码/解码问题,或者我是否只是没有看到明显的东西。
在看似明显无效的 48 小时内,我尝试了尽可能多的不同解决方案。我将在下面举几个例子。 基本上,只需要通过将 url 直接调用到我可以阅读的内容中来获得我看到的响应。
import requests
import json
r = requests.get('https://www.nlexch.com/api/v2/tickers/ltcbtc.json')
print(r)
<Response [200]>
..
r = requests.get('https://www.nlexch.com/api/v2/tickers/ltcbtc.json')
response_data = r.json()
print(response)
Traceback (most recent call last):
File "E:\Mega2\Projects\Unobot\nlex-test.py", line 5, in <module>
response_data = r.json()
File "C:\Users\encry\AppData\Local\Programs\Python\Python37-32\lib\site-packages\requests\models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Users\encry\AppData\Local\Programs\Python\Python37-32\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\encry\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\encry\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我期望得到的是我的浏览器在 https://www.nlexch.com/api/v2/tickers/ltcbtc.json
此时是:
{"at":1567086780,"ticker":{"buy":"0.005","sell":"0.02","low":"0.00685","high":"0.00685","last":"0.00685","vol":"15.80093851"}}
在发帖之前我仔细看了看,看看是否有类似的问题得到解决。事实上,我发现了几种看起来应该开箱即用的方法。我尝试的任何事情都没有产生我需要的简单结果。
感谢您的宝贵时间。
最佳答案
您会发现,如果您在示例中打印 (r.text),您将获得 google 搜索页面。目的地似乎正在寻找有效的用户代理。当我插入一个代理时,它似乎起作用了。请注意,文本是有效的 json,我现在可以提取 json 响应。
import requests
import json
if __name__ == '__main__':
url = 'https://www.nlexch.com/api/v2/tickers/ltcbtc.json'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
r = requests.get(url, headers=headers)
print(r.text)
j = r.json()
print(j['ticker'])
关于python - 捕获 json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57711920/