Geonode logo
Carl Gamutan

Carl Gamutan

Actualizado: 7 de octubre de 2026

Publicado: 2 de octubre de 2026

Cómo utilizar proxies con Scrapy

Scrapy es un marco de trabajo de Python para el rastreo y la extracción de datos a gran escala. A continuación te explicamos cómo conectarle un proxy, configurar la rotación o una sesión persistente y solucionar los errores que puedan surgir.

Por qué Scrapy necesita un proxy

Los proxies para Scrapy permiten que la herramienta se conecte a través de una dirección IP diferente, en lugar de utilizar siempre la IP del equipo en el que se ejecuta. Esto resulta útil para tareas basadas en la ubicación, pruebas, supervisión y otras tareas en las que la fuente de la conexión es importante.

Scrapy sigue encargándose de la tarea principal. El proxy se encarga de gestionar el origen de la conexión.

Qué ocurre sin él: bloqueos de IP, límites de frecuencia y restricciones geográficas

Sin un proxy, los sitios web siguen viendo la misma dirección IP. A medida que aumenta la actividad, esa IP puede alcanzar un límite de frecuencia o acabar bloqueada.

La ubicación también puede ser importante. Es posible que una página abierta desde Alemania no muestre el mismo contenido que otra abierta desde EE. UU.

Un proxy para Scrapy permite conectarse desde diferentes direcciones IP y ubicaciones cuando sea necesario.

Qué tipo de proxy utilizar con Scrapy

El tipo de proxy adecuado depende de la tarea.

Tipo de proxyExtracción de datosGestión de cuentasPruebasSupervisión
ResidencialIdeal cuando la ubicación y la fuente de la IP son importantesÚtil cuando las cuentas necesitan IP residencialesIdeal para pruebas basadas en la ubicaciónÚtil para comprobar contenidos desde diferentes ubicaciones
ISPIdeal cuando se necesita una IP estableÚtil para sesiones más largas con una misma IPIdeal para pruebas con una IP constanteÚtil para comprobaciones continuas desde la misma IP
Centro de datosIdeal para velocidad y grandes volúmenes de solicitudesMejor cuando no se requieren IP residencialesIdeal para pruebas generalesIdeal para comprobaciones automatizadas frecuentes

Los proxies residenciales son útiles cuando la dirección IP de origen y la ubicación son importantes. Los proxies de ISP funcionan bien cuando es necesario que la misma dirección IP permanezca activa durante más tiempo. Los proxies de centro de datos son la opción más adecuada cuando lo principal es la velocidad y la escala.

La mejor opción también depende de si la tarea requiere segmentación geográfica, una conexión estable o acceso a un conjunto más amplio de direcciones IP.

Cómo configurar un proxy en Scrapy

La configuración del proxy en Scrapy requiere el host Geonode, el puerto, el nombre de usuario y la contraseña. Guarda las credenciales en variables de entorno y, a continuación, cárgalas al configurar el proxy en el código.

¿Utilizas Geonode? Obtén el nombre de usuario y la contraseña en Credenciales de acceso y el servidor, el puerto y el protocolo en Información del servidor proxy.

Ruta de configuración o código

Para nuestra prueba, hemos añadido un middleware de descarga:

DOWNLOADER_MIDDLEWARES = {
    "geonode_scrapy.middlewares.GeonodeProxyMiddleware": 350,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}

El middleware pasa la URL del proxy a través de request.meta["proxy"]

, que luego utiliza el HttpProxyMiddleware

de Scrapy:

request.meta["proxy"] = proxy_url

También puedes pasar el proxy directamente a una solicitud concreta:

yield scrapy.Request(
    url,
    meta={"proxy": proxy_url},
)

Mantén el nombre de usuario y la contraseña reales en variables de entorno en lugar de incluirlos directamente en el archivo Python. Esta configuración devolvió correctamente un código de estado HTTP 200 a través del proxy durante nuestra prueba.

El formato de autenticación «host:port:user:pass»

Geonode

