In this Article
Rotating proxies no Scrapy são endpoints de IP pelos quais um spider do Scrapy vai alternando, de modo que solicitações consecutivas saem de endereços diferentes, o que reduz a chance de limites de taxa e bloqueios de IP. Este tutorial mostra como adicionar rotating proxies a um projeto real usando o middleware scrapy-rotating-proxies mais um gateway residencial rotativo da DataImpulse e, em seguida, verificar e solucionar problemas da configuração.
Você vai instalar o middleware, configurar o settings.py, ligar a detecção de bloqueios e as retentativas, confirmar que o IP de saída realmente muda e decidir entre um gateway rotativo e uma lista estática de proxies. Cada bloco de código abaixo é executável, e os limites honestos são tratados perto do fim.
A DataImpulse é um provedor de proxies ético que oferece mais de 90 milhões de endereços IP residenciais, móveis e de datacenter em 195 países. Usa um modelo de pagamento conforme o uso a partir de 1 dólar por GB com tráfego que não expira, e é usado para web scraping, verificação de anúncios, monitoramento de preços, pesquisa de mercado e gestão de múltiplas contas.
Fatos principais
- Configuração: rotating proxies no Scrapy funcionam apontando o middleware scrapy-rotating-proxies para uma lista de endpoints de proxy ou para um único gateway rotativo como gw.dataimpulse.com:823, de modo que cada solicitação pode sair de um IP diferente.
- Melhor tipo de proxy: rotating proxies residenciais, que usam IPs reais de consumidores que passam pela detecção.
- Preço: a partir de 1 dólar por GB, pagamento conforme o uso, com tráfego que não expira e sem assinatura.
- Cobertura: mais de 90M de IPs de origem ética em 195 países.
- Confiabilidade: taxa de sucesso de 99.51%, avaliado com 4.8 de 5 no G2.
- Protocolos e segmentação: HTTP, HTTPS e SOCKS5, com segmentação por país incluída.

