Configuración del entorno
Antes de empezar, asegurémonos de que contamos con las herramientas necesarias. En primer lugar, descarga e instala la última versión de Python desde la página web oficial.
Para este tutorial, utilizaremos Visual Studio Code como nuestro entorno de desarrollo integrado (IDE), pero puedes usar cualquier otro IDE de tu elección. Crea una nueva carpeta para tu proyecto y un nuevo archivo index.py, donde escribiremos nuestro código.
Ahora abre el terminal y ejecuta el siguiente comando para instalar el paquete necesario para enviar solicitudes:
pip install requests
¡Y eso es todo! Podemos empezar a programar.
Proxificar una solicitud GET
Empecemos enviando una sencilla solicitud GET. En el archivo index.py recién creado, escribe el siguiente código:
import requests
response = requests.get('https://api.ipify.org/?format=json')
print(response.text)
Y ahora ejecuta el script con el siguiente comando:
py index.py
Verás que el resultado es tu dirección IP real y que, por muchas veces que ejecutes el script, siempre mostrará el mismo resultado.
El objetivo de esta guía es mostrarte cómo puedes ocultar tu dirección IP real y cómo obtener una IP diferente cada vez que se ejecute el script. Aquí es donde entran en juego los proxies. Los encontrarás en la siguiente estructura:
http://proxy_username:proxy_password@proxy_host:proxy_port
El protocolo puede ser «http», «https», «socks4» o «socks5», mientras que «proxy_username» y «proxy_password» son opcionales.
El código actualizado debería tener este aspecto:
import requests
proxy_schema = {
"http": "http://proxy_username:proxy_password@proxy_host:proxy_port",
"https": "https://proxy_username:proxy_password@proxy_host:proxy_port"
}
URL = 'https://api.ipify.org/?format=json'
response = requests.get(URL, proxies=proxy_schema)
print(response.text)
Puedes sustituir la plantilla de proxy por una real, proporcionada por un servicio de proxy gratuito, solo con fines de prueba. Sin embargo, cabe mencionar que no son fiables y solo deben utilizarse con fines de prueba.
En cualquier caso, teniendo en cuenta que incluso los mejores proxies pueden resultar inestables en ocasiones, es recomendable gestionar las excepciones en nuestro código:
try:
URL = 'https://api.ipify.org/?format=json'
response = requests.get(URL, proxies=proxy_schema, timeout=30)
print(response.text)
except:
print('Unable to connect to the proxy')
Si has conseguido encontrar un proxy gratuito que funcione, tras ejecutar el código deberías observar que el resultado ha cambiado, ya que ya no es tu dirección IP real.
Rotar los proxies
Ahora veamos cómo podemos utilizar varios proxies para anonimizar nuestras solicitudes. Al mismo tiempo, gestionaremos la velocidad de nuestro script. Enviaremos las solicitudes de forma asíncrona, utilizando la biblioteca «concurrent.futures».
En primer lugar, supongamos que tenemos la siguiente lista de proxies (o grupo de proxies):
proxy_pool = [
"http://191.5.0.79:53281",
"http://202.166.202.29:58794",
"http://51.210.106.217:443",
"http://5103.240.161.109:6666"
]
Esto puede estar codificado de forma fija o leerse desde un archivo, tú eliges. Usando esto, podemos escribir el siguiente código:
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=8) as pool:
for response in list(pool.map(scrape_job, proxy_pool)):
pass
Inicializamos un grupo de subprocesos con un máximo de 8 trabajadores, para ejecutar la función «scrape_job» (que definiremos en breve), la cual recibirá como parámetro un elemento de la lista «proxy_pool».
Ahora, la función «scrape_job» representará el código que escribimos anteriormente, con un pequeño ajuste:
def scrape_job(proxy):
try:
URL = 'https://api.ipify.org/?format=json'
proxy_scheme = {
"http": proxy,
"https": proxy
}
response = requests.get(URL, proxies=proxy_scheme, timeout=30)
print(response.text)
except:
print('Unable to connect to the proxy')
La variable «proxy_scheme» se asignará ahora dinámicamente, según el proxy que enviemos como parámetro. El script se puede ampliar aún más a múltiples URL, con un valor de tiempo de espera específico para cada una.
Al ejecutar el script se deberían enviar múltiples solicitudes GET al mismo tiempo, cuyo resultado serían diferentes direcciones IP (si los proxies gratuitos funcionan).
Ampliación
A la hora de empezar a rotar proxies, hay algunas prácticas recomendadas clave que pueden ayudar a garantizar que la rotación de proxies sea lo más eficaz posible. Aquí tienes algunos consejos a tener en cuenta:
Los proxies gratuitos son una mala idea
Aunque los servicios de proxy gratuitos pueden parecer una opción rentable, a menudo son poco fiables e incluso pueden poner en riesgo tus esfuerzos de scraping. Considera invertir en un servicio de proxy premium que ofrezca un mayor nivel de seguridad y fiabilidad.
Prueba antes de extraer
Antes de empezar a extraer datos, es recomendable probar la rotación de proxies para asegurarte de que funciona según lo previsto. Esto te ayudará a identificar y solucionar cualquier incidencia antes de que cause problemas más adelante.
Utiliza la rotación de user-agent
Rotar tu dirección IP es una forma eficaz de eludir las medidas anti-scraping, pero no es la única técnica en la que debes confiar. Combinar la rotación de IP con la rotación de user-agent, que cambia la firma del navegador, puede hacer que a los sitios web les resulte aún más difícil detectar y bloquear tu scraper.
Servicios de proxy premium
No todos los servicios de proxy son iguales, por lo que es importante investigar y elegir un proveedor que ofrezca un alto nivel de seguridad y fiabilidad. Busca un servicio que ofrezca una amplia gama de direcciones IP y ubicaciones, así como funciones como la rotación automática de IP y la navegación anónima.
Utiliza una API de web scraping
Utilizar una API de web scraping puede ser una forma estupenda de simplificar el proceso de rotación de proxies, especialmente si eres nuevo en el web scraping. Una buena API de scraper se encargará de la rotación de proxies por ti y te proporcionará una interfaz limpia y fácil de usar para acceder a los datos que necesitas.
Su mecanismo de rotación de proxies evita los bloqueos por completo, y su amplia base de conocimientos permite aleatorizar los datos del navegador para que parezca un usuario real.
Sin embargo, si prefieres seguir utilizando tu propio scraper, o si tu caso de uso es demasiado complejo, también tienes la opción de acceder a la API como proxy. La solicitud simplemente se redirigirá a la API mientras tu script se beneficia de la rotación de proxies.
Conclusión
En resumen, saber cómo rotar proxies es una técnica esencial para el web scraping, y Python facilita su implementación. Siguiendo los pasos descritos en esta guía, has adquirido conocimientos que van desde el uso de un proxy para una sola solicitud hasta cómo acelerar el proceso de rotación de proxies.
Además, has descubierto algunos consejos adicionales sobre la rotación de proxies a la hora de ampliar tu proyecto.
Recuerda que una rotación de proxies eficaz puede aumentar considerablemente el éxito de tus proyectos de web scraping, y esta guía te ha proporcionado las herramientas y los conocimientos necesarios para hacerlo como un profesional. ¡Feliz scraping!




