Como Fazer Rotação de Proxies em Python

Domine a rotação de proxies em Python para superar banimentos de IP e otimizar seu processo de scraping de dados.
12 min de leitura
How to Rotate Proxies in Python blog image

Neste guia sobre como fazer rotação de proxies em Python, você aprenderá:

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

Vamos começar!

O Que É um Proxy?

Um proxy é um servidor que atua como intermediário entre um usuário e um recurso de rede pela 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 para um site usando um proxy, a solicitação primeiro passa pelo servidor proxy. Em seguida, o proxy encaminha sua 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 parecer que a solicitação vem do servidor proxy em vez do seu dispositivo.

O motivo típico para usar um proxy é no caso de automação de solicitações web ou scraping de dados. Nesse cenário, Python é uma das melhores linguagens para scraping de dados, graças às suas extensas bibliotecas e grande comunidade ativa.

O Que É Rotação de Proxies e Por Que Você Precisa Dela?

Se você fizer muitas solicitações de um único endereço IP, os sites podem bloqueá-lo por meio de limitação de taxa ou banimentos de IP diretos. É aqui que a rotação de IP via proxies ajuda.

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

  • Evitar bloqueios de IP: Distribua as solicitações entre vários IPs, dificultando a detecção e o bloqueio da sua atividade de scraping pelos sites.
  • Contornar limites de taxa: Os sites geralmente definem limites de solicitações por endereço IP dentro de um período específico. A rotação de proxies ajuda você a continuar o scraping mesmo após atingir esses limites em um IP.
  • Acessar 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 que você acesse conteúdo específico de uma localidade.

Como Fazer Rotação de Proxies em Python: 3 Abordagens

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

O site de destino para todos os scripts será o endpoint /ip do projeto HTTPBin. Esse endpoint especial retorna o endereço IP de quem fez a chamada, tornando-o perfeito para testar se o IP visto pelo servidor está sendo rotacionado.

Hora de fazer rotação de alguns proxies em Python!

Requisitos

Para replicar os tutoriais de rotação de proxies com Python, você precisa ter o Python 3.7 ou superior instalado em sua máquina.

Pré-requisitos

Suponha que você chame a pasta principal do seu projeto de proxy_rotation/. Ao 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 de proxies do Requests e AIOHTTP, respectivamente.
  • scrapy_rotation/ é uma pasta que contém um projeto Scrapy. Você irá criá-lo e instanciá-lo posteriormente.
  • venv/ contém o ambiente virtual

Você pode criar o diretório do ambiente virtual venv/ assim:

python -m venv venv

Para ativá-lo, no Windows, execute:

venvScriptsactivate

Equivalentemente, no macOS e Linux, execute:

source venv/bin/activate

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

Como Fazer Rotação de Proxies em Python Com Requests

Nesta seção do tutorial, você aprenderá como fazer rotação de 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 fazer rotação de proxies em Python com Requests, escreva o seguinte código no arquivo requests_file.py:

import random
import requests

# Define uma lista de proxies e retorna um aleatório
def get_random_proxy():
    proxies = [
        "http://PROXY_1:PORT_X",
        "http://PROXY_2:PORT_Y",
        "http://PROXY_3:PORT_X",
        # Adicione mais proxies aqui...
    ]

    # Escolhe um proxy aleatoriamente
    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ê obteve e retorna um aleatório com o método random.choice().
  • O loop for itera sobre a lista randomizada de proxies e faz a solicitação real com o método requests.get(). Para mais informações, leia nosso guia sobre como usar um proxy com Python Requests.

Etapa #3: Executar o Script

Para executar o script, rode:

python requests_file.py

Abaixo está a resposta esperada:

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

Maravilha! Os IPs de saída do seu script foram rotacionados conforme desejado.

Como Fazer Rotação de Proxies em Python Com AIOHTTP

A principal limitação da abordagem randomizada usando a biblioteca Requests é que ela usa um proxy de cada vez. Isso significa que você precisa esperar cada solicitação ser 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 fazer rotação dos 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 scraping de dados assíncrono.

A seção a seguir mostra como fazer rotação de 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 fazer rotação de proxies em Python com AIOHTTP, escreva o seguinte código no arquivo async.py:

import asyncio
import aiohttp

# Define uma lista de proxies
proxies_list = [
    "http://PROXY_1:PORT_X",
    "http://PROXY_2:PORT_Y",
    "http://PROXY_3:PORT_X",
    # Adicione mais proxies aqui...
]

async def fetch_ip(session, proxy_address, attempt):
    print(f"Tentativa {attempt} usando proxy: {proxy_address}")
    async with session.get("https://httpbin.io/ip", proxy=proxy_address) as response:
        json_response = await response.json()
        print(f"Resposta de httpbin.io/ip (Tentativa {attempt}):")
        print(f"Endereço IP: {json_response.get('origin', 'Desconhecido')}")
        print("-" * 40)
        return json_response

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = []
        num_attempts = 3
        for i in range(num_attempts):
            # Faz rotação de proxies usando o operador de módulo.
            proxy_address = proxies_list[i % len(proxies_list)]
            tasks.append(fetch_ip(session, proxy_address, i + 1))
        # Executa todas as solicitações simultaneamente
        await asyncio.gather(*tasks)