te proporciona cuatro valores:

proxy.geonode.io:PORT:USERNAME:PASSWORD

Scrapy necesita los mismos datos que una URL de proxy:

http://USERNAME:PASSWORD@proxy.geonode.io:PORT

Guarda las credenciales o el valor completo del proxy en una variable de entorno:

GEONODE_PROXY_URL=http://USERNAME:PASSWORD@proxy.geonode.io:PORT

A continuación, cárgalo en Python:

import os

proxy_url = os.environ["GEONODE_PROXY_URL"]

Para nuestra prueba HTTP, el formato resultante fue:

http://USERNAME:PASSWORD@proxy.geonode.io:9000

Para comprobar la autenticación, también ejecutamos la solicitud con credenciales incorrectas. Scrapy recibió un código de estado HTTP 407 con la respuesta:

Authentication error. Please check your authentication settings.

Scrapy mostró la respuesta a través de HttpErrorMiddleware

como HttpError('Ignoring non-200 response')

.

Rotación frente a sesión fija en Scrapy

Si las solicitudes no necesitan mantener la misma IP, utiliza la rotación.

Para nuestra prueba, pasamos a Scrapy el proxy rotativo Geonode

:

proxy_url = "http://USERNAME:PASSWORD@proxy.geonode.io:9000"

yield scrapy.Request(
    url,
    meta={"proxy": proxy_url},
)

Realizamos cinco solicitudes consecutivas:

Request 1: 101.98.231.191
Request 2: 101.98.231.191
Request 3: 101.98.231.191
Request 4: 122.164.83.189
Request 5: 122.164.83.189

Unique IPs: 2
Rotation: Yes

La prueba confirma que se produjo la rotación, pero la IP no cambió en todas las solicitudes.

Si las solicitudes relacionadas deben mantenerse en la misma dirección IP, utiliza en su lugar una sesión fija:

proxy_url = (
    "http://USERNAME-session-blogtest01-lifetime-10:"
    "PASSWORD@proxy.geonode.io:10000"
)

Realizamos tres solicitudes utilizando la misma sesión:

Request 1: 177.73.202.78
Request 2: 177.73.202.78
Request 3: 177.73.202.78

Same IP: Yes

En nuestra prueba, las tres solicitudes utilizaron la misma dirección IP.

Consulta las guías de Geonode

sobre proxies rotativos y sesiones fijas para conocer la configuración disponible.

Errores comunes con los proxies en Scrapy y cómo solucionarlos

Si el proxy no funciona, empieza por comprobar los datos de conexión. Comprueba el nombre de usuario y la contraseña, y después el servidor, el puerto y el protocolo. El error que muestra Scrapy suele ayudar a identificar el problema.

407 Se requiere autenticación del proxy

Un código 407 suele indicar un problema de autenticación.

Cuando probamos Scrapy con credenciales incorrectas, el proxy devolvió: «

HTTP status: 407
Authentication error. Please check your authentication settings.

». Comprueba primero el nombre de usuario y la contraseña. Si son correctos, asegúrate de que Scrapy reciba la URL completa del proxy con el esquema, las credenciales, el host y el puerto.

ERR_TUNNEL_CONNECTION_FAILED / conexión rechazada

Un error de conexión suele significar que Scrapy no ha podido conectarse al proxy.

Comprueba primero el host y el puerto. A continuación, asegúrate de que el protocolo coincide con el del servidor proxy que se está utilizando.

Scrapy no devuelve necesariamente el código de estado ERR_TUNNEL_CONNECTION_FAILED, propio de los navegadores. En nuestra prueba de conexión fallida, Scrapy volvió a intentar la solicitud y, finalmente, devolvió DownloadFailedError, que contenía un error de Twisted ConnectionLost.

Tiempos de espera y respuestas vacías

Un tiempo de espera significa que la solicitud no recibió respuesta en el plazo configurado.

En primer lugar, comprueba si la URL de destino funciona y si el proxy puede conectarse. Si ambos funcionan, comprueba la configuración del tiempo de espera en Scrapy.

