Como girar proxies em Python

Domine a rotação de proxy em Python para superar as proibições de IP e simplificar seu processo de coleta de dados da Web.
12 min de leitura
How to Rotate Proxies in Python blog image

Neste guia sobre como rotacionar proxies em Python, você aprenderá:

  • O que são proxies e por que usá-los
  • O que é rotação de proxy e por que você pode precisar dela
  • Como rotacionar proxies em Python
  • Limitações comuns quando você gira proxies em Python

Vamos mergulhar de cabeça!

O que é um proxy?

Um proxy é um servidor que atua como intermediário entre um usuário e um recurso de rede na Internet. Portanto, você pode pensar em um proxy como um intermediário que encaminha solicitações e respostas entre as partes.

Por que usar proxies em Python?

Quando você envia uma solicitação a um site usando um proxy, a solicitação passa primeiro pelo servidor proxy. Em seguida, o proxy encaminha a solicitação para o site, recebe a resposta e a envia de volta para você. Esse processo mascara seu endereço IP para o destino, fazendo com que pareça que a solicitação está vindo do servidor proxy e não do seu dispositivo.

O motivo típico pelo qual você deseja usar um proxy é no caso de automação de solicitações da Web ou raspagem da Web. Nesse cenário, Python é uma das melhores linguagens para raspagem da Web, graças às suas extensas bibliotecas e à grande e ativa comunidade.

O que é rotação de proxy e por que você precisa dela?

Se você fizer muitas solicitações a partir de um único endereço IP, os sites poderão bloqueá-lo por meio de limitação de taxa ou proibição total de IP. É nesse ponto que a rotação de proxy por meio de proxies é útil.

Alternar sistematicamente entre diferentes servidores proxy ao fazer solicitações na Web é uma das melhores maneiras de implementar a rotação de endereços IP. Esse procedimento ajuda a contornar técnicas comuns de antirrastreamento e oferece os seguintes benefícios:

  • Evitar bloqueios de IP: Distribua as solicitações em vários IPs, dificultando a detecção e o bloqueio de sua atividade de raspagem pelos sites.
  • Contornar limites de taxa: Os sites geralmente definem limites de solicitação por endereço IP em um período de tempo específico. A rotação de proxies ajuda a continuar a raspagem mesmo depois de atingir esses limites em um IP.
  • Acesso a conteúdo com restrição geográfica: Alguns sites exibem conteúdo diferente com base na localização geográfica. A rotação de proxies com proxies de diferentes países permite acessar conteúdo específico do local.

Como girar proxies em Python: 3 abordagens

Agora que você sabe o que são proxies e por que rotacioná-los, prepare-se para alguns tutoriais passo a passo em Python. Os próximos parágrafos mostrarão como rotacionar proxies em Python usando diferentes abordagens e bibliotecas.

O site de destino de todos os scripts será o ponto de extremidade /ip do projeto HTTPBin. Esse endpoint especial retorna o endereço IP do chamador, o que o torna perfeito para testar se o IP visto pelo servidor está girando.

É hora de rodar alguns proxies em Python!

Requisitos

Para replicar os tutoriais de proxies rotativos com Python, você deve ter o Python 3.7 ou superior instalado em seu computador.

Pré-requisitos

Suponha que você chame a pasta principal do seu projeto de proxy_rotation/. No final desta etapa, a pasta terá a seguinte estrutura:

proxy_rotation/
    ├── requests_file.py
    ├── async.py
    ├── scrapy_rotation/
    └── venv/ 

Onde:

  • requests.py e async.py são arquivos Python que armazenam a lógica de rotação do proxy Requests e AIOHTTP, respectivamente.
  • scrapy_rotation/ é uma pasta que contém um projeto Scrapy. Você o criará e instanciará mais tarde.
  • venv/ contém o ambiente virtual

Você pode criar o diretório do ambiente virtual venv/ da seguinte forma:

python -m venv venv

Para ativá-lo, no Windows, execute:

venv\Scripts\activate

De forma equivalente, no macOS e no Linux, execute:

source venv/bin/activate

Como pré-requisito final, você precisa recuperar uma lista de proxies. Para este artigo, você pode usar nossa lista de proxies gratuitos.

Como fazer a rotação de proxies em Python com solicitações

Nesta seção do tutorial, você aprenderá a girar proxies em Python com Requests.

Etapa 1: Instalar dependências

No ambiente virtual ativado, instale o Requests com:

pip install requests

Etapa 2: Definir a lógica de rotação

Para rodar proxies em Python com o Requests, escreva o seguinte código no arquivo requests_file.py:

import random
import requests

# Define a list of proxies and return a random one
def get_random_proxy():
    proxies = [
        "http://PROXY_1:PORT_X",
        "http://PROXY_2:PORT_Y",
        "http://PROXY_3:PORT_X",
        # Add more proxies here...
    ]

    # Randomly pick a proxy
    return random.choice(proxies)

for i in range(3):
    proxy_url = get_random_proxy()
    proxies = {
        "http": proxy_url,
        "https": proxy_url,
    }
    response = requests.get("https://httpbin.io/ip", proxies=proxies)
    print(response.text)

