python - 捕获 json 响应

标签 python json python-3.x

我正在尝试为数据聚合项目检索 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/

相关文章:

java - 需要从js发送json数据到java

Python:一些 "__magic__"属性从该函数中引用一个函数

python - 如何在 App Engine 中从 JSON 中排除 db.Blob

c# - 从 Json 文件中获取选定的结果

python - 为什么信号不发出?

Python 使用全局 vs 指定模块

python - 为什么一个可以和自身相加的类不能求和? (a+a 有效,sum([a,a]) 失败)

python - 逻辑回归: objects are not aligned

Python Pandas 根据格式替换字符串

python - 沿轴计算多维数组中某个值的百分位等级