Para nuestra prueba de fallo de conexión, utilizamos un puerto de proxy no válido con DOWNLOAD_TIMEOUT=5

. Tras los reintentos, Scrapy devolvió:

DownloadFailedError(
  ConnectionLost:
  Connection to the other side was lost in a non-clean fashion.
)

. Por lo tanto, una conexión de proxy fallida puede aparecer como un error de conexión en lugar de como un simple mensaje de tiempo de espera agotado.

Un error específico de Scrapy

Un error común específico de Scrapy es pasar un valor incompleto a request.meta["proxy"]

.

En nuestra prueba, utilizamos:

proxy.geonode.io:9000

sin el esquema ni las credenciales. La solicitud devolvió un código HTTP 407.

La solución consistió en pasar la URL completa del proxy:

http://USERNAME:PASSWORD@proxy.geonode.io:9000

o dejar que el middleware del descargador la generara a partir de las variables de entorno.

Scrapy + Geonode: qué te ofrece

Scrapy se encarga de las solicitudes o conexiones en la aplicación. Geonode se encarga de la conexión al proxy.

Puedes elegir entre proxies residenciales, de ISP o de centro de datos en función del trabajo, y luego utilizar la rotación, las sesiones persistentes y la segmentación geográfica cuando sea necesario. De este modo, la configuración del proxy se mantiene separada del resto del código de la aplicación.

Los planes varían según el tipo de proxy, y algunas opciones se cobran por GB.

Preguntas frecuentes

¿Admite Scrapy los proxies de tipo «SOCKS5»?

La configuración «SOCKS5» requiere una configuración adicional en la versión de Scrapy que hemos probado.

Al intentar pasar un proxy de tipo «socks5://» a través del gestor HTTP predeterminado de Scrapy, se produjo el siguiente error:

UnsupportedURLSchemeError("Unsupported scheme: b'socks5'")

A continuación, instalamos httpx2[socks] y configuramos el controlador experimental de Scrapy HttpxDownloadHandler. Con el proxy rotativo SOCKS5 en el puerto 11000, la solicitud se completó con éxito con un código de estado HTTP 200 y devolvió una dirección IP del proxy. El controlador es experimental, por lo que resulta más adecuado para realizar pruebas que como recomendación para entornos de producción.

¿Puedo rotar las direcciones IP por solicitud en Scrapy?

Sí, Scrapy puede enviar solicitudes a través de un proxy rotativo, pero no se garantiza que cada solicitud utilice una dirección IP diferente.

Nuestra prueba de cinco solicitudes arrojó dos direcciones IP únicas. Las tres primeras solicitudes compartieron una misma dirección IP, mientras que las dos últimas compartieron otra, lo que confirma que se produjo la rotación durante la prueba.

¿Hay una prueba gratuita?

Sí. Geonode ofrece una prueba gratuita, por lo que se puede probar el proxy con Scrapy antes de pasar a un plan de pago. Consulta la prueba gratuita actual y los planes.

¿Dónde debo configurar el proxy en Scrapy?

Para una solicitud concreta, pasa el proxy a través de request.meta["proxy"].

Si se necesita la misma configuración de proxy para varias solicitudes, el middleware «downloader» centraliza la lógica del proxy en un único lugar. En nuestra prueba, el middleware personalizado estableció request.meta["proxy"] antes de que el HttpProxyMiddleware integrado en Scrapy procesara la solicitud.

¿Por qué mi araña de Scrapy se ejecuta pero no envía ninguna solicitud?

Comprueba cómo crea la araña sus primeras solicitudes.

En nuestra prueba con Scrapy 2.19, al definir únicamente el método heredado start_requests()

, la araña se iniciaba y se cerraba sin realizar ninguna solicitud. El problema se solucionó utilizando el método asíncrono start()

:

async def start(self):
    yield scrapy.Request(...)

Este fue el comportamiento registrado durante nuestra configuración de prueba.