# Executa o script
asyncio.run(main())

Este código faz o seguinte:

  • A função fetch_ip() gerencia as solicitações recebendo 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():
    • Cria uma sessão com o método aiohttp.ClientSession() para gerenciar conexões HTTP.
    • Configura uma lista de tarefas para enviar várias solicitações simultaneamente e o número de tentativas.
    • Faz rotação dos proxies usando o operador de módulo (i % len(proxies_list)) para garantir que os proxies sejam reutilizados de forma round-robin se o número de solicitações exceder o número de proxies. Descubra mais em nosso tutorial sobre como configurar um proxy no AIOHTTP.
    • Usa o método asyncio.gather() para executar todas as tarefas simultaneamente.

Etapa #3: Executar o Script

Para executar o script, rode:

python async.py

Esta é a resposta esperada:

Tentativa 1 usando proxy: http://PROXY_1:PORT_X
Tentativa 2 usando proxy: http://PROXY_2:PORT_Y
Tentativa 3 usando proxy: http://PROXY_3:PORT_Z

Resposta de httpbin.io/ip (Tentativa 3):
Endereço IP: xxx.xxx.xxx.xxx
----------------------------------------
Resposta de httpbin.io/ip (Tentativa 1):
Endereço IP: yyy.yyy.yyy.yyy
----------------------------------------
Resposta de httpbin.io/ip (Tentativa 2):
Endereço IP: zzz.zzz.zzz.zzz
----------------------------------------

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

Como Fazer Rotação de Proxies Com Python Scrapy

Em um artigo anterior, discutimos a possibilidade de fazer rotação de proxies em Python com Scrapy usando 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 do 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/ com a seguinte estrutura:

scrapy_rotation/
  ├── scrapy_rotation/ 
  │   ├── __init__.py
  │   ├── items.py # Define a estrutura de dados para itens coletados
  │   ├── middlewares.py # Middlewares personalizados
  │   ├── pipelines.py # Gerencia o pós-processamento dos dados coletados
  │   ├── settings.py # Configurações do projeto
  │   └── spiders/ # Pasta para todos os spiders
  └── scrapy.cfg # Arquivo de configuração do Scrapy

Da pasta principal (proxy_rotation/), mova-se para a pasta scrapy_rotation/:

cd scrapy_rotation

Agora você pode criar um novo spider que aponta para o site de destino executando:

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

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

Etapa #3: Definir a Lógica de Rotação

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

# Habilita o middleware de rotação de proxies
DOWNLOADER_MIDDLEWARES = {
    "rotating_proxies.middlewares.RotatingProxyMiddleware": 610,
    "rotating_proxies.middlewares.BanDetectionMiddleware": 620,
}

# Lista de proxies para rotação
ROTATING_PROXY_LIST = [
    "http://PROXY_1:PORT_X",
    "http://PROXY_2:PORT_Y",
    "http://PROXY_3:PORT_Z",
    # Adicione mais proxies conforme necessário
]

# Configura as definições de nova tentativa
RETRY_TIMES = 5  # Número de tentativas para solicitações com falha
RETRY_HTTP_CODES = [500, 502, 503, 504, 408]  # Códigos HTTP para repetir

O que gerencia a rotação de proxies 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 scraper detecte se um IP foi banido ou bloqueado pelo site de destino. Se uma solicitação falhar por esse motivo, o middleware tentará a solicitação novamente com um novo proxy. Portanto, essa opção funciona em conjunto com o RotatingProxyMiddleware para garantir que proxies banidos sejam automaticamente evitados.

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):
        # Extrai e imprime o endereço IP da resposta
        ip = response.json().get("origin")
        self.log(f"Endereço IP: {ip}")

Esta classe instancia todo o spider e imprime a resposta a cada solicitação.

Etapa #4: Executar o Script

Para executar o script, você deve usar o nome da classe IpSpider()—que é ip_spider:

scrapy crawl ip_spider

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

2026-02-18 14:55:17 [rotating_proxies.expire] DEBUG: Proxy <http://PROXY_1:PORT_X> is GOOD
2026-02-18 14:55:17 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.io/robots.txt> (referer: None)
2026-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 Proxies em Python

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

  • Eles exigem que você obtenha e gerencie manualmente uma lista de proxies.
  • Eles envolvem código repetitivo (boilerplate).
  • Ainda podem resultar em banimentos de IP se você não usar servidores proxy de alta qualidade.

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

Outros benefícios importantes dessa abordagem são:

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

Simplifique seu gerenciamento de proxies—descubra nossos proxies com rotação automática!

Conclusão

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

No entanto, essa abordagem apresenta algumas desvantagens:

  • O código é repleto de boilerplate, tornando seu script menos sustentável.
  • Você precisa gerenciar e fornecer acesso a uma grande lista de servidores proxy.

Felizmente, você pode pular todo esse trabalho com os proxies de rotação automática da Bright Data—uma solução mais eficiente para fazer rotação de proxies em Python.

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

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