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
- n8n si la recopilación pasa por un workflow
- Probar el proxy antes de lanzar el crawler
- Errores comunes