Cómo rotar proxies en Python (requests y aiohttp)
La rotación es la diferencia entre un scraper que tiene una IP prohibida y uno que distribuye la carga entre muchas. Aquí hay un rotador funcional tanto para solicitudes síncronas como para aiohttp asíncrono, con verificaciones de salud y jubilación automática de salidas muertas.
Lo que realmente resuelve la rotación
Los sitios limitan y prohíben por IP. Si cada solicitud proviene de una sola dirección, alcanzas el límite rápidamente y una sola prohibición detiene todo el trabajo. La rotación distribuye las solicitudes a través de un grupo de salidas, por lo que la carga por IP se mantiene por debajo del umbral y una salida muerta o bloqueada solo te cuesta un reintento, no la ejecución. Dos diseños cubren casi todo: round-robin (circular a través del grupo en orden, predecible y uniforme) y aleatorio (elegir por solicitud, simple y sin estado).
The pool itself can come from two places. You can list several s4m endpoints and ports and rotate across them, or, for quick low-stakes tests, pull live entries from the free public proxy list — filtered by country, protocol and anonymity, though those third-party proxies are use-at-your-own-risk and die often. Production rotation should lean on authenticated datacenter proxies from s4m (SOCKS5 on 1080, HTTP on 3128, USER:PASS), which stay up and are metered so scaling the pool is cheap. This builds directly on scraping with requests.
Un rotador para solicitudes y aiohttp
Un grupo que hace round-robin, reintentos en caso de fallo y retira salidas que siguen fallando. Versiones síncronas y asíncronas. Reemplaza USER:PASS.
import asyncio, itertools, random
import requests, aiohttp
from aiohttp_socks import ProxyConnector # pip install aiohttp-socks
USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
POOL = [
f"socks5h://{USER}:{PASS}@{HOST}:1080",
f"http://{USER}:{PASS}@{HOST}:3128",
# add more endpoints/ports here to widen the pool
]
# ---------- Synchronous: requests + round-robin + retirement ----------
class Rotator:
def __init__(self, pool):
self.alive = list(pool)
self.fails = {p: 0 for p in pool}
self._cycle = itertools.cycle(self.alive)
def pick(self):
return next(self._cycle)
def retire(self, proxy):
self.fails[proxy] += 1
if self.fails[proxy] >= 3 and proxy in self.alive:
self.alive.remove(proxy)
self._cycle = itertools.cycle(self.alive or POOL)
def get(url, rot, retries=4):
for _ in range(retries):
proxy = rot.pick()
try:
r = requests.get(url, proxies={"http": proxy, "https": proxy},
timeout=(5, 20))
r.raise_for_status()
return r
except requests.RequestException:
rot.retire(proxy)
raise SystemExit("pool exhausted")
rot = Rotator(POOL)
print(get("https://api.ipify.org", rot).text)
# ---------- Async: aiohttp, one connector per proxy ----------
async def fetch(url, proxy):
connector = ProxyConnector.from_url(proxy)
async with aiohttp.ClientSession(connector=connector) as s:
async with s.get(url, timeout=aiohttp.ClientTimeout(total=25)) as r:
return await r.text()
async def main():
tasks = [fetch("https://api.ipify.org", random.choice(POOL))
for _ in range(5)]
for ip in await asyncio.gather(*tasks, return_exceptions=True):
print(ip)
asyncio.run(main())Decisiones de diseño que importan
Los controles que deciden si la rotación ayuda o solo añade rotación.
Round-robin vs aleatorio
Round-robin distribuye la carga de manera uniforme y es fácil de razonar; aleatorio es sin estado y simple. Ambos superan a una salida fija única: elige round-robin cuando la distribución uniforme importa.
Retirar salidas muertas
Cuenta fallos consecutivos por proxy y elimina una salida después de unos pocos intentos, para que el grupo se auto-repare en lugar de intentar un cadáver para siempre.
Verificación de salud antes de usar
Accede periódicamente a un punto final de eco IP a través de cada proxy y mantén solo los que responden. Esencial cuando el grupo incluye entradas de lista gratuita volátiles.
Retrocede, no corras
La rotación no es una licencia para inundar. Añade retrasos por host y retroceso exponencial para que te mantengas bajo los límites en lugar de luchar contra ellos a través de muchas IPs.
Sesiones persistentes y límites honestos
La rotación no siempre es lo que deseas. Algunos flujos — un inicio de sesión, un carrito, un formulario de varios pasos — necesitan la misma IP durante toda la sesión, o el sitio ve a un usuario teletransportándose entre direcciones y lo bloquea. Eso es una sesión persistente: rota entre trabajos, mantente fijo dentro de uno. Cuando un flujo de trabajo necesita una dirección garantizada y estable, añade una IP personal dedicada en lugar de rotar.
Sé honesto sobre el límite. Los proxies s4m son de datacenter, así que rotarlos ayuda con los límites de tasa e incluso con la carga, pero no disfrazará las IPs de datacenter de un sistema anti-bot que bloquea todo el rango. La rotación tampoco hace nada sobre las huellas digitales del navegador o los patrones de solicitud. Úsalo como una capa: combínalo con encabezados realistas, retroceso y respeto por las reglas de cada sitio. Para las piezas asíncronas necesitarás aiohttp-socks para soporte de SOCKS5; valida las salidas con las herramientas y automatiza el manejo de credenciales a través de la API.
Preguntas, respondidas
¿Cómo rotar proxies con solicitudes?
Mantén una lista de URLs de proxy y elige una por solicitud — round-robin o aleatorio — pasándola como argumento de proxies. Retira una salida después de algunos fallos consecutivos para que el grupo se auto-repare. El ejemplo anterior muestra un rotador completo.
¿Cómo rotar proxies con aiohttp?
aiohttp establece el proxy por solicitud para HTTP, pero para SOCKS5 construyes un ProxyConnector (de aiohttp-socks) por proxy y creas una sesión con él. Distribuye tareas a través del grupo con asyncio.gather.
¿Cuándo NO debo rotar proxies?
Cuando un flujo de trabajo necesita una identidad consistente: inicios de sesión, carritos, formularios de varios pasos. Cambiar de IP a mitad de sesión parece sospechoso y se bloquea. Usa una sesión persistente o una IP dedicada para esos flujos.
¿Los proxies de centro de datos rotativos evitarán todos los bloqueos?
No. La rotación distribuye la carga y evita los límites de tasa por IP, pero los rangos de centros de datos aún pueden ser marcados en su totalidad por sistemas anti-bot agresivos, y la rotación no cambia tu huella digital del navegador ni su comportamiento.
Rotar a través de salidas reales
Amplía tu grupo con proxies SOCKS5 y HTTP de centro de datos autenticados en proxy.s4m.online, medidos para que escalar sea barato. Agrega una IP dedicada para los pasos de sesión persistente.
Las personas encontraron esta página buscando
- cómo rotar proxies en Python (requests y aiohttp)
- mejor proxy para scraping 2026
- proxy para scraping precio
- proxy para scraping
- ¿qué es proxy http?
- ¿Qué son los proxies ISP (residenciales estáticos)
- interruptor de corte de VPN en Windows
- proxy socks5 explicado
- es lista de proxies gratuitos seguro
- HTTP 407 se requiere autenticación de proxy
- lista de proxies gratuitos sin registro
- autenticación de proxy
Frases de búsqueda reales que esta página responde — los enlaces abren la página que las cubre en profundidad.