Cómo configurar y rotar proxies en Python Scrapy
Actualizado:
El motor asíncrono Twisted de Scrapy incluye el componente integrado HttpProxyMiddleware (con prioridad 750), que procesa de forma nativa cadenas con formato http://user:pass@ip:port asignadas a request.meta['proxy']. Escribiendo un Downloader Middleware personalizado de apenas 10 líneas con prioridad 740, tus spiders rotarán automáticamente a través de un pool de IPs estáticas sin límite de tráfico de VinaProxy.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40.000 ₫
- 5+ IPs35.000 ₫
- 10+ IPs25.000 ₫
- 20+ IPs25.000 ₫
- 50+ IPs25.000 ₫
- 100+ IPs25.000 ₫
- 200+ IPs25.000 ₫
- 500+ IPs25.000 ₫
- 1000+ IPs22.000 ₫
- 2000+ IPs20.000 ₫
- 1 IP40.000 ₫
- 5+ IPs35.000 ₫
- 10+ IPs25.000 ₫
- 20+ IPs25.000 ₫
- 50+ IPs25.000 ₫
- 100+ IPs25.000 ₫
- 200+ IPs25.000 ₫
- 500+ IPs25.000 ₫
- 1000+ IPs22.000 ₫
- 2000+ IPs20.000 ₫
Orden del middleware de proxy en Scrapy y parámetros de concurrencia
Debido a que HttpProxyMiddleware se ejecuta con prioridad 750 para extraer user:pass de la URL del proxy y codificar el encabezado Proxy-Authorization, cualquier middleware personalizado que configure request.meta['proxy'] debe ejecutarse con un número menor (por ejemplo, 740):
| Ajuste de Scrapy | Valor recomendado | Propósito y función técnica |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Enruta la petición web a través del nodo proxy VinaProxy seleccionado |
| Prioridad del Middleware | 740 (antes de 750) | Garantiza que HttpProxyMiddleware codifique el encabezado de autenticación |
CONCURRENT_REQUESTS_PER_IP | 2 a 4 | Limita sockets simultáneos por IP proxy para evitar bloqueos HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Ajusta dinámicamente el retardo de rastreo según la latencia de respuesta del destino |
Buenas prácticas para rastreos masivos con Scrapy
- Carga tu lista de proxies VinaProxy en el método
from_crawler()y asignarequest.meta['proxy'] = random.choice(self.proxies)dentro deprocess_request() - Activa
RANDOMIZE_DOWNLOAD_DELAY = Truejunto conDOWNLOAD_DELAY = 1.0para que los intervalos de petición de cada IP no parezcan patrones automatizados - En caso de reintento (
429o503), selecciona un proxy diferente de tu pool antes de volver a encolar la solicitud
Paso a paso
- 1
Formatea tu pool de proxies como http://user:pass@ip:port
Pega tu lista de VinaProxy en nuestro Conversor de formato de proxy para generar las URLs requeridas.
- 2
Crea la clase ProxyPoolMiddleware en middlewares.py
Define
process_request(self, request, spider)asignandorequest.meta['proxy'] = random.choice(self.proxies). - 3
Registra el middleware con prioridad 740 en settings.py
Añade
'myproject.middlewares.ProxyPoolMiddleware': 740enDOWNLOADER_MIDDLEWARESy fijaCONCURRENT_REQUESTS_PER_IP = 2. - 4
Prueba con scrapy shell o scrapy crawl
Lanza una petición de prueba contra
https://vinaproxy.com/api/my-ippara verificar la rotación y la autenticación del proxy.
Preguntas frecuentes
¿Por qué falló mi middleware personalizado de proxy al asignarle la prioridad 800?
El middleware nativo HttpProxyMiddleware de Scrapy opera con prioridad 750. Si tu componente corre en 800 (después de 750), las credenciales de la URL no se transforman en el encabezado Proxy-Authorization. Configura siempre una prioridad menor a 750 (como 740).
¿Scrapy mantiene conexiones persistentes abiertas hacia cada proxy?
Sí. El pool de conexiones de Twisted mantiene conexiones TCP keep-alive persistentes por cada endpoint de proxy, minimizando tiempos de conexión.
¿Los proxies de VinaProxy tienen límite de tráfico en tareas de Scrapy de millones de páginas?
No. Todos los planes de IPv4 dedicada e ISP estático de VinaProxy disponen de ancho de banda mensual ilimitado.
Escala tus spiders de Scrapy con pools de IPs estáticas ilimitadas
Proxies Dedicated IPv4 y Static ISP por volumen en 7 países con aprovisionamiento instantáneo.
Comprar proxies para Scrapy