我是报废的新手,我正在与速率限制作斗争。
我试图抓取的数据是在共享一个 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
你能给我一些想法或者告诉我哪里出了问题吗?
谢谢!
你正在为此轮换代理,这是正确的方法,但我自己从来没有幸运地使用过免费代理。您可以从 https://geonde.com/free-proxy-list 中尝试一些并按正常运行时间和速度排序,但老实说,我只是选择高级住宅代理。
参考: