捕获JSON响应

德里克·S。

我正在尝试为数据聚合项目检索json格式的交易所定价信息。一种api给我带来了问题。

在浏览器中调用url可以准确显示我的需求,但是我的调用引发了错误。我想知道我是在处理格式错误的响应,不了解某些编码/解码问题,还是只是看不到明显的东西。

在看似无法正常工作的48小时内,我尝试了多种解决方案,可以在Google上进行搜索。我将在下面举几个例子。基本上,只需要通过直接将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"}}

发布之前,我努力看了看是否解决了类似的问题。确实,我发现了几种似乎应该立即使用的方法。我尝试过的任何事情都没有产生我需要的简单结果。

谢谢你的时间。

史蒂夫·J

您会发现,如果要在示例中打印(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'])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章