Onde:

  • A função get_random_proxy() armazena a lista de proxies que você recuperou e retorna um aleatório com o método random.choice().
  • O loop for itera sobre a lista aleatória de proxies e faz a solicitação real com o método requests.get(). Para obter mais informações, leia nosso guia sobre como usar um proxy com Python Requests.

Etapa 3: iniciar o script

Para iniciar o script, execute:

python requests_file.py

Abaixo está a resposta esperada:

{
  "origin": "PROXY_3:PORT_K"
}
{
  "origin": "PROXY_1:PORT_N"
}
{
  "origin": "PROXY_2:PORT_P"
}

Maravilhoso! Os IPs de saída de seu script foram girados conforme desejado.

Como fazer a rotação de proxies em Python com AIOHTTP

A principal limitação da abordagem aleatória usando a biblioteca Requests é que ela usa um proxy de cada vez. Isso significa que você precisa esperar que cada solicitação seja concluída antes que o próximo proxy seja usado.

Para evitar essa limitação, você pode usar o AIOHTTP. Essa biblioteca permite que você faça solicitações assíncronas, usando assim vários proxies simultaneamente de forma não bloqueante. Em outras palavras, ela permite que você alterne os proxies da sua lista fazendo solicitações assíncronas e paralelas ao servidor de destino. Veja o AIOHTTP em ação em nosso guia sobre raspagem assíncrona da Web.

A seção a seguir mostra como alternar proxies em Python com AIOHTTP.

Etapa 1: Instalar dependências

No ambiente virtual ativado, instale o AIOHTTP com:

pip install aiohttp

Etapa 2: Definir a lógica de rotação

Para rodar proxies em Python com AIOHTTP, escreva o seguinte código no arquivo async.py:

import asyncio
import aiohttp

# Define a list of proxies
proxies_list = [
    "http://PROXY_1:PORT_X",
    "http://PROXY_2:PORT_Y",
    "http://PROXY_3:PORT_X",
    # Add more proxies here...
]

async def fetch_ip(session, proxy_address, attempt):
    print(f"Attempt {attempt} using proxy: {proxy_address}")
    async with session.get("https://httpbin.io/ip", proxy=proxy_address) as response:
        json_response = await response.json()
        print(f"Response from httpbin.io/ip (Attempt {attempt}):")
        print(f"IP Address: {json_response.get('origin', 'Unknown')}")
        print("-" * 40)
        return json_response

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = []
        num_attempts = 3
        for i in range(num_attempts):
            # Rotate proxies using the modulus operator.
            proxy_address = proxies_list[i % len(proxies_list)]
            tasks.append(fetch_ip(session, proxy_address, i + 1))
        # Run all requests concurrently
        await asyncio.gather(*tasks)

# Launch the script
asyncio.run(main())

Esse código faz o seguinte:

  • A função fetch_ip() gerencia as solicitações usando a sessão, um proxy e o número da tentativa. Em particular, ela envia uma solicitação GET para o site de destino e imprime a resposta.
  • A função main()
    : o espaço reservado da Polylang não é modificado

Etapa 3: iniciar o script

Para iniciar o script, execute:

python async.py

Essa é a resposta esperada:

Attempt 1 using proxy: http://PROXY_1:PORT_X
Attempt 2 using proxy: http://PROXY_2:PORT_Y
Attempt 3 using proxy: http://PROXY_3:PORT_Z

Response from httpbin.io/ip (Attempt 3):
IP Address: xxx.xxx.xxx.xxx
----------------------------------------
Response from httpbin.io/ip (Attempt 1):
IP Address: yyy.yyy.yyy.yyy
----------------------------------------
Response from httpbin.io/ip (Attempt 2):
IP Address: zzz.zzz.zzz.zzz
----------------------------------------

Incrível! Os IPs estão sendo rotacionados conforme o esperado.

Como girar proxies com o Python Scrapy

Em um artigo anterior, discutimos a possibilidade de rotacionar proxies em Python com o Scrapy usando o scrapy-rotating-proxies.

Nesta seção guiada, você aprenderá como fazer isso!

Etapa 1: Instalar dependências

No ambiente virtual ativado, instale as bibliotecas necessárias:

pip install scrapy scrapy-rotating-proxies

Etapa 2: Criar um novo projeto Scrapy

Dentro da pasta principal de seu repositório(proxy_rotation/), instancie um novo projeto Scrapy com este comando:

scrapy startproject scrapy_rotation

Isso criará uma nova subpasta chamada scrapy_rotation/ que tem a seguinte estrutura:

scrapy_rotation/
  ├── scrapy_rotation/ 
  │   ├── __init__.py
  │   ├── items.py # Defines the data structure for scraped items
  │   ├── middlewares.py # Custom middlewares
  │   ├── pipelines.py # Handles post-processing of scraped data
  │   ├── settings.py # Project settings
  │   └── spiders/ # Folder for all spiders
  └── scrapy.cfg # Scrapy configuration file

Da pasta principal(proxy_rotation/), vá para a pasta scrapy_rotation/:

cd scrapy_rotation

