ProxySEO / Blog / Proxies en Scrapy: middlewares personalizados paso a paso
Proxies

Proxies en Scrapy: middlewares personalizados paso a paso

· 8 min de lectura
proxies en Scrapy

Un scraper sin proxies es una cuenta atrás. Funciona, sí, pero sabes que tarde o temprano llegará el 403, el captcha, el baneo. He visto proyectos enteros de extracción morir en cuestión de minutos por este detalle. Aquí vamos a ver, paso a paso, cómo montar un middleware personalizado para rotar proxies dedicados como los de ProxySEO (HTTP/s y SOCKSv5, IPs españolas y tráfico ilimitado), y de paso cómo integrarlo con agentes IA mediante soporte MCP, algo que cada vez aparece más en flujos de scraping serios.

¿Por qué necesitas proxies en Scrapy para scraping sin bloqueos?

Scrapy, por defecto, lanza todas las peticiones desde una sola IP. Una. Y cualquier sitio con medidas anti-bot mínimamente serias detecta el patrón en segundos:

  • Volumen anómalo: cientos de peticiones por minuto desde la misma IP.
  • Huella repetitiva: mismos headers, misma frecuencia. Cero variación.
  • Geolocalización sospechosa: tu servidor está en Alemania y scrapeas una web española con restricciones regionales. Bloqueo inmediato, sin sorpresas.

Las consecuencias van desde códigos 429 y 403, pasando por captchas, hasta el baneo permanente de tu IP. Con proxies dedicados —no compartidos— cada petición, o cada grupo de peticiones, sale desde IPs limpias y estables. Y un proxy dedicado español, como los que ofrece ProxySEO, te deja simular tráfico local. Para SEO local y monitorización de SERPs en Google.es, eso no es un lujo. Es imprescindible.

Tip: para tareas de scraping sensibles, usa proxies dedicados antes que rotativos compartidos. Las IPs compartidas suelen venir ya «quemadas» por otros usuarios.

Cómo funciona el middleware de proxies en Scrapy: arquitectura y flujo

Scrapy procesa cada petición a través de una cadena de middlewares (downloader middlewares), componentes que interceptan el tráfico entre el motor y el downloader. El middleware de proxies se sitúa justo antes del envío de la petición HTTP y modifica su metadato proxy. Así de simple.

El flujo, resumido:

  1. El motor genera una Request y la pasa a la cadena de middlewares.
  2. Tu middleware implementa el método process_request() y asigna request.meta['proxy'] con la URL del proxy elegido.
  3. Scrapy envía la petición a través de ese proxy.
  4. ¿Falla el proxy? El método process_exception() puede reintentar la petición con otro de la lista.

Lo elegante de esta arquitectura es que desacopla la lógica de rotación del código de tus arañas. Las spiders no saben nada de proxies; pueden seguir en su mundo. Y tú puedes cambiar la estrategia (rotación por petición, sticky sessions, failsafe) tocando un solo archivo. Funciona igual para HTTP/s que para SOCKSv5: solo cambia el esquema en la URL del proxy.

Proxies en Scrapy: crear un middleware personalizado paso a paso (código completo)

Construyamos uno con rotación aleatoria y reintento automático en caso de fallo. Lo primero: crea el archivo middlewares.py dentro de tu proyecto.

Paso 1: define la clase con tu lista de proxies de ProxySEO:

  1. Guarda tus proxies con credenciales: http://usuario:contraseña@ip:puerto.
  2. Carga la lista en el constructor desde las settings o desde un archivo.
  3. En process_request(), elige un proxy aleatorio con random.choice() y asígnalo a request.meta['proxy'].

Paso 2: gestiona los errores. Implementa process_exception() para capturar timeouts o conexiones rechazadas: registra el proxy fallido, marca la petición para reintento y devuelve una nueva Request con otro proxy. Con esto, tu scraper se convierte en un sistema resiliente que no se detiene porque un nodo esté caído.

Paso 3: registra el middleware en settings.py añadiéndolo a DOWNLOADER_MIDDLEWARES con una prioridad entre 100 y 900 (750, por ejemplo). Y aquí un aviso: según tu versión de Scrapy, quizá tengas que desactivar HttpProxyMiddleware, porque ambos pueden pisarse al escribir en request.meta[‘proxy’]. Es un conflicto tonto, pero da quebraderos de cabeza.

Con estos tres pasos ya tienes algo funcional. En la siguiente parte del artículo desglosamos el código completo línea a línea, y le añadimos rotación inteligente y sticky sessions.

Rotación de IPs y proxies dedicados españoles: configuración avanzada