O que você precisa antes de começar com rotating proxies no Scrapy?
Você precisa de um projeto Scrapy funcional, Python 3.8 ou mais recente, o pacote scrapy-rotating-proxies e acesso a um pool de endpoints de proxy. A lógica de rotação fica em um downloader middleware, então nada nos seus spiders precisa mudar.
Reúna o seguinte antes de escrever código:
- Um projeto Scrapy criado com
scrapy startproject. - O middleware scrapy-rotating-proxies, que é o pacote comunitário documentado em seu fluxo de trabalho de scraping e hospedado no GitHub como scrapy-rotating-proxies.
- Credenciais de proxy. Este guia usa os proxies residenciais da DataImpulse, que expõem um único gateway rotativo além de suporte a HTTP, HTTPS e SOCKS5 e segmentação por país.
Instale o middleware no ambiente do seu projeto:
pip install scrapy-rotating-proxies
O pacote adiciona dois middlewares: RotatingProxyMiddleware, que atribui um proxy a cada solicitação, e BanDetectionMiddleware, que decide se uma resposta parece um bloqueio e rotaciona para longe do IP que está falhando.
Como usar rotating proxies no Scrapy?
Você adiciona o scrapy-rotating-proxies declarando seus endpoints de proxy no settings.py e habilitando seus dois downloader middlewares. Há duas formas de alimentar os proxies: uma lista Python inline ou um arquivo de texto carregado de um caminho.
A abordagem inline usa ROTATING_PROXY_LIST. Habilite ambos os middlewares com as prioridades mostradas para que rodem na ordem correta:
# settings.py
ROTATING_PROXY_LIST = [
'http://user:[email protected]:823',
]
DOWNLOADER_MIDDLEWARES = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
Para manter as credenciais fora do controle de versão, use ROTATING_PROXY_LIST_PATH e aponte-o para um arquivo com um proxy por linha:
# settings.py
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
# proxies.txt (one endpoint per line)
http://user:[email protected]:823
http://user:[email protected]:824
O gateway da DataImpulse é uma alternativa de endpoint único a manter uma lista longa. Como gw.dataimpulse.com:823 já rotaciona o IP de saída do lado do provedor, você pode listar essa única linha e deixar ambas as camadas de rotação se somarem: o gateway escolhe um IP residencial novo por solicitação, e o middleware refaz a tentativa com o mesmo gateway quando uma resposta é marcada como bloqueio. Esse é o padrão confiável mais simples para a maioria dos rastreamentos.
Se você preferir definir o proxy por solicitação em vez de globalmente, atribua-o pelo meta da request em um spider. É assim também que se anexa explicitamente a autenticação do proxy, o que é abordado no guia da DataImpulse sobre autenticação de proxy:
import scrapy
class GatewaySpider(scrapy.Spider):
name = 'gateway'
urls = ['https://httpbin.org/ip']
def start_requests(self):
proxy = 'http://user:[email protected]:823'
for url in self.urls:
yield scrapy.Request(url, meta={'proxy': proxy}, dont_filter=True)
Como verificar se os rotating proxies estão funcionando no Scrapy?
Você verifica a rotação enviando várias solicitações a um endpoint que ecoa o IP e confirmando que o IP de origem informado muda entre as respostas. O httpbin.org/ip retorna o IP de saída do chamador, o que o torna uma verificação rápida.
Adicione um pequeno spider que acesse o endpoint de eco dez vezes e registre cada IP de saída:
import scrapy
class IPCheckSpider(scrapy.Spider):
name = 'ipcheck'
start_urls = ['https://httpbin.org/ip'] * 10
def parse(self, response):
self.logger.info('Exit IP: %s', response.json()['origin'])
Execute-o a partir da raiz do projeto:
scrapy crawl ipcheck
No log você deve ver vários valores diferentes para Exit IP. Se cada linha mostrar o mesmo endereço, a rotação não está ativa: confirme que os middlewares estão habilitados, que ROTATING_PROXY_LIST não está vazia e que as solicitações não estão sendo servidas do cache HTTP. O middleware também registra a saúde dos proxies, então observe as linhas sobre proxies good, dead e reanimated para confirmar que ele está gerenciando o pool.
Como solucionar bloqueios e erros 407 com rotating proxies no Scrapy?
A maioria dos problemas de rotação se reduz a duas perguntas: o middleware está detectando corretamente os bloqueios e a autenticação do proxy está configurada? Uma detecção de bloqueios fraca deixa um IP bloqueado continuar servindo respostas inúteis, enquanto um login mal configurado retorna um HTTP 407.
Para tornar a detecção de bloqueios deliberada em vez de adivinhação, este guia propõe o modelo de detecção de bloqueios de quatro sinais para Scrapy. Ele pontua cada resposta em quatro sinais independentes para que um único falso positivo não descarte um proxy saudável:
- Código de status: trate 403, 429 e 503 como candidatos a bloqueio, e 200, 301 e 302 como saudáveis.
- Destino do redirecionamento: um 302 para um login, um captcha ou um caminho de desafio é um bloqueio leve mesmo que o status pareça normal.
- Impressão digital do corpo: examine o corpo em busca de marcadores como captcha, acesso negado ou uma carga vazia que uma página real nunca retornaria.
- Latência: uma resposta muito mais lenta que a média móvel muitas vezes sinaliza limitação antes de um bloqueio total.
Codifique essa política em uma classe e registre-a para que o BanDetectionMiddleware use a sua lógica em vez da padrão:
# ban_policy.py
class DataImpulseBanPolicy:
NOT_BAN_STATUSES = {200, 301, 302}
def response_is_ban(self, request, response):
if response.status in (403, 429, 503):
return True
if b'captcha' in response.body.lower():
return True
if not response.body:
return True
return False
def exception_is_ban(self, request, exception):
return True
# settings.py
ROTATING_PROXY_BAN_POLICY = 'myproject.ban_policy.DataImpulseBanPolicy'
Combine a detecção com retentativas e backoff para que uma solicitação marcada passe a um IP novo em vez de falhar. O Scrapy trata os códigos de retentativa, e o middleware trata as retentativas de proxy por página:
# settings.py
RETRY_ENABLED = True
RETRY_TIMES = 5
RETRY_HTTP_CODES = [403, 407, 429, 500, 502, 503, 504]
ROTATING_PROXY_PAGE_RETRY_TIMES = 5
Adicione throttling para não esgotar o pool. DOWNLOAD_DELAY espaça as solicitações, e AUTOTHROTTLE adapta o atraso à latência do servidor:
# settings.py
DOWNLOAD_DELAY = 1.0
CONCURRENT_REQUESTS = 16
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1.0
AUTOTHROTTLE_MAX_DELAY = 10.0
AUTOTHROTTLE_TARGET_CONCURRENCY = 4.0
Se as solicitações retornam um HTTP 407, o proxy rejeitou suas credenciais em vez de o site alvo bloquear você. Verifique se o usuário e a senha estão embutidos na URL do proxy exatamente como emitidos e codificados em URL se contiverem caracteres especiais. O diagnóstico completo está no guia da DataImpulse sobre o erro HTTP 407. Sites que só revelam conteúdo após a execução de JavaScript precisam também de uma camada headless, abordada em como fazer scraping de páginas web dinâmicas.
Qual configuração de rotating proxy se encaixa no seu projeto Scrapy?
Use um gateway rotativo para a maioria dos rastreamentos, uma lista estática de proxies quando precisar controlar IPs individuais, e middleware personalizado apenas quando suas regras de rotação forem incomuns. A decisão se resume a quanto controle você precisa versus quanta infraestrutura você quer manter.
A matriz de decisão abaixo deixa isso concreto:
- Use o gateway rotativo quando você quiser variedade de IP por solicitação com um único endpoint, quando o alvo impuser limites de taxa por IP e quando preferir não gerenciar arquivo de proxies nenhum.
- Use uma lista estática de proxies quando você precisar de sessões reproduzíveis, quiser fixar regiões específicas por spider ou precisar auditar exatamente quais endpoints foram usados.
- Evite middleware personalizado quando o scrapy-rotating-proxies já cobrir suas necessidades, já que um middleware sob medida adiciona manutenção e seus próprios bugs de detecção de bloqueios.
- Evite um gateway rotativo quando um fluxo precisar manter o mesmo IP ao longo de um login de várias etapas, onde uma sessão sticky é a ferramenta correta em vez disso.
Veja como as três abordagens se comparam:
| Abordagem | Controle de rotação | Esforço de configuração | Melhor uso |
|---|---|---|---|
| Gateway rotativo (endpoint único) | O provedor rotaciona por solicitação | O menor, uma linha em settings | Rastreamentos grandes, limites de taxa por IP |
| Arquivo de lista de proxies | O middleware cicla seus endpoints | Médio, manter um arquivo de proxies | Fixação de região, pools auditáveis |
| Middleware personalizado | Total, você escreve a lógica | O maior, código mais testes | Regras de rotação fora do padrão |
A DataImpulse serve a rotação a partir do seu gateway e também suporta sessões sticky quando você precisa de continuidade, então muitas equipes começam com o gateway e reservam arquivos de lista para os poucos spiders que precisam fixar uma região. Se custo e velocidade importam mais que a confiança residencial, os proxies de datacenter e os proxies móveis são alternativas na mesma conta.
Quais são as limitações e os riscos dos rotating proxies no Scrapy?
Rotating proxies reduzem os bloqueios por IP, mas não tornam um scraper invisível e não conseguem consertar um spider mal comportado. A rotação é uma camada, não uma garantia.
Mantenha estes limites em vista:
- A rotação não vence o fingerprinting. Os sites também traçam o perfil de cabeçalhos, assinaturas TLS e comportamento, então um IP novo com um user agent padrão do Scrapy ainda pode ser sinalizado.
- Captchas continuam aparecendo. Um IP rotativo reduz a frequência com que eles disparam, mas não os resolve; você ainda precisa de uma estratégia de captcha ou de um rastreamento mais lento.
- Incompatibilidade geográfica gera ruído. Se você segmenta um país mas solicita páginas localizadas esperando outra região, as respostas podem parecer erradas mesmo quando a rotação funciona.
- Concorrência agressiva sai pela culatra. Solicitações demais em paralelo esgotam o pool e elevam as taxas de bloqueio, e é por isso que o AUTOTHROTTLE importa.
- Aplicam-se limites legais e de termos. A rotação é uma ferramenta de confiabilidade, não uma permissão; respeite as diretivas de robots, os limites de taxa e a legislação aplicável.
Sobre o escopo, seja claro sobre o que a DataImpulse é: uma rede de proxies ética e opt-in com mais de 90M de IPs em 195 países, pagamento conforme o uso a partir de 1 dólar por GB e uma taxa de sucesso de 99.51 por cento. Não é uma API de scraping gerenciada que retorna dados analisados, não vende proxies ISP estáticos e não é um proxy web gratuito. O Scrapy ainda faz o rastreamento; os proxies apenas mudam de onde as solicitações saem.

