2016-01-31 55 views
1

我想在python中使用請求做一個get請求,但我得到一個400錯誤的請求錯誤。但是,當我在同一個網址上執行wget或curl時,它會起作用。這裏是我的代碼:Python中的GET請求不好請求,但wget和捲曲工作

daily_scoreboard_url = 'http://stats.nba.com/stats/scoreboardV2?DayOffset=0&LeagueID=00&gameDate=01/12/2016' 
scoreboard_response = requests.get(daily_scoreboard_url) 
scoreboard_response.raise_for_status() 

然而,當我嘗試像

curl 'http://stats.nba.com/stats/scoreboardV2?DayOffset=0&LeagueID=00&gameDate=01/12/2016' 
wget 'http://stats.nba.com/stats/scoreboardV2?DayOffset=0&LeagueID=00&gameDate=01/12/2016' 

它工作的事情。我也嘗試了使用get請求從stats.nba.com中獲取其他內容,並且它工作正常。

teamslist_url = 'http://stats.nba.com/stats/leaguedashteamstats?Conference=&DateFrom=&DateTo=&Division=&GameScope=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2015-16&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=' 
teamslist_response = requests.get(teamslist_url) 
teamslist_response.raise_for_status() 

回答

2

您需要give requests a user-agent

>>> headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36'} 
>>> scoreboard_response = requests.get(daily_scoreboard_url, headers=headers) 
>>> scoreboard_response 
<Response [200]> 

這是該網站的錯,不是reuqests的。某些網站需要用戶代理來檢查您是否是人或機器人/腳本。

但是,我們可以手動設置用戶代理。在這個例子中,這是我的Chrome的用戶代理。

+0

謝謝,這工作!但出於好奇,爲什麼我不需要其他網址的用戶代理來運行? – birna

+1

@birna:正如我所說的,*某些網站需要用戶代理來檢查您是否是人類或bot /腳本。*似乎本網站不允許沒有用戶代理的請求。它由網站的所有者設置。 –