2017-10-17 243 views
0

我只是試圖簡單地使用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 

回答

3

我試圖訪問網址你給,你可以添加標題您的要求來避免這個問題(您需要提供的最少信息是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

2

您需要使用頭文件。嘗試從瀏覽器的網絡標籤進行復制。下面是我工作:

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)