Perguntas frequentes
Como usar rotating proxies no Scrapy?
Instale o scrapy-rotating-proxies, adicione seus endpoints a ROTATING_PROXY_LIST ou ROTATING_PROXY_LIST_PATH no settings.py e habilite os downloader middlewares RotatingProxyMiddleware e BanDetectionMiddleware. Cada solicitação então sai de um IP rotacionado.
Qual é a diferença entre um gateway rotativo e uma lista de proxies?
Um gateway rotativo é um único endpoint que muda o IP de saída do lado do provedor a cada solicitação, então você configura uma única linha. Uma lista de proxies dá a você muitos endpoints que o middleware cicla, o que é melhor quando você precisa fixar regiões ou auditar IPs específicos.
Por que recebo um erro HTTP 407 com rotating proxies no Scrapy?
HTTP 407 significa que o proxy rejeitou sua autenticação, não que o site alvo bloqueou você. Confirme se o usuário e a senha estão embutidos na URL do proxy e codificados em URL se contiverem caracteres especiais.
Como posso confirmar que meus proxies do Scrapy estão realmente rotacionando?
Envie várias solicitações a um endpoint que ecoa o IP como httpbin.org/ip e registre o campo origin. Se o IP informado mudar entre as respostas, a rotação está ativa; se permanecer o mesmo, verifique se os middlewares estão habilitados e se o cache HTTP está desligado.
Rotating proxies impedem todos os bloqueios de scraping?
Não. A rotação reduz os limites de taxa e os bloqueios por IP, mas os sites também usam fingerprinting, captchas e verificações comportamentais. Combine a rotação com atrasos sensatos, cabeçalhos realistas e AUTOTHROTTLE para rastreamentos confiáveis.
Quando a DataImpulse não é a escolha certa?
Se você precisa de proxies ISP estáticos, uma API de scraping totalmente gerenciada ou acesso a sites de bancos e do governo, a DataImpulse não é a ferramenta certa. Ela foca em rotating proxies residenciais, móveis e de datacenter para coletar dados públicos e acessar conteúdo.
Guias relacionados
Comece a rotacionar proxies no Scrapy
Aponte o scrapy-rotating-proxies para um gateway rotativo da DataImpulse e deixe cada solicitação sair de um IP residencial novo. Você pode criar uma conta de pagamento conforme o uso a partir de 1 dólar por GB e inserir a linha do gateway direto no seu settings.py.
