Volver al blog
Guías
Raluca PenciucLast updated on Mar 31, 20266 min read

Dominar el web scraping: cómo rotar proxies en Python

Dominar el web scraping: cómo rotar proxies en Python

En la era digital actual, el uso del web scraping se ha vuelto cada vez más popular. Sin embargo, esta creciente popularidad va acompañada de un mayor control por parte de los sitios web y los servicios que no quieren que se extraigan sus datos.

Si estás buscando automatizar tus tareas de extracción de datos, es posible que te hayas encontrado con la necesidad de utilizar proxies para ocultar tu dirección IP. Sin embargo, utilizar el mismo proxy durante un periodo prolongado puede hacer que te bloqueen fácilmente. Aquí es donde entra en juego la rotación de proxies.

En este artículo, exploraremos cómo rotar proxies en Python, incluyendo la instalación de los requisitos previos necesarios, el uso de un único proxy y cómo aumentar la velocidad mientras se rotan los proxies. También comentaremos algunos consejos sobre cómo sacar el máximo partido a tus esfuerzos de rotación de proxies.

Al final de esta guía, podrás rotar proxies como un profesional y asegurarte de que tus esfuerzos de web scraping pasen desapercibidos. ¡Empecemos!

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!

Acerca del autor
Raluca Penciuc, Desarrollador full-stack @ WebScrapingAPI
Raluca PenciucDesarrollador full-stack

Raluca Penciuc es desarrolladora full stack en WebScrapingAPI, donde se dedica a crear rastreadores, mejorar las técnicas de evasión y buscar formas fiables de reducir la detección en los sitios web de destino.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.