我正在尝试抓取,但是每4个请求都会被阻止。我试图更改代理,但错误是相同的。我该怎么做才能正确更改它?
这是我尝试的一些代码。首先,我从免费的网络获取代理。然后,我使用新代理执行请求,但是由于被阻止,它不起作用。
<body onload="resetscroll()">
<script>
function resetscroll() {
window.scrollTo(0, 0);
}
</script>
from fake_useragent import UserAgent
import requests
def get_player(id,proxy):
ua=UserAgent()
headers = {'User-Agent':ua.random}
url='https://www.transfermarkt.es/jadon-sancho/profil/spieler/'+str(id)
try:
print(proxy)
r=requests.get(u,headers=headers,proxies=proxy)
execpt:
....
code to manage the data
....
我知道代理刮擦效果很好,因为当我打印时,我看到类似以下内容: {'http':'http://88.12.48.61:42365'} 我不想被阻止。
答案 0 :(得分:2)
使用来自此类站点的免费代理的问题是
网站了解这些信息,并且可能会因为您使用其中之一而被阻止
您不知道其他人没有因为与他们做坏事而将他们列入黑名单
该网站可能会使用其他形式的其他标识符来基于其他特征(设备指纹识别,代理插入等)
不幸的是,除了更复杂的(分布在多个设备上,使用VPN / TOR等)之外,您无能为力,并且可能会因尝试类似DDOS的流量或,最好查看该网站是否具有用于访问的API
答案 1 :(得分:2)
我最近遇到了同样的问题,但是按照其他答案中的建议在线使用代理服务器总是有风险的(从隐私角度来看)、速度慢或不可靠。
相反,您可以使用 requests-ip-rotator python 库通过 AWS API Gateway 代理流量,这样每次都会为您提供一个新 IP:
pip install requests-ip-rotator
这可以按如下方式使用(特别适用于您的网站):
import requests
from requests_ip_rotator import ApiGateway, EXTRA_REGIONS
gateway = ApiGateway("https://www.transfermarkt.es")
gateway.start()
session = requests.Session()
session.mount("https://www.transfermarkt.es", gateway)
response = session.get("https://www.transfermarkt.es/jadon-sancho/profil/spieler/your_id")
print(response.status_code)
# Only run this line if you are no longer going to run the script, as it takes longer to boot up again next time.
gateway.shutdown()
结合多线程/多处理,您将能够立即抓取网站。
AWS 免费套餐为您提供每个区域 100 万个请求,因此此选项对于所有合理的抓取都是免费的。
答案 2 :(得分:1)
import requests
from itertools import cycle
list_proxy = ['socks5://Username:Password@IP1:20000',
'socks5://Username:Password@IP2:20000',
'socks5://Username:Password@IP3:20000',
'socks5://Username:Password@IP4:20000',
]
proxy_cycle = cycle(list_proxy)
# Prime the pump
proxy = next(proxy_cycle)
for i in range(1, 10):
proxy = next(proxy_cycle)
print(proxy)
proxies = {
"http": proxy,
"https":proxy
}
r = requests.get(url='https://ident.me/', proxies=proxies)
print(r.text)