在这种情况下我如何避免速率限制问题?

问题描述 投票:0回答:1

我是报废的新手,我正在与速率限制作斗争。

我试图抓取的数据是在共享一个 url 的网页中找到的,除了我将调用 CODE 的部分。

我发现的问题是,我拥有大量不同的代码,在受到网络限制之前,我只能下载前一百个左右。

for code in codes:
    url=url_partido.format(code)
    data=requests.get(url)
    with open("nbadata/games22/{}.html".format(code),"w+") as f:
        f.write(data.text)

我用这种方式提取第一个数据,问题是我有大约 1000 个不同的代码,我被阻止了大约 100 个。

我读到关于闪避率限制的不同方法,其中一种是更改标头以使服务器认为我们来自导航器:


data = requests.get(url,headers=headers)
for code in codes:
    url=url_partido.format(code)
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
    
    data = requests.get(url,headers=headers)
    with open("nbadata/games22/{}.html".format(code),"w+") as f:
        f.write(data.text)

失败,同样的问题。还尝试添加 timesleep(1) 以减少需求量。

我读到的最有用的东西是在不同的服务器之间切换将是最终的答案。我知道有免费服务器或高级服务器。我找到了其中的一些,我试过了,但还是失败了。

servers = ['95.216.194.46:1081', '45.174.87.18:999', ' 45.6.4.60:8080']
for code in codes:
    for server in servers:
        try:
            url = url_partido.format(code).replace('{server}', server)
            headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
            data = requests.get(url,headers=headers)
            with open("nbadata/games22/{}.html".format(code),"w+") as f:
                f.write(data.text)
            break
        except Exception as e:
            print(f"Error {url}: {e}")
            continue

你能给我一些想法或者告诉我哪里出了问题吗?

谢谢!

python web-scraping rate-limiting
1个回答
0
投票

你正在为此轮换代理,这是正确的方法,但我自己从来没有幸运地使用过免费代理。您可以从 https://geonde.com/free-proxy-list 中尝试一些并按正常运行时间和速度排序,但老实说,我只是选择高级住宅代理。

参考:

什么是住宅代理,为什么需要它们?

© www.soinside.com 2019 - 2024. All rights reserved.