Tu middleware básico ya funciona. Bien. Ahora toca lo interesante: gestionar un pool de proxies con algo de criterio. La rotación aleatoria simple aguanta proyectos pequeños, sí, pero en cuanto el sitio objetivo empieza a bloquear IPs a diestro y siniestro, te quedas corto. Un patrón que funciona muy bien es mantener una lista de proxies con su estado:

En el middleware, define una estructura tipo diccionario donde cada proxy lleve atributos como failures (errores consecutivos), last_used (timestamp) y status (activo, enfriamiento, descartado). En el método process_request, elige siempre el proxy activo con menos usos recientes. Y si una petición te devuelve un 403, un 429 o un 404 sospechoso, incrementa su contador de fallos y mándalo a «enfriamiento» durante 5-10 minutos. Sin drama.

Otro concepto clave son las sticky sessions. Muchos flujos de scraping (paginación, logins, carritos) exigen que todas las peticiones de un mismo proceso vengan de la misma IP; si rotas a mitad de sesión, el sitio lo huele enseguida. Puedes implementarlo guardando el proxy asignado en request.meta[‘proxy_session’] y reutilizándolo en las peticiones hijas, detectándolas mediante request.meta.get(‘depth’, 0) > 0 o mediante una cookie de sesión concreta.

Aquí los proxies dedicados marcan la diferencia frente a los compartidos. Con ProxySEO tienes IPs españolas exclusivas, sin rotación forzada ni usuarios compartiendo reputación, lo que te deja implementar tus propias políticas de rotación con control total. Al ser proxies HTTP/s y SOCKSv5 con tráfico ilimitado, además, no tienes que racionar peticiones por límites de ancho de banda. Un detalle que me parece muy interesante: el soporte MCP de ProxySEO permite que agentes IA consulten el estado del pool o cambien configuraciones de forma programática. Útil si orquestas Scrapy junto a pipelines automatizados.

Buenas prácticas: timeouts, reintentos y testing de tu middleware

Configura timeouts agresivos y coherentes

Un proxy muerto no debe bloquear tu spider. Nunca. Fija DOWNLOAD_TIMEOUT = 15 en tu settings (o menos si tu caso lo permite) y añade en el middleware una validación previa: antes de asignar un proxy, comprueba que su última verificación de latencia no supere X minutos. Puedes lanzar una tarea periódica con un spider auxiliar que haga ping a https://httpbin.org/ip a través de cada proxy.

Intégrate con el sistema de reintentos de Scrapy

En el método process_response, detecta respuestas problemáticas y devuelve un objeto FetchRequest (o simplemente lanza IgnoreRequest y deja que RetryMiddleware actúe) marcando el request para usar otro proxy. Lo importante: no reintentar siempre con el mismo proxy fallido. Es un error clásico, y provoca bloqueos en cascada:

  • Si la respuesta es un CAPTCHA o error 429, rota de IP inmediatamente y sube el delay.
  • Si hay timeout de conexión, descarta el proxy temporalmente.
  • Y si el fallo persiste en más de 3 proxies distintos, revisa si el bloqueo es por fingerprint, no por IP.

Prueba tu middleware como código normal

Escribe tests unitarios con pytest y scrapy.http.Request/Response simulados. Verifica que request.meta[‘proxy’] se asigna, que la rotación respeta los proxies «enfriados» y que las sticky sessions persisten. Para pruebas de integración, levanta un endpoint real y lanza 50-100 peticiones comprobando que las IPs distribuyen correctamente.

Conclusión: empieza a escalar tu scraping con proxies dedicados

Configurar proxies en Scrapy con un middleware personalizado es de las mejores inversiones técnicas que puedes hacer. Te da control total sobre la rotación, las sticky sessions y la gestión de errores, cosas que ningún middleware genérico te va a ofrecer por defecto. Como hemos visto a lo largo del artículo, el proceso se resume en crear el middleware, registrarlo en DOWNLOADER_MIDDLEWARES con la prioridad adecuada y añadir encima lógica de rotación, health checks y reintentos inteligentes.

Pero el componente decisivo no es el código. Es la calidad de las IPs. Con proxies compartidos, por bien diseñado que esté tu middleware, estarás siempre a merced de la reputación de otros usuarios. Los proxies dedicados con IP española de ProxySEO te garantizan exclusividad, anonimato y tráfico ilimitado, con soporte tanto HTTP/s como SOCKSv5 y compatibilidad con agentes IA vía MCP. Para proyectos de scraping serios en el mercado español, es la combinación que yo elegiría.

Empieza pequeño. Implementa el middleware básico, valida con un pool de 3-5 proxies y escala a medida que crezcan tus necesidades. Tu infraestructura de scraping, tu reputación de IP y tus resultados de SEO te lo agradecerán.

Proxies profesionales con IP española

HTTP/s + SOCKSv5. Anónimos, dedicados y con tráfico ilimitado.

Ver Planes