Agora você pode criar uma nova aranha que aponta para o site de destino executando:

scrapy genspider rotation http://httpbin.io/ip

Esse script também cria o arquivo rotation.py dentro da pasta spiders/.

Etapa nº 3: Definir a lógica de rotação

A lógica de rotação do proxy pode ser gerenciada modificando o arquivo settings.py com as seguintes configurações:

# Enable the rotating proxies middleware
DOWNLOADER_MIDDLEWARES = {
    "rotating_proxies.middlewares.RotatingProxyMiddleware": 610,
    "rotating_proxies.middlewares.BanDetectionMiddleware": 620,
}

# List of proxies to rotate
ROTATING_PROXY_LIST = [
    "http://PROXY_1:PORT_X",
    "http://PROXY_2:PORT_Y",
    "http://PROXY_3:PORT_Z",
    # Add more proxies as needed
]

# Configure retry settings
RETRY_TIMES = 5  # Number of retries for failed requests
RETRY_HTTP_CODES = [500, 502, 503, 504, 408]  # HTTP codes to retry

O que gerencia a rotação do proxy aqui é a opção rotating_proxies.middlewares.RotatingProxyMiddleware: 610 em DOWNLOADER_MIDDLEWARES. Em particular, essa opção seleciona um proxy da ROTATING_PROXY_LIST e o atribui a cada solicitação.

Além disso, a opção rotating_proxies.middlewares.BanDetectionMiddleware: 620 permite que o coletor de dados detecte se um IP foi banido ou bloqueado pelo site de destino. Se uma solicitação falhar devido a esse motivo, o middleware tentará novamente a solicitação com um novo proxy. Portanto, essa opção trabalha em conjunto com o RotatingProxyMiddleware para garantir que os proxies banidos sejam evitados automaticamente.

Agora, no arquivo rotation.py dentro da pasta spiders/, você pode escrever o seguinte:

import scrapy

class IpSpider(scrapy.Spider):
    name = "ip_spider"
    start_urls = ["http://httpbin.io/ip"]
    def parse(self, response):
        # Extract and print the IP address from the response
        ip = response.json().get("origin")
        self.log(f"IP Address: {ip}")

Essa classe instancia toda a aranha e imprime a resposta a cada solicitação.

Etapa 4: Iniciar o script

Para iniciar o script, você precisa usar o nome da classe IpSpider(), que é ip_spider:

scrapy crawl ip_spider

Os dados retornados pelo Scrapy na CLI são particularmente completos. Portanto, se tudo correu bem, entre as outras informações, você encontrará algo como isto:

2025-02-18 14:55:17 [rotating_proxies.expire] DEBUG: Proxy <http://PROXY_1:PORT_X> is GOOD
2025-02-18 14:55:17 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.io/robots.txt> (referer: None)
2025-02-18 14:55:24 [rotating_proxies.middlewares] INFO: Proxies(good: 1, dead: 0, unchecked: 2, reanimated: 0, mean backoff time: 0s)

Limitações das abordagens acima para rotação de proxy em Python

Os métodos de rotação de proxy mencionados acima são úteis, mas têm algumas limitações:

  • Eles exigem que você recupere e gerencie manualmente uma lista de proxies.
  • Eles envolvem código padrão.
  • Eles ainda podem resultar em proibições de IP se você não usar servidores proxy de alta qualidade.

Se você estiver procurando uma maneira mais eficiente e eficaz de lidar com a rotação de proxy no Python, a Bright Data oferece alguns dos melhores proxies rotativos do mercado. Com apenas um único URL de proxy, você pode integrá-los ao seu cliente HTTP ou à biblioteca de coleta de dados. Isso elimina a necessidade de código padrão e gerenciamento manual de rotação.

Outros benefícios importantes dessa abordagem são:

  • Rotação automática de IPs com IPs fixos configuráveis
  • Acesso a 150 million+ milhões de IPs residenciais
  • Controle de geolocalização sobre os locais do servidor proxy
  • Suporte aos protocolos HTTP, HTTPS e SOCKS

Simplifique seu gerenciamento de proxy – descubra nossos proxies de rotação automática!

Conclusão

Neste artigo, você aprendeu a rodar proxies em Python usando três bibliotecas diferentes: Requests, AIOHTTP e Scrapy. Conforme demonstrado nas seções guiadas acima, o processo não é complexo e requer apenas algumas linhas de código.

No entanto, essa abordagem tem algumas desvantagens:

  • O código é muito pesado, o que torna seu script menos sustentável.
  • Você precisa gerenciar e fornecer acesso a uma grande lista de servidores proxy.

Felizmente, você pode evitar todo esse incômodo com os proxies de rotação automática da Bright Data – uma solução mais eficiente para rotacionar proxies em Python.

A Bright Data controla os melhores servidores proxy do mundo, atendendo a empresas da Fortune 500 e a mais de 20.000 clientes. Sua oferta inclui uma ampla variedade de tipos de proxy:

Crie uma conta gratuita na Bright Data hoje mesmo para testar nossos proxies e soluções de raspagem!

Não é necessário cartão de crédito