Python:requests.get,在循环中迭代url

时间:2016-04-26 01:05:00

标签: python python-2.7

我试图通过在for循环中迭代requests.get(url)来从stats.nba.com获取信息,其中url在每次迭代时都会更改。如果我只是迭代它一旦它工作但两次或更多似乎给出错误,我不知道为什么。我是编程新手,所以任何信息都会有所帮助。提前致谢。这是我的代码:

import requests
import json

team_id = 1610612737

def get_data(url):
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        return data
    else:
        print(response.text)
        print(response.status_code)

for i in range(30): # 30 NBA Teams
    base_url = "http://stats.nba.com/stats/teamdetails?teamID="   
    team_url = base_url + str(team_id)
    data = get_data(team_url)

    ## Do stuff ##

   team_id +=1

如果我在范围(1)中为我做的话:'它有效,但如果范围大于1,我每次迭代都会得到status_code = 400.感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

网站限制每秒的请求数,因此您需要包含特定的请求标头或延迟脚本(第一个选项是两者中最快且可能最可靠的选项)。

标题方法:

'''
add under team_id = 1610612737
'''

HEADERS = {'user-agent': ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)'
                          'AppleWebKit/537.36 (KHTML, like Gecko)'
                          'Chrome/45.0.2454.101 Safari/537.36'),
                          'referer': 'http://stats.nba.com/scores/'}

然后将此添加到您的回复get

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

*如果您使用此方法,则根本不需要延迟脚本。

延迟方法:

import time
time.sleep(10) # delays for 10 seconds (put in your loop)

<击> 似乎是使用延迟的命中或未命中,所以除非绝对必要,否则我不建议使用。