En esta guía sobre cómo rotar proxies en Python, aprenderás:
- Qué son los proxies y por qué usarlos
- Qué es la rotación de proxies y por qué podrías necesitarla
- Cómo rotar proxies en Python
- Limitaciones comunes al rotar proxies en Python
¡Vamos a profundizar!
¿Qué Es un Proxy?
Un proxy es un servidor que actúa como intermediario entre un usuario y un recurso de red a través de Internet. Entonces, puedes pensar en un proxy como un intermediario que reenvía solicitudes y respuestas entre las partes.
¿Por Qué Usar Proxies en Python?
Cuando envías una solicitud a un sitio web usando un proxy, la solicitud primero pasa por el servidor proxy. Luego, el proxy reenvía tu solicitud al sitio web, recibe la respuesta y te la devuelve. Este proceso enmascara tu dirección IP ante el destino, haciendo que parezca que la solicitud proviene del servidor proxy en lugar de tu dispositivo.
La razón típica por la que querrías usar un proxy es en el caso de la automatización de solicitudes web o scraping web. En este escenario, Python es uno de los mejores lenguajes para scraping web, gracias a sus extensas bibliotecas y su gran comunidad activa.
¿Qué Es la Rotación de Proxies y Por Qué la Necesitas?
Si haces demasiadas solicitudes desde una sola dirección IP, los sitios web pueden bloquearte mediante limitación de velocidad o prohibiciones directas de IP. Aquí es donde la rotación de proxies mediante proxies resulta útil.
Cambiar sistemáticamente entre diferentes servidores proxy mientras haces solicitudes web es una de las mejores formas de implementar la rotación de direcciones IP. Este procedimiento te ayuda a evitar las técnicas comunes anti-scraping y te proporciona los siguientes beneficios:
- Evitar bloqueos de IP: Distribuye las solicitudes entre múltiples IPs, dificultando que los sitios web detecten y bloqueen tu actividad de scraping.
- Evitar límites de velocidad: Los sitios web a menudo establecen límites de solicitudes por dirección IP dentro de un plazo específico. Rotar proxies te ayuda a seguir haciendo scraping incluso después de alcanzar estos límites en una IP.
- Acceder a contenido restringido geográficamente: Algunos sitios web muestran contenido diferente según la ubicación geográfica. La rotación de proxies con proxies de diferentes países te permite acceder a contenido específico de ubicación.
Cómo Rotar Proxies en Python: 3 Enfoques
Ahora que sabes qué son los proxies y por qué rotarlos, prepárate para algunos tutoriales paso a paso en Python. Los próximos párrafos te mostrarán cómo rotar proxies en Python usando diferentes enfoques y bibliotecas.
El sitio objetivo para todos los scripts será el endpoint /ip del proyecto HTTPBin. Este endpoint especial devuelve la dirección IP del llamador, haciéndolo perfecto para probar si la IP vista por el servidor está rotando.
¡Es hora de rotar algunos proxies en Python!
Requisitos
Para replicar los tutoriales de rotación de proxies con Python, debes tener Python 3.7 o superior instalado en tu máquina.
Requisitos Previos
Supongamos que llamas a la carpeta principal de tu proyecto proxy_rotation/. Al final de este paso, la carpeta tendrá la siguiente estructura:
proxy_rotation/
├── requests_file.py
├── async.py
├── scrapy_rotation/
└── venv/
Donde:
requests.pyyasync.pyson archivos Python que almacenan la lógica de rotación de proxies de Requests y AIOHTTP, respectivamente.scrapy_rotation/es una carpeta que contiene un proyecto Scrapy. La crearás e instanciarás más adelante.venv/contiene el entorno virtual
Puedes crear el directorio del entorno virtual venv/ así:
python -m venv venv
Para activarlo, en Windows, ejecuta:
venvScriptsactivate
De forma equivalente, en macOS y Linux, ejecuta:
source venv/bin/activate
Como requisito previo final, necesitas obtener una lista de proxies. Para este artículo, puedes usar nuestra lista de proxies gratuitos.
Cómo Rotar Proxies en Python Con Requests
En esta sección del tutorial, aprenderás cómo rotar proxies en Python con Requests.
Paso #1: Instalar Dependencias
En el entorno virtual activado, instala Requests con:
pip install requests
Paso #2: Definir la Lógica de Rotación
Para rotar proxies en Python con Requests, escribe el siguiente código en el archivo requests_file.py:
import random
import requests
# Define a list of proxies and return a random one
def get_random_proxy():
proxies = [
"http://PROXY_1:PORT_X",
"http://PROXY_2:PORT_Y",
"http://PROXY_3:PORT_X",
# Add more proxies here...
]
# Randomly pick a proxy
return random.choice(proxies)
for i in range(3):
proxy_url = get_random_proxy()
proxies = {
"http": proxy_url,
"https": proxy_url,
}
response = requests.get("https://httpbin.io/ip", proxies=proxies)
print(response.text)
Donde:
- La función
get_random_proxy()almacena la lista de proxies que has obtenido y devuelve uno aleatorio con el métodorandom.choice(). - El bucle
foritera sobre la lista aleatorizada de proxies y realiza la solicitud real con el métodorequests.get(). Para más información, lee nuestra guía sobre cómo usar un proxy con Python Requests.
Paso #3: Lanzar el Script
Para lanzar el script, ejecuta:
python requests_file.py
A continuación se muestra la respuesta esperada:
{
"origin": "PROXY_3:PORT_K"
}
{
"origin": "PROXY_1:PORT_N"
}
{
"origin": "PROXY_2:PORT_P"
}
¡Maravilloso! Las IPs de salida de tu script se han rotado como se deseaba.
Cómo Rotar Proxies en Python Con AIOHTTP
La principal limitación del enfoque aleatorizado usando la biblioteca Requests es que usa un proxy a la vez. Esto significa que necesitas esperar a que cada solicitud se complete antes de que se use el siguiente proxy.
Para evitar esa limitación, puedes usar AIOHTTP. Esta biblioteca te permite hacer solicitudes asíncronas, usando así múltiples proxies simultáneamente de forma no bloqueante. En otras palabras, te permite rotar los proxies de tu lista haciendo solicitudes asíncronas y paralelas al servidor objetivo. Mira AIOHTTP en acción en nuestra guía sobre scraping web asíncrono.
La siguiente sección muestra cómo rotar proxies en Python con AIOHTTP.
Paso #1: Instalar Dependencias
En el entorno virtual activado, instala AIOHTTP con:
pip install aiohttp
Paso #2: Definir la Lógica de Rotación
Para rotar proxies en Python con AIOHTTP, escribe el siguiente código en el archivo async.py:
import asyncio
import aiohttp
# Define a list of proxies
proxies_list = [
"http://PROXY_1:PORT_X",
"http://PROXY_2:PORT_Y",
"http://PROXY_3:PORT_X",
# Add more proxies here...
]
async def fetch_ip(session, proxy_address, attempt):
print(f"Attempt {attempt} using proxy: {proxy_address}")
async with session.get("https://httpbin.io/ip", proxy=proxy_address) as response:
json_response = await response.json()
print(f"Response from httpbin.io/ip (Attempt {attempt}):")
print(f"IP Address: {json_response.get('origin', 'Unknown')}")
print("-" * 40)
return json_response
async def main():
async with aiohttp.ClientSession() as session:
tasks = []
num_attempts = 3
for i in range(num_attempts):
# Rotate proxies using the modulus operator.
proxy_address = proxies_list[i % len(proxies_list)]
tasks.append(fetch_ip(session, proxy_address, i + 1))
# Run all requests concurrently
await asyncio.gather(*tasks)
# Launch the script
asyncio.run(main())
Este código hace lo siguiente:
- La función
fetch_ip()gestiona las solicitudes tomando la sesión, un proxy y el número de intento. En particular, envía una solicitudGETal sitio web objetivo e imprime la respuesta. - La función
main():- Crea una sesión con el método
aiohttp.ClientSession()para gestionar conexiones HTTP. - Configura una lista de tareas para enviar múltiples solicitudes simultáneamente y el número de intentos.
- Rota los proxies usando el operador módulo (
i % len(proxies_list)) para asegurar que los proxies se reutilicen de forma rotativa si el número de solicitudes supera el número de proxies. Descubre más en nuestro tutorial sobre cómo configurar un proxy en AIOHTTP. - Usa el método
asyncio.gather()para ejecutar todas las tareas simultáneamente.
- Crea una sesión con el método
Paso #3: Lanzar el Script
Para lanzar el script, ejecuta:
python async.py
Esta es la respuesta esperada:
Attempt 1 using proxy: http://PROXY_1:PORT_X
Attempt 2 using proxy: http://PROXY_2:PORT_Y
Attempt 3 using proxy: http://PROXY_3:PORT_Z
Response from httpbin.io/ip (Attempt 3):
IP Address: xxx.xxx.xxx.xxx
----------------------------------------
Response from httpbin.io/ip (Attempt 1):
IP Address: yyy.yyy.yyy.yyy
----------------------------------------
Response from httpbin.io/ip (Attempt 2):
IP Address: zzz.zzz.zzz.zzz
----------------------------------------
¡Increíble! Las IPs se están rotando como se esperaba.
Cómo Rotar Proxies Con Python Scrapy
En un artículo anterior, discutimos la posibilidad de rotar proxies en Python con Scrapy usando scrapy-rotating-proxies.
¡En esta sección guiada, aprenderás a hacerlo!
Paso #1: Instalar Dependencias
En el entorno virtual activado, instala las bibliotecas necesarias:
pip install scrapy scrapy-rotating-proxies
Paso #2: Crear un Nuevo Proyecto Scrapy
Dentro de la carpeta principal de tu repositorio (proxy_rotation/), instancia un nuevo proyecto Scrapy con este comando:
scrapy startproject scrapy_rotation
Esto creará una nueva subcarpeta llamada scrapy_rotation/ que tiene la siguiente estructura:
scrapy_rotation/
├── scrapy_rotation/
│ ├── __init__.py
│ ├── items.py # Defines the data structure for scraped items
│ ├── middlewares.py # Custom middlewares
│ ├── pipelines.py # Handles post-processing of scraped data
│ ├── settings.py # Project settings
│ └── spiders/ # Folder for all spiders
└── scrapy.cfg # Scrapy configuration file
Desde la carpeta principal (proxy_rotation/), muévete a scrapy_rotation/:
cd scrapy_rotation
Ahora puedes crear un nuevo spider que apunte al sitio web objetivo ejecutando:
scrapy genspider rotation http://httpbin.io/ip
Este script también crea el archivo rotation.py dentro de la carpeta spiders/.
Paso #3: Definir la Lógica de Rotación
La lógica de rotación de proxies puede gestionarse modificando el archivo settings.py con las siguientes configuraciones:
# Enable the rotating proxies middleware
DOWNLOADER_MIDDLEWARES = {
"rotating_proxies.middlewares.RotatingProxyMiddleware": 610,
"rotating_proxies.middlewares.BanDetectionMiddleware": 620,
}
# List of proxies to rotate
ROTATING_PROXY_LIST = [
"http://PROXY_1:PORT_X",
"http://PROXY_2:PORT_Y",
"http://PROXY_3:PORT_Z",
# Add more proxies as needed
]
# Configure retry settings
RETRY_TIMES = 5 # Number of retries for failed requests
RETRY_HTTP_CODES = [500, 502, 503, 504, 408] # HTTP codes to retry
Lo que gestiona la rotación de proxies aquí es la opción rotating_proxies.middlewares.RotatingProxyMiddleware: 610 en DOWNLOADER_MIDDLEWARES. En particular, esta opción selecciona un proxy de ROTATING_PROXY_LIST y lo asigna a cada solicitud.
Además, la opción rotating_proxies.middlewares.BanDetectionMiddleware: 620 permite al scraper detectar si una IP ha sido prohibida o bloqueada por el sitio web objetivo. Si una solicitud falla por esa razón, el middleware reintentará la solicitud con un nuevo proxy. Por lo tanto, esta opción trabaja estrechamente con RotatingProxyMiddleware para garantizar que los proxies prohibidos se eviten automáticamente.
Ahora, en el archivo rotation.py dentro de la carpeta spiders/ puedes escribir lo siguiente:
import scrapy
class IpSpider(scrapy.Spider):
name = "ip_spider"
start_urls = ["http://httpbin.io/ip"]
def parse(self, response):
# Extract and print the IP address from the response
ip = response.json().get("origin")
self.log(f"IP Address: {ip}")
Esta clase instancia todo el spider e imprime la respuesta en cada solicitud.
Paso #4: Lanzar el Script
Para lanzar el script, debes usar el nombre de la clase IpSpider(), que es ip_spider:
scrapy crawl ip_spider
Los datos devueltos por Scrapy en la CLI son particularmente completos. Entonces, si todo salió bien, entre la otra información, encontrarás algo como esto:
2026-02-18 14:55:17 [rotating_proxies.expire] DEBUG: Proxy <http://PROXY_1:PORT_X> is GOOD
2026-02-18 14:55:17 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.io/robots.txt> (referer: None)
2026-02-18 14:55:24 [rotating_proxies.middlewares] INFO: Proxies(good: 1, dead: 0, unchecked: 2, reanimated: 0, mean backoff time: 0s)
Limitaciones de los Enfoques Anteriores para la Rotación de Proxies en Python
Los métodos de rotación de proxies mencionados anteriormente son útiles, pero tienen algunas limitaciones:
- Requieren que recuperes y gestiones manualmente una lista de proxies.
- Implican código repetitivo (boilerplate).
- Pueden seguir resultando en prohibiciones de IP si no usas servidores proxy de alta calidad.
Si buscas una forma más eficiente y efectiva de gestionar la rotación de proxies en Python, Bright Data ofrece algunos de los mejores proxies rotativos del mercado. Con solo una URL de proxy, puedes integrarlos en tu cliente HTTP o biblioteca de scraping. Eso elimina la necesidad de código repetitivo y gestión manual de rotación.
Otros beneficios clave de este enfoque son:
- Rotación automática de IP con IPs fijas configurables
- Acceso a 400M+ monthly millones de IPs residenciales
- Control de geolocalización sobre las ubicaciones de los servidores proxy
- Soporte para protocolos HTTP, HTTPS y SOCKS
Simplifica tu gestión de proxies: ¡descubre nuestros proxies de auto-rotación!
Conclusión
En este artículo, aprendiste cómo rotar proxies en Python usando tres bibliotecas diferentes: Requests, AIOHTTP y Scrapy. Como se demostró en las secciones guiadas anteriores, el proceso no es complejo y requiere solo unas pocas líneas de código.
Sin embargo, ese enfoque tiene algunos inconvenientes:
- El código es muy repetitivo, haciendo tu script menos mantenible.
- Necesitas gestionar y proporcionar acceso a una gran lista de servidores proxy.
Afortunadamente, puedes evitar todo ese inconveniente con los proxies de auto-rotación de Bright Data, una solución más eficiente para rotar proxies en Python.
Bright Data controla los mejores servidores proxy del mundo, sirviendo a empresas Fortune 500 y a 50,000+ clientes. Su oferta incluye una amplia gama de tipos de proxy:
- Proxies de centro de datos – Más de 1,300,000+ IPs de centro de datos.
- Proxies residenciales – Más de 400M+ monthly IPs residenciales en más de 195 países.
- Proxies ISP – Más de 1,300,000+ IPs ISP.
¡Crea una cuenta de Bright Data hoy para probar nuestras soluciones de proxies y scraping!