A fecha de 7 de octubre de 2026, Shifter cuenta con el mayor pool de IPs estadounidenses activas, más que Oxylabs y Bright Data, a una fracción del coste.Shifter ahora tiene el mayor conjunto de IPs de EE. UU. activas

Ver comparativas

Frameworks de scraping con gestión de proxies integrada: qué gestiona cada uno

Comparativa de Scrapy, Crawlee, Colly, Playwright, Puppeteer y Selenium en soporte de proxies: rotación, sesiones y credenciales, y qué cambia con una puerta de enlace rotatoria.

Ingeniería · Actualizado el 9 de noviembre de 2026 · 8 min de lectura
configurarrotarsesiónCrawleeScrapyCollyPlaywrightPuppeteerSelenium
Seis herramientas, tres tareas de proxy. Las celdas azul ya están resueltas por ti.
Conocimiento
En esta página
  1. La respuesta corta
  2. Crawlee: proxies como un recurso gestionado
  3. Scrapy: un proxy por solicitud, la rotación es cosa tuya
  4. Colly: un conmutador round-robin sencillo
  5. Playwright y Puppeteer: aislamiento por contexto
  6. Selenium: a nivel de navegador, e incómodo con las contraseñas
  7. Qué cambia una puerta de enlace rotatoria
  8. Configurándolo
  9. Cuál elegir
  10. Fuentes y referencias

Casi todos los frameworks de scraping permiten configurar un proxy. Muchos menos gestionan los proxies por ti: rotándolos, retirando los bloqueados y manteniendo una sesión en una IP. Si usas proxies residenciales, saber qué parte gestiona el framework y qué parte gestiona la puerta de enlace ahorra mucho código de conexión.

Esta guía compara seis herramientas comunes en tres preguntas: cómo se configura el proxy, si la herramienta rota los proxies por sí misma y si vincula una sesión a un único proxy. Después muestra la pequeña cantidad de código que necesita cada una detrás de una puerta de enlace rotatoria.

La respuesta corta

HerramientaLenguajeCómo se configura el proxyRota por sí solaVincula una sesión a un proxy
CrawleeNode.jsProxyConfigurationSí: round robin, función personalizada, nivelesSí, mediante su pool de sesiones
ScrapyPythonrequest.meta["proxy"] o variables de entornoNo, necesita tu propio middlewareNo
CollyGoSetProxy o SetProxyFuncSí: conmutador round-robinNo
PlaywrightNode.js, Python, Java, .NETAl iniciar o por contexto de navegadorNoPor contexto
PuppeteerNode.jsFlag de lanzamiento o por contexto de navegadorNoPor contexto
SeleniumMuchosOpción a nivel de navegadorNoNo

Crawlee es la única que trata los proxies como algo que gestionar en lugar de un simple ajuste. Las herramientas de navegador ofrecen aislamiento por contexto, que es la base de las sesiones, pero la lógica de rotación es cosa tuya.

Crawlee: proxies como un recurso gestionado

El ProxyConfiguration de Crawlee toma una lista de URLs de proxy y rota entre ellas “de forma round-robin”. En lugar de una lista, puedes pasar una función que elija el proxy para cada solicitud. Un tercer modo, los proxies por niveles, empieza con el nivel más barato (a menudo sin proxy en absoluto), sube de nivel cuando un sitio bloquea el crawler y vuelve a bajar cuando el nivel inferior vuelve a funcionar.

La parte que más importa son las sesiones. Cuando el crawler se ejecuta con su pool de sesiones, cada sesión mantiene el mismo proxy: en palabras de la documentación, las llamadas posteriores “con el mismo sessionId siempre devolverán la misma proxyUrl”. Cuando Crawlee decide que una sesión está bloqueada, la retira y la siguiente sesión recibe un proxy distinto. Las cookies siguen a la sesión, de modo que la IP y las cookies se mantienen juntas.

Scrapy: un proxy por solicitud, la rotación es cosa tuya

