【问题标题】:Requests issue - No JSON object could be decoded请求问题 - 无法解码 JSON 对象
【发布时间】:2016-03-11 19:46:55
【问题描述】:

我是 python 新手,我正在尝试将一些 MATLAB 代码转换为 python。 我有一个来自 NBA 网站的 json 格式的 url,我想解析并作为数据框返回。到目前为止,我有以下代码:

import requests
url = 'http://stats.nba.com/stats/shotchartdetail?PlayerID=2544&TeamID=0&VsConference=&Location=&SeasonType=Regular+Season&RookieYear=&Season=2015-16&DateFrom=&ClutchTime=&GameID=&OpponentTeamID=0&DateTo=&GameSegment=&AheadBehind=&LastNGames=0&VsDivision=&LeagueID=&Position=&Outcome=&ContextMeasure=FGM&SeasonSegment=&Period=0&Month=0'
r = requests.get(url)
data = r.json()

我可以看到 json 通过使用 url 在我的浏览器上加载,这在 MATLAB 中也可以使用,但我在 python 中收到以下错误消息: 无法解码任何 JSON 对象

知道问题是什么吗?

【问题讨论】:

  • 这里有一个提示:尝试print r.status_code, r.ok, r.text 以查看实际从 nba 网站返回的数据。
  • 仅供参考,对我来说,NBA 两次返回 400(错误请求),然后几分钟后返回 200(OK)和一些有效的 json。也许 NBA 遇到了某种问题。
  • 感谢您的建议。我得到以下信息: 400 False 在 MATLAB 中,我每次都可以读取文件。它在 python 中工作的唯一时间是我在浏览器中输入 url,然后调用 python 代码。奇怪...
  • 我在这里找到了答案:stackoverflow.com/questions/35137724/… 似乎可以解决问题。

标签: python json python-requests


【解决方案1】:

我在这里找到了答案:

Python Requests Client Error: Bad Request, but works after website has been opened in browser

添加用户代理有效:

u_a = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36"
response = requests.get(url, headers={"USER-AGENT":u_a})

【讨论】:

    【解决方案2】:

    您可以尝试获取r的文本元素并转换为json,如下所示:

    import requests
    import json
    
    url = 'http://stats.nba.com/stats/shotchartdetail?PlayerID=2544&TeamID=0&VsConference=&Location=&SeasonType=Regular+Season&RookieYear=&Season=2015-16&DateFrom=&ClutchTime=&GameID=&OpponentTeamID=0&DateTo=&GameSegment=&AheadBehind=&LastNGames=0&VsDivision=&LeagueID=&Position=&Outcome=&ContextMeasure=FGM&SeasonSegment=&Period=0&Month=0'
    r = requests.get(url)
    data = json.loads(r.text)
    

    虽然通过复制和粘贴您的代码对我有用,但这可能是一种解决方法。

    【讨论】:

    • 我尝试了您的建议,不幸的是我得到了相同的结果。似乎 r = requests.get(url) 没有返回有效文本。
    • @GeorgeC。您的代码和我的代码都在这里完美运行。尝试打印r.text,看看你会得到什么。如果您运行的是 Windows,那么您的 Python 很可能被防火墙保护,因此请求没有得到任何回复。
    • 谢谢。 r.text 为空。我正在使用窗户。我将研究防火墙的python。有什么建议可以解决这个问题吗?
    • 我关闭了 windows 防火墙和 AVG 软件,但结果仍然相同。
    • 我诚实的建议是使用对开发人员更友好的操作系统,例如 Linux、OSX 或 BSD。如果这不可能,您可能需要检查this
    猜你喜欢
    • 2022-07-11
    • 1970-01-01
    • 2014-06-22
    • 2016-09-28
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多