如何从stats.nba.com API获取JSON响应?

问题描述:

我只是试图简单地使用Python获取请求来访问来自stats.nba.com的JSON数据。这看起来很简单,因为我可以在浏览器中输入URL并获得我要查找的结果。但是,每当我运行这个程序时,程序就会结束。我想知道是否必须在我的获取请求中包含某些类型的标题信息。如何从stats.nba.com API获取JSON响应?

的代码如下:

import requests 

url = 'http://stats.nba.com/stats/commonteamroster?LeagueID=00&Season=2017-18&TeamID=1610612756' 
response=requests.get(url) 
print response.text 

我试图访问网址你给,你可以添加标题您的要求来避免这个问题(您需要提供的最少信息是User-Agent,我认为您可以使用更多标题信息):

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'} 
response = requests.get(url, headers=headers) 

stats.nba.com网站需要您的'用户代理'标题信息。

您可以从浏览器的网络选项卡中获取您的请求标题信息。

以铬为例,当你按F12,并访问你给出的url,你可以找到相关的请求信息,最有用的信息是请求头。

enter image description here

+0

这是可行的,但严重的刮操作应该使用自己的用户代理,除非有一个很好的借口,歪曲的自动刮刀机器人作为一个人控制的浏览器。所有的良好/道德刮板定义他们自己的用户代理字符串。 – halfer

+1

@halfer同意:)感谢您的评论,这对我很有帮助 – Ballack

您需要使用头文件。尝试从浏览器的网络标签进行复制。下面是我工作:

request_headers = { 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 
    'Accept-Encoding': 'gzip, deflate', 
    'Accept-Language': 'en-US,en;q=0.8', 
    'Connection': 'keep-alive', 
    'Host': 'stats.nba.com', 
    'Upgrade-Insecure-Requests': '1', 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' 
} 

,这里是修改后的get

response = requests.get(url, headers = request_headers)