El HttpProxyMiddleware de Scrapy lee el proxy de request.meta["proxy"], y recurre a las variables de entorno http_proxy y https_proxy si no lo encuentra. Las credenciales pueden ir en la URL, como en http://username:password@host:port. Eso es todo lo que hace. Elegir un proxy distinto por solicitud, detectar bloqueos y dejar descansar los proxies caídos queda en tus manos o en las de una extensión como scrapy-rotating-proxies, que lee una lista de proxies y trata las respuestas que no son 200 o vacías como bloqueos por defecto.

Nuestra guía de integración de Scrapy cubre la configuración básica, y el artículo sobre rotación de proxies residenciales en Scrapy profundiza más en el middleware.

Colly: un conmutador round-robin sencillo

Colly, el framework de Go, tiene SetProxy para un único proxy y SetProxyFunc para una función que elige uno por solicitud. Su paquete proxy incluye RoundRobinProxySwitcher, que “rota las ProxyURLs en cada solicitud” y acepta URLs http, https y socks5. No existe un concepto de sesión: si dos solicitudes deben compartir una IP, lo decides en tu propia función.

Playwright y Puppeteer: aislamiento por contexto

Las herramientas de automatización de navegador no rotan nada, pero permiten que cada contexto de navegador use su propio proxy, que es la forma de ejecutar muchas sesiones separadas en un mismo navegador.

  • Playwright toma una opción proxy con server, username y password, ya sea al iniciar para todo el navegador o en newContext() para un contexto concreto. Consulta nuestra guía de integración de Playwright para la configuración completa.
  • Puppeteer configura un proxy con el flag de lanzamiento --proxy-server, o por contexto con createBrowserContext({ proxyServer }). Ninguno de los dos admite credenciales: respondes al desafío de inicio de sesión del proxy con page.authenticate().

Da a cada contexto su propia sesión y obtendrás una IP y un almacén de cookies por contexto, que es lo que necesita un flujo con inicio de sesión.

Selenium: a nivel de navegador, e incómodo con las contraseñas

Selenium configura el proxy mediante las opciones del navegador, por lo que se aplica a todo el navegador. Con Chrome, la vía habitual es el switch --proxy-server, que no tiene lugar para un nombre de usuario y una contraseña. Las soluciones habituales son una pequeña extensión de navegador que responde al desafío de inicio de sesión, o un proxy de reenvío local sin contraseña que pasa el tráfico a tu proveedor con credenciales. Selenium Wire, antes la solución popular, fue archivado en enero de 2024 y ya no recibe mantenimiento.

Qué cambia una puerta de enlace rotatoria

La rotación a nivel de framework se diseñó para listas de proxies: un centenar de pares IP:puerto que ciclas, pruebas y retiras. Una puerta de enlace residencial rotatoria funciona de otra forma. Te conectas a un único host y puerto, y la puerta de enlace elige la IP de salida. Eso saca la mayor parte del trabajo de tu código:

  • La rotación ocurre en la puerta de enlace, así que basta con una única URL de proxy. Una lista round-robin de una sola entrada es solo un ajuste.
  • Las sesiones se solicitan en el nombre de usuario. Con Shifter añades sid-<id> para mantener una IP de salida y ttl-<seconds> para indicar cuánto tiempo mantenerla, tal como se explica en sticky vs rotating proxies.
  • La ubicación también forma parte del nombre de usuario, de modo que un crawler puede apuntar a un país o ciudad por solicitud sin una segunda lista de proxies.

Así, la tarea del framework se reduce a una sola cosa: mapear su propia idea de sesión al ID de sesión en el nombre de usuario del proxy.

Configurándolo

Crawlee. Pasa una función que construya el nombre de usuario a partir del ID de sesión de Crawlee. Los IDs de sesión pueden contener caracteres como guiones bajos, así que conserva solo letras y dígitos:

import { CheerioCrawler, ProxyConfiguration } from 'crawlee';

const proxyConfiguration = new ProxyConfiguration({
  newUrlFunction: (sessionId) => {
    const sid = sessionId
      ? `-sid-${String(sessionId).replace(/[^a-zA-Z0-9]/g, '')}-ttl-600`
      : '';
    return `http://customer-USERNAME${sid}:PASSWORD@p.shifter.io:443`;
  },
});

const crawler = new CheerioCrawler({
  proxyConfiguration,
  useSessionPool: true,
  persistCookiesPerSession: true,
  async requestHandler({ request, $ }) {
    console.log(request.url, $('title').text());
  },
});

await crawler.run(['https://example.com/']);

Cuando Crawlee retira una sesión bloqueada, el siguiente ID de sesión da una nueva IP fija por sí solo.

Scrapy. Un pequeño middleware de descarga configura el proxy antes de que se ejecute el propio middleware de proxy de Scrapy. Las solicitudes que llevan un valor session en meta comparten una IP; el resto rotan:

# middlewares.py
class GatewayProxyMiddleware:
    def process_request(self, request, spider):
        sid = request.meta.get("session")
        user = "customer-USERNAME"
        if sid:
            user += f"-sid-{sid}-ttl-600"
        request.meta["proxy"] = f"http://{user}:PASSWORD@p.shifter.io:443"

# settings.py
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.GatewayProxyMiddleware": 350,
}

Playwright. Un contexto por sesión:

const context = await browser.newContext({
  proxy: {
    server: 'http://p.shifter.io:443',
    username: 'customer-USERNAME-sid-cart1-ttl-600',
    password: 'PASSWORD',
  },
});

Cuál elegir

Elige el framework en función del sitio y del equipo, no de sus funciones de proxy. Crawlee es la opción más sólida cuando quieres que el bloqueo, las sesiones y los niveles de proxy se gestionen por ti en Node.js. Scrapy sigue siendo la forma más rápida de rastrear grandes cantidades de páginas HTML sencillas en Python, y su carencia de proxy se resuelve con un middleware de diez líneas. Playwright o Puppeteer son las herramientas adecuadas cuando las páginas necesitan un navegador real, y los contextos ofrecen sesiones limpias. Selenium también funciona, con más esfuerzo en torno a las credenciales.

Detrás de una puerta de enlace rotatoria, las seis se reducen al mismo patrón: una única URL de proxy, y un ID de sesión en el nombre de usuario allí donde las solicitudes deban compartir una IP. Para más información sobre cómo llevar esto a un crawler en producción, consulta nuestro caso de uso de web scraping.

Fuentes y referencias

Preguntas frecuentes

¿Qué framework de scraping tiene la gestión de proxies integrada más completa?

Crawlee. Su ProxyConfiguration rota una lista de proxies, puede elegir un proxy por solicitud con tu propia función, puede subir a través de niveles de proxies cuando un sitio empieza a bloquear, y vincula cada sesión a un único proxy para que las cookies y la IP se mantengan juntas. Scrapy, Playwright, Puppeteer y Selenium aceptan un proxy pero dejan la rotación en tus manos.

¿Scrapy rota proxies por sí solo?

No. El HttpProxyMiddleware de Scrapy envía cada solicitud a través del proxy indicado en request.meta['proxy'] o en las variables de entorno http_proxy y https_proxy. Rotar entre proxies requiere tu propio middleware o una extensión de terceros como scrapy-rotating-proxies.

¿Necesito la rotación de proxies del framework si mi proveedor me da un gateway rotativo?

Normalmente no. Un gateway residencial rotativo cambia la IP de salida por ti detrás de un único host y puerto. Lo que sí necesitas del framework es el manejo de sesiones: enviar el mismo ID de sesión en el nombre de usuario del proxy para cada solicitud que deba compartir una misma IP, como un inicio de sesión o un proceso de compra.

¿Por qué no puedo poner un usuario y una contraseña en el flag de proxy de Chrome?

El switch --proxy-server de Chrome solo admite un host y un puerto. Puppeteer responde al desafío de inicio de sesión del proxy con page.authenticate, y Playwright acepta un usuario y una contraseña en su opción de proxy. Selenium no tiene un equivalente integrado para Chrome, así que la gente usa una pequeña extensión de navegador o un proxy de reenvío local.

¿Listo para empezar?

Prueba los proxies residenciales de Shifter, más de 205M IPs, más de 195 países, desde 0,75 $/GB.

Comenzar