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

Raluca Penciuc el 03 Feb 2023

blog-image

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

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

En este artículo, exploraremos cómo rotar proxies en Python, incluyendo la instalación de los prerrequisitos necesarios, el uso de un único proxy, y el aumento de la velocidad mientras se rotan los proxies. También discutiremos algunos consejos sobre cómo sacar el máximo provecho de sus esfuerzos de rotación de proxy.

Al final de esta guía, serás capaz de rotar proxies como un profesional y asegurar que tus esfuerzos de web scraping permanezcan bajo el radar. Empecemos.

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 pudo conectar con el 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!

Noticias y actualidad

Manténgase al día de las últimas guías y noticias sobre raspado web suscribiéndose a nuestro boletín.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artículos relacionados

miniatura
Ciencia del Web ScrapingScrapy vs. Selenium: Guía completa para elegir la mejor herramienta de Web Scraping

Explore la comparación en profundidad entre Scrapy y Selenium para el scraping web. Desde la adquisición de datos a gran escala hasta la gestión de contenido dinámico, descubra los pros, los contras y las características únicas de cada uno. Aprenda a elegir el mejor marco de trabajo en función de las necesidades y la escala de su proyecto.

WebscrapingAPI
avatar de autor
WebscrapingAPI
14 min leer
miniatura
GuíasDesbloquea sitios web y protege tu identidad con proxies y Axios Node.js

Aprende a usar proxies con Axios y Node.js para un raspado web eficiente. Consejos, ejemplos de código y los beneficios de usar WebScrapingAPI incluidos.

Suciu Dan
avatar de autor
Suciu Dan
7 min leer
miniatura
GuíasCómo construir un rascador y descargar un archivo con Puppeteer

Descubra 3 maneras de descargar archivos con Puppeteer y construya un raspador web que haga exactamente eso.

Mihnea-Octavian Manolache
avatar de autor
Mihnea-Octavian Manolache
8 min leer