Jav*_*ara 6 python proxy http-proxy web-scraping python-requests
我正在尝试进行一些抓取,但每 4 个请求就会被阻止。我试图更改代理,但错误是一样的。我应该怎么做才能正确更改它?
这是我尝试的一些代码。首先,我从一个免费的网络获取代理。然后我使用新代理执行请求,但它不起作用,因为我被阻止了。
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
....
Run Code Online (Sandbox Code Playgroud)
def get_proxies():
ua=UserAgent()
headers = {'User-Agent':ua.random}
url='https://free-proxy-list.net/'
r=requests.get(url,headers=headers)
page = BeautifulSoup(r.text, 'html.parser')
proxies=[]
for proxy in page.find_all('tr'):
i=ip=port=0
for data in proxy.find_all('td'):
if i==0:
ip=data.get_text()
if i==1:
port=data.get_text()
i+=1
if ip!=0 and port!=0:
proxies+=[{'http':'http://'+ip+':'+port}]
return proxies
Run Code Online (Sandbox Code Playgroud)
proxies=get_proxies()
for i in range(1,100):
player=get_player(i,proxies[i//4])
....
code to manage the data
....
Run Code Online (Sandbox Code Playgroud)
我知道代理抓取很好,因为当我打印时,我会看到类似的内容: {'http': ' http://88.12.48.61:42365 '} 我不想被阻止。
小智 32
我最近遇到了同样的问题,但是按照其他答案中的建议在线使用代理服务器总是有风险(从隐私角度来看)、缓慢或不可靠。
相反,您可以使用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()
Run Code Online (Sandbox Code Playgroud)
与多线程/多处理相结合,您将能够立即抓取网站。
AWS 免费套餐为您提供每个区域 100 万个请求,因此此选项对于所有合理的抓取都是免费的。
小智 7
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)
Run Code Online (Sandbox Code Playgroud)
从这样的网站使用免费代理的问题是
网站知道这些并且可能会因为您正在使用其中之一而被阻止
你不知道其他人并没有因为对他们做坏事而将他们列入黑名单
该网站可能会使用某种形式的其他标识符根据其他特征(设备指纹识别、代理刺穿等)跨代理跟踪您
不幸的是,除了更复杂(跨多个设备分布、使用 VPN/TOR 等)并冒着 IP 因尝试类似 DDOS 的流量而被阻止的风险,或者最好查看该站点是否有 API之外,您无能为力。访问
| 归档时间: |
|
| 查看次数: |
14242 次 |
| 最近记录: |