Volver al blog
Guías
Raluca Penciuc3 de febrero de 20236 min de lectura

Dominando el Web Scraping: Cómo rotar proxies en Python

Dominando el Web Scraping: Cómo rotar proxies en Python

Configuración del entorno

Antes de empezar, asegurémonos de que disponemos de las herramientas necesarias. En primer lugar, descargar e instalar la última versión de Python, desde el sitio web oficial.

Para este tutorial, usaremos 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 abra el terminal y ejecute el siguiente comando para instalar el paquete necesario para enviar peticiones:

pip install solicitudes

¡Y eso es todo! Podemos empezar a codificar.

Proxificar una petición GET

Comencemos enviando una simple petición 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 ejecute el script usando el siguiente comando:

py index.py

Notarás que el resultado es tu dirección IP real y que no importa cuántas veces ejecutes el script, siempre mostrará el mismo resultado.

La idea de esta guia es mostrarte como puedes ocultar tu direccion IP real, y como obtener una IP diferente en cada ejecucion de script. Aquí es donde los proxies entran en escena. Los encontrarás bajo 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 proxy por una real, proporcionada por un servicio proxy gratuito, sólo para hacer pruebas. Sin embargo, hay que tener en cuenta que no son fiables y que solo deben utilizarse para realizar pruebas.

En cualquier caso, teniendo en cuenta que incluso los mejores proxies pueden ser a veces inestables, es una buena práctica manejar 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('No se puede conectar al proxy')

Si has conseguido encontrar un proxy gratuito que funcione, después de ejecutar el código deberías notar que el resultado ha cambiado, ya que ya no es tu dirección IP real.

Girar los proxies

Ahora vamos a ver cómo podemos usar múltiples proxies para anonimizar nuestras peticiones. Al mismo tiempo, manejaremos la velocidad de nuestro script. Enviaremos las peticiones de forma asíncrona, usando la librería "concurrent.futures".

En primer lugar, supongamos que tenemos la siguiente lista de proxies (o pool 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 ser codificado o leído de un archivo, a su elección. 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 pool de hilos con un máximo de 8 trabajadores, para ejecutar la función "scrape_job" (que pronto definiremos), que 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" será ahora asignada dinámicamente, según el proxy que enviemos como parámetro. El script puede extenderse aún más a múltiples URLs, con un valor de tiempo de espera específico para cada una.

La ejecución del script debería enviar múltiples peticiones GET al mismo tiempo, cuyo resultado serían diferentes direcciones IP (si los proxies gratuitos funcionan).

Ampliación

Cuando se trata de empezar a rotar proxies, hay algunas buenas prácticas clave que pueden ayudar a garantizar que la rotación de proxies sea lo más eficaz posible. Estos son algunos consejos a tener en cuenta:

Los proxies gratuitos no sirven

Aunque los servicios proxy gratuitos pueden parecer una opción rentable, a menudo no son fiables y pueden incluso poner en peligro sus esfuerzos de scraping. Considera invertir en un servicio proxy premium que ofrezca un mayor nivel de seguridad y fiabilidad.

Prueba antes de raspar

Antes de empezar a hacer scraping, es una buena idea probar la rotación del proxy para asegurarse de que funciona como es debido. Esto le ayudará a identificar y solucionar cualquier problema antes de que cause problemas en el futuro.

Utilizar la rotación del agente de usuario

Rotar su dirección IP es una forma eficaz de eludir las medidas contra el scraping, pero no es la única técnica en la que debería confiar. Combinar la rotación de IP con la rotación del agente de usuario, que cambia la firma del navegador, puede dificultar aún más que los sitios web detecten y bloqueen tu scraper.

Servicios proxy premium

No todos los servicios proxy son iguales, así 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 IP y ubicaciones, así como funciones como rotación automática de IP y navegación anónima.

Utilizar una API de web scraping

El uso de una API de raspado web puede ser una gran manera de simplificar el proceso de rotación de proxies, especialmente si usted es nuevo en el raspado web. Una buena API de scraping gestionará 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 proxy evita por completo los bloqueos, y su base de conocimientos ampliada permite aleatorizar los datos del navegador para que se parezca a un usuario real.

Sin embargo, si deseas seguir con tu propio scraper, o 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 disfruta de la rotación del proxy.

Conclusión

En resumen, saber cómo rotar proxies es una técnica esencial para el web scraping, y Python hace que sea fácil de implementar. Siguiendo los pasos descritos en esta guía, habrás aprendido desde cómo enviar una única solicitud hasta cómo acelerar el proceso de rotación de proxies.

Además, ha descubierto algunos consejos adicionales sobre la rotación de proxy cuando se trata de ampliar su proyecto.

Recuerde que una rotación eficaz del proxy puede aumentar en gran medida el éxito de sus proyectos de web scraping, y esta guía le ha proporcionado las herramientas y los conocimientos necesarios para hacerlo como un profesional. ¡Feliz scraping!

Acerca del autor
Raluca Penciuc, desarrolladora full-stack en 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.