2017-10-17 11 views
0

私は単にstats.nba.comからJSONデータにアクセスするためのPython getリクエストを使用しようとしています。私はあなたのブラウザにURLを入力して、私が探している結果を得ることができるので、かなり簡単に思えます。しかし、私はこれを実行するたびに、プログラムはちょうど終わりまで走ります。私は私のget要求にいくつかのタイプのヘッダー情報を含める必要があるのだろうかと思います。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

私は(あなたが与えられた、あなたはこの問題を回避するために、あなたの要求にヘッダを追加することができますURLにアクセスしようとしていますあなたが提供する必要がある最小限の情報は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ウェブサイトには、「User-Agent」ヘッダー情報が必要です。

リクエストヘッダー情報は、ブラウザの[ネットワーク]タブから取得できます。

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) 
関連する問題