El web scraping es una herramienta potente que te permite extraer información valiosa de sitios web. Sin embargo, también puede suponer una carga para los servidores de los sitios web que estás rastreando, por lo que muchos sitios web bloquean las direcciones IP que realizan demasiadas solicitudes. Para evitarlo, puedes utilizar proxies para realizar las solicitudes. En este artículo, te mostraré cómo utilizar Python con proxies y cómo rotar las direcciones IP de los proxies para evitar que te bloqueen.
Introducción
Configuración
Antes de empezar, necesitarás cumplir los siguientes requisitos previos:
✅ Python instalado
✅ Cierta experiencia con Python
✅ Biblioteca Python requests también instalada
✅ Una lista de direcciones IP y puertos de proxy
Para instalar Python, tendrás que descargar el instalador de Python desde la página web oficial de Python: https://www.python.org/downloads/
Puedes elegir la última versión de Python 3. Se recomienda utilizar la última versión de Python para disponer de las últimas funciones y actualizaciones de seguridad.
Una vez completada la descarga, ejecuta el instalador y sigue las instrucciones para instalar Python en tu ordenador. Durante el proceso de instalación, asegúrate de marcar la opción para añadir Python a la ruta PATH de tu sistema, lo que te permitirá ejecutar Python desde la línea de comandos.
Una vez completada la instalación, puedes comprobar que Python se ha instalado correctamente abriendo un símbolo del sistema o un terminal y ejecutando el comando `python --version`. Esto debería mostrar la versión de Python que has instalado.
Puedes comprobar si el paquete `python-requests` está instalado abriendo el terminal y ejecutando el siguiente comando:
$ pip freeze
`pip` es un gestor de paquetes que debería venir incluido en las versiones más recientes de Python. Si por cualquier motivo necesitas instalar `pip` por separado, puedes seguir las instrucciones de esta guía.
`pip freeze` mostrará todos los paquetes de Python que tienes instalados actualmente y sus versiones. Comprueba si el módulo `requests` aparece en esa lista. Si no es así, instálalo ejecutando el siguiente comando:
$ pip install requests
Configuración de los proxies
En esta sección explicaré cómo configurar proxies con `python-requests`. Para empezar, necesitamos un proxy que funcione y la URL a la que queremos enviar la solicitud.
Uso básico
import requests
proxies = {
'http': 'http://proxy_ip:proxy_port',
'https': 'http://secure_proxy_ip:proxy_port',
}
res = requests.get('https://httpbin.org/get', proxies=proxies)Si no dispones de ningún proxy privado que puedas utilizar para probar este código, puedes encontrar un proxy público gratuito en la lista de freeproxylists.net. Ten en cuenta que los proxies de ese sitio no están pensados para su uso en entornos de producción y pueden no ser fiables.
El diccionario `proxies` debe tener exactamente la misma estructura que se muestra en el ejemplo de código. Debes proporcionar un proxy para las conexiones HTTP y otro para las conexiones HTTPS. Los proxies pueden ser diferentes o no. Puedes utilizar el mismo proxy para varios protocolos.
Observe también que he utilizado el esquema HTTP en la URL del proxy para ambas conexiones. No todos los proxies tienen un certificado SSL. La conexión al proxy se establecerá mediante HTTP en ambos casos.
Para autenticarse en un proxy, puede utilizar esta sintaxis:
http://user:pass@working-proxy:port
Variables de entorno
Si no tiene previsto utilizar varios conjuntos de proxies, puede exportarlos como variables de entorno.
Así es como se exportan las variables de entorno en el shell de Linux
$ export HTTP_PROXY='http://proxy_ip:proxy_port'$ export HTTP_PROXYS='http://secure_proxy_ip:proxy_port'
Para ver el entorno, simplemente ejecuta
$ env
Así es como se exportan las variables de entorno en PowerShell
>_ $Env:HTTP_PROXY='http://proxy_ip:proxy_port'>_ $Env:HTTP_PROXYS='http://secure_proxy_ip:proxy_port'
Para ver el entorno, simplemente ejecuta
>_ Get-ChildItem -Path Env:
Así es como se exportan las variables de entorno en el símbolo del sistema
\> set HTTP_PROXY='http://proxy_ip:proxy_port'\> set HTTP_PROXYS='http://secure_proxy_ip:proxy_port'
Para comprobar el entorno, solo tienes que ejecutar
\> set
De esta forma, no es necesario definir ningún proxy en el código. Basta con realizar la solicitud y funcionará.
¿Cómo leer la respuesta?
Puedes leer tus datos de muchas formas, pero en la mayoría de los casos querrás leerlos como texto sin formato o como una cadena codificada en JSON.
Texto sin formato:
response = requests.get(url)
text_resp = response.text
JSON: para respuestas con formato JSON, el paquete requests proporciona un método integrado.
response = requests.get(url)json_resp = response.json()
Sesiones de proxy
Es posible que también quieras extraer datos de sitios web que utilizan sesiones. En este caso, debes crear un objeto de sesión. Primero, crea una variable llamada `session` y asígnala al método `Session()` de requests. Ahora debes asignar los proxies al atributo `.proxies` de la sesión. A continuación, envía tu solicitud utilizando el objeto `session` ya creado. Esta vez solo tienes que pasar la URL como argumento.
import requests
session = requests.Session()
session.proxies = {
'http': 'http://proxy_ip:proxy_port',
'https': 'http://secure_proxy_ip:proxy_port',
}
res = session.get('https://httpbin.org/get')Asegúrate de sustituir `proxy_ip` y `proxy_port` por la IP y el puerto reales de tu proxy.
Cómo rotar las IP de los proxies
Para evitar que los sitios web te bloqueen, es importante rotar las direcciones IP de los proxies. Una forma de hacerlo es crear una lista de direcciones IP y puertos de proxy y seleccionar proxies al azar al realizar las solicitudes.
Aquí tienes un ejemplo:
def proxy_request(url, **kwargs):
while True:
try:
proxy = random.randint(0, len(ip_addresses) - 1)
proxies = {
'http': ip_addresses(proxy),
'https': ip_addresses(proxy)
}
response = requests.get(url, proxies=proxies, timeout=5, **kwargs)
print(f"Currently using proxy: { proxy['http'] }")
break
except:
print("Error encoutered, changing the proxy...")
return response
print(proxy_request('https://httpbin.org/get'))Contrata a un profesional
Aunque es posible gestionar tus propios proxies con Python, se trata de un proceso que requiere mucho tiempo y puede suponer una gran inversión de tiempo y dinero conseguir un buen conjunto de proxies. Para ahorrar tiempo y dinero, puedes utilizar una herramienta de scraping profesional. WebScrapingAPI cuenta con funciones integradas de gestión y rotación de proxies. Contamos con un conjunto de proxies verificados y de alta calidad, que son más fiables y pueden ahorrarte tiempo y dinero a largo plazo.
También disponemos de un modo proxy que puedes probar de forma gratuita. Para obtener una clave API gratuita, solo tienes que crear una cuenta y comenzar la prueba de WebScrapingAPI. Este es un ejemplo de código sobre cómo utilizar nuestro modo proxy:
import requests
def get_params(object):
params = ''
for key,value in object.items():
if list(object).index(key) < len(object) - 1:
params += f"{key}={value}."
else:
params += f"{key}={value}"
return params
API_KEY = '<YOUR_API_KEY>'
TARGET_URL = 'http://httpbin.org/get'
PARAMETERS = {
"proxy_type":"datacenter",
"device":"desktop"
}
PROXY = {
"http": f"http://webscrapingapi.{ get_params(PARAMETERS) }:{ API_KEY }@proxy.webscrapingapi.com:80",
"https": f"https://webscrapingapi.{ get_params(PARAMETERS) }:{ API_KEY }@proxy.webscrapingapi.com:8000"
}
response = requests.get(
url=TARGET_URL,
proxies=PROXY,
verify=False
)
print(response.text)Ten en cuenta que, si deseas conectarte al modo proxy a través de https, tu código debe estar configurado para no verificar los certificados SSL. En este caso, sería `verify=False`, ya que estás trabajando con Python Requests.
Conclusión
El uso de proxies es una forma eficaz de evitar ser bloqueado durante el web scraping. Al rotar las IP de los proxies y utilizar un conjunto de proxies, puedes reducir las posibilidades de ser bloqueado y aumentar las posibilidades de éxito. Sin embargo, gestionar tus propios proxies puede ser una molestia y puede llevar mucho tiempo y dinero conseguir un buen conjunto de proxies.
Al suscribirte a un servicio de proxies premium, como WebScrapingAPI, tendrás acceso a una variedad de funciones, como la rotación de IP y la posibilidad de cambiar entre proxies de centro de datos y residenciales.
Esperamos que este artículo te haya ayudado a comprender mejor cómo utilizar un proxy con HttpClient y cómo puede ayudarte con tus necesidades de scraping. Regístrate para obtener nuestra prueba gratuita de 14 días y prueba nuestro servicio para conocer todas sus características y funcionalidades.




