Entrega automática tras confirmar el pago · IP dedicado · Soporte por ticket en el panel Pago local según tu país · Precios en dólares (USD)
ProxyBox
Automatización

Proxy en Scrapy (y resumen para Playwright y Puppeteer)

Cómo usar un proxy con usuario y contraseña en Scrapy con request.meta, rotación por middleware y el resumen para Playwright y Puppeteer.

3 min de lectura Actualizado el 27 de septiembre de 2026

Esta guía muestra cómo conectar un proxy con usuario y contraseña en Scrapy, cómo rotar entre varias IPs con un middleware y, al final, un resumen de lo que cambia en Playwright y Puppeteer, que tienen guías propias: proxy en Playwright y proxy en Puppeteer. Para Selenium, mira proxy en Selenium; para peticiones sin navegador, proxy en Python.

Credenciales: host, puerto HTTP, usuario y contraseña en el panel. Valídalas antes con la prueba con cURL.

Scrapy: el proxy en request.meta

Scrapy no lanza Chrome por defecto. La URL con usuario y contraseña en request.meta es el camino documentado: el HttpProxyMiddleware, activo por defecto, lee esa URL y envía la cabecera de autenticación al proxy.

# en el spider
def start_requests(self):
    yield scrapy.Request(
        "https://api.ipify.org?format=json",
        meta={
            "proxy": "http://tu-usuario:[email protected]:8000",
        },
    )

Si la contraseña tiene caracteres especiales (@, :, #), codifícalos en la URL (por ejemplo, con urllib.parse.quote), o la autenticación fallará con error 407.

Rotación con un middleware propio

Para repartir las peticiones entre varias IPs, un middleware elige la URL del proxy en cada petición:

# middlewares.py
import random

PROXIES = [
    "http://tu-usuario:[email protected]:8000",
    "http://tu-usuario:[email protected]:8000",
]

class ProxyRotativoMiddleware:
    def process_request(self, request, spider):
        request.meta.setdefault("proxy", random.choice(PROXIES))
# settings.py
DOWNLOADER_MIDDLEWARES = {
    "miproyecto.middlewares.ProxyRotativoMiddleware": 350,
}

El número 350 hace que tu middleware corra antes del HttpProxyMiddleware (750), que es el que aplica la autenticación.

No apuntes el crawler al mismo ISP residencial que usas en el Business Manager. Usa IPv6 cuando el sitio de destino acepta IPv6, o un grupo de IPv4 dedicadas; el residencial rotativo por GB solo tiene IP de Brasil.

Respeta robots.txt, los términos de cada sitio y nuestra política de uso aceptable.

Playwright y Puppeteer, en resumen

Playwright: pasa server, username y password en la opción proxy de chromium.launch() o de cada contexto; con credencial, usa HTTP, porque Chromium no admite usuario y contraseña en SOCKS5. Paso a paso en proxy en Playwright.

Puppeteer: pasa solo el servidor en --proxy-server=http://host:puerto y la credencial con page.authenticate(); no pongas usuario:contraseña en la URL de Chromium. Paso a paso en proxy en Puppeteer.

Lo que el proxy no resuelve

El proxy cambia la IP de salida. No resuelve CAPTCHAs, no cambia la huella digital del navegador automatizado ni hace que un sitio que prohíbe la recopilación automática pase a permitirla.

Después de configurar

Preguntas frecuentes

¿Dónde pongo el usuario y la contraseña del proxy en Scrapy?
En la URL del proxy, dentro de request.meta, con el formato http://usuario:contraseña@host:puerto. El HttpProxyMiddleware de Scrapy, activo por defecto, la convierte en la cabecera de autenticación.
¿Sirve la misma IP que uso para cuentas publicitarias?
No mezcles la recopilación de datos y el Business Manager en la misma dirección. Para el crawler, IPv6 en lote cuando el sitio lo acepta, o varias IPv4 dedicadas; el residencial rotativo por GB solo existe con IP de Brasil. Para cuentas, IPv4 o ISP fija.
¿SOCKS5 en Scrapy, Playwright y Puppeteer?
Scrapy no trae SOCKS de serie; hace falta un complemento. Playwright acepta socks5 en server, pero sin usuario y contraseña en Chromium. Puppeteer con SOCKS y contraseña es el caso más frágil. Empieza por HTTP.

¿Te atascaste en algún paso?

Envíanos una captura del error por WhatsApp o abre un ticket en el panel. En la mayoría de los casos el problema es un campo intercambiado entre host y puerto.

¿Tienes dudas? Escríbenos por WhatsApp