【问题标题】:Sometimes I see this JSONDecodeError and sometimes I don't有时我看到这个 JSONDecodeError 有时我没有
【发布时间】:2021-06-19 20:41:22
【问题描述】:

我正在尝试在 python 中使用 Requests 从 API 获取数据。 有时它工作正常,有时它会抛出此错误:

raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我不知道这里出了什么问题,谁能帮帮我。
Here's the API

这是我的代码:

import requests
import json

headers = {'User-Agent': 'Mozilla/5.0'}
payload = {'symbol':'NIFTY'}
r = requests.get('https://www.nseindia.com/api/option-chain-indices', params = payload, headers = headers).json()

print(r.keys())
print(r['records'])

【问题讨论】:

  • 解析前检查响应码!
  • API 链接已失效。
  • 确保保存响应,也许在尝试将其解码为 JSON 之前,然后您可以检查它 - 它不是 JSON,通过检查它您可能会发现它是 HTML,也许它包含的文本给出了非 JSON 响应的一些原因。也许你必须在解码周围使用try/except JSONDecodeError 来捕获异常。
  • @martineau 它没有死。
  • 添加异常捕获并记录。代码基本上可以工作,而且由于它很小,看起来很明显它可能失败的原因与代码本身无关,即互联网或远程 Web 服务器的问题。再多的询问也无法澄清、诊断或修复这个问题——你所能做的就是让你的代码变得健壮,例如添加日志记录,至少可以提供你自己的信息,以帮助你理解之后的不同故障。

标签: python json python-requests


【解决方案1】:

因为您需要设置 cookie 才能使本网站正常运行。

要使用requests,您需要使用session

import requests

s = requests.session()

headers = {'User-Agent': 'Mozilla/5.0'}
s.get("https://www.nseindia.com", headers=headers)  # set cookies

payload = {'symbol':'NIFTY'}
r = s.get('https://www.nseindia.com/api/option-chain-indices', params=payload, headers=headers)
r.json()  # will display content

【讨论】:

  • 我确实尝试过您的解决方案,但 10 次中有 1 次显示相同的错误,我们如何在 api 请求中使用会话
  • 它应该每次都可以工作,但这取决于本网站的服务器端逻辑。当我再次尝试使用这种方法时,它每次都有效,所以我认为它是关于 cookie 设置的。尝试更改 UA,使用更现实的一种。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2020-07-01
  • 1970-01-01
相关资源
最近更新 更多