Como configurar e rotacionar proxies no Python Scrapy
Atualizado:
O motor assíncrono Twisted do Scrapy possui o middleware nativo HttpProxyMiddleware (executado na prioridade 750), responsável por interpretar URLs no formato http://user:pass@ip:port atribuídas a request.meta['proxy']. Criando um Downloader Middleware personalizado de apenas 10 linhas na prioridade 740, suas spiders podem alternar automaticamente entre um pool de IPs estáticos com tráfego ilimitado da VinaProxy.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP₫ 40.000
- 5+ IPs₫ 35.000
- 10+ IPs₫ 25.000
- 20+ IPs₫ 25.000
- 50+ IPs₫ 25.000
- 100+ IPs₫ 25.000
- 200+ IPs₫ 25.000
- 500+ IPs₫ 25.000
- 1000+ IPs₫ 22.000
- 2000+ IPs₫ 20.000
- 1 IP₫ 40.000
- 5+ IPs₫ 35.000
- 10+ IPs₫ 25.000
- 20+ IPs₫ 25.000
- 50+ IPs₫ 25.000
- 100+ IPs₫ 25.000
- 200+ IPs₫ 25.000
- 500+ IPs₫ 25.000
- 1000+ IPs₫ 22.000
- 2000+ IPs₫ 20.000
Ordem dos middlewares de proxy no Scrapy e configurações de concorrência
Como o HttpProxyMiddleware padrão opera na prioridade 750 para extrair user:pass da URL e gerar o cabeçalho Proxy-Authorization, qualquer middleware customizado que defina request.meta['proxy'] deve possuir um número de prioridade menor (por exemplo, 740):
| Configuração do Scrapy | Valor Recomendado | Objetivo e Função Técnica |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Direciona a requisição através do proxy VinaProxy especificado |
| Prioridade do Middleware | 740 (antes de 750) | Assegura que o HttpProxyMiddleware processe as credenciais e gere os headers |
CONCURRENT_REQUESTS_PER_IP | 2 a 4 | Limita conexões simultâneas por IP proxy, prevenindo respostas HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Ajusta dinamicamente a latência entre requisições com base na resposta do servidor |
Melhores práticas para raspagem massiva com Scrapy
- Carregue sua lista de proxies VinaProxy no método
from_crawler()e definarequest.meta['proxy'] = random.choice(self.proxies)dentro deprocess_request() - Habilite
RANDOMIZE_DOWNLOAD_DELAY = Truejuntamente comDOWNLOAD_DELAY = 1.0para que os intervalos entre requisições não exibam padrões previsíveis - Em caso de reenvio por status de sobrecarga (
429ou503), selecione um proxy diferente do seu pool antes de reenfileirar a requisição
Passo a passo
- 1
Formate sua lista de proxies como http://user:pass@ip:port
Cole sua lista da VinaProxy em nosso Conversor de Formato de Proxy para gerar as URLs prontas.
- 2
Crie o ProxyPoolMiddleware no arquivo middlewares.py
Implemente
process_request(self, request, spider)configurandorequest.meta['proxy'] = random.choice(self.proxies). - 3
Registre com prioridade 740 no arquivo settings.py
Adicione
'myproject.middlewares.ProxyPoolMiddleware': 740sobDOWNLOADER_MIDDLEWARESe determineCONCURRENT_REQUESTS_PER_IP = 2. - 4
Realize o teste com scrapy shell ou scrapy crawl
Envie uma requisição para
https://vinaproxy.com/api/my-ippara validar a autenticação e a rotação correta dos IPs.
Perguntas frequentes
Por que o middleware de proxy personalizado no Scrapy falha quando configurado com prioridade 800?
O HttpProxyMiddleware nativo do Scrapy roda com prioridade 750. Se o seu middleware executar em 800 (após o 750), as credenciais na URL não serão transformadas no cabeçalho Proxy-Authorization. Configure sempre seu middleware com valor abaixo de 750 (como 740).
O Scrapy preserva conexões persistentes abertas com cada proxy?
Sim. O pool de conexões do Twisted sustenta conexões TCP keep-alive persistentes com cada proxy, otimizando o tempo de resposta.
Os proxies da VinaProxy contam com tráfego ilimitado para spiders de grande porte no Scrapy?
Sim. Todos os planos de IPv4 dedicado e ISP estático da VinaProxy oferecem franquia mensal de dados ilimitada.
Escale suas spiders Scrapy com pools de IPs estáticos ilimitados
Planos em atacado de IPv4 Dedicado e ISP Estático em 7 países com ativação imediata.
Comprar Proxies para Scrapy