如何在Python请求上旋转代理

时间:2019-04-26 17:07:55

标签: python web-scraping proxy python-requests http-proxy

我正在尝试抓取,但是每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'} 我不想被阻止。

3 个答案:

答案 0 :(得分:2)

使用来自此类站点的免费代理的问题是

  1. 网站了解这些信息,并且可能会因为您使用其中之一而被阻止

  2. 您不知道其他人没有因为与他们做坏事而将他们列入黑名单

  3. 该网站可能会使用其他形式的其他标识符来基于其他特征(设备指纹识别,代理插入等)

不幸的是,除了更复杂的(分布在多个设备上,使用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)