Cómo Usar Proxies Con HTTPX

Aprende configuraciones de proxy HTTPX con ejemplos para proxies no autenticados, autenticados, rotativos y de respaldo.
7 min de lectura
How To Use Proxies With HTTPX blog image

Hoy, vamos a aprender cómo usar proxies con HTTPX. Un proxy se sitúa entre tu scraper y el sitio que intentas scrapear. Tu scraper hace una solicitud al servidor proxy para el sitio objetivo. El proxy luego obtiene el sitio objetivo y lo devuelve a tu scraper.

Cómo Usar Proxies No Autenticados

En resumen, todas nuestras solicitudes van a una proxy_url. Abajo hay un ejemplo usando un proxy no autenticado. Esto significa que no estamos usando un nombre de usuario o contraseña. Este ejemplo fue inspirado por su documentación.

import httpx

proxy_url = "http://localhost:8030"


with httpx.Client(proxy=proxy_url) as client:
    ip_info = client.get("https://geo.brdtest.com/mygeo.json")
    print(ip_info.text)

Cómo Usar Proxies Autenticados

Cuando un proxy requiere un nombre de usuario y contraseña, se le llama proxy “autenticado”. Estas credenciales se usan para autenticar tu cuenta y darte una conexión al proxy.

Con autenticación, nuestra proxy_url se ve así: http://<username>:<password>@<proxy_url>:<port_number>. En el ejemplo de abajo, usamos tanto nuestra zone como username para crear la parte de usuario de la cadena de autenticación.

Estamos usando proxies de centro de datos para nuestra conexión base.

import httpx

username = "your-username"
zone = "your-zone-name"
password = "your-password"

proxy_url = f"http://brd-customer-{username}-zone-{zone}:{password}@brd.superproxy.io:33335"

ip_info = httpx.get("https://geo.brdtest.com/mygeo.json", proxy=proxy_url)

print(ip_info.text)

El código de arriba es bastante simple. Esta es la base para cualquier tipo de proxy que quieras configurar.

  • Primero, creamos nuestras variables de configuración: username, zone y password.
  • Las usamos para crear nuestra proxy_url: f"http://brd-customer-{username}-zone-{zone}:{password}@brd.superproxy.io:33335".
  • Hacemos una solicitud a la API para obtener información general sobre nuestra conexión proxy.

Tu respuesta debería verse similar a esto.

{"country":"US","asn":{"asnum":20473,"org_name":"AS-VULTR"},"geo":{"city":"","region":"","region_name":"","postal_code":"","latitude":37.751,"longitude":-97.822,"tz":"America/Chicago"}}

Cómo Usar Proxies Rotativos

Cuando usamos proxies rotativos, creamos una lista de proxies y elegimos entre ellos aleatoriamente. En el código de abajo, creamos una lista de countries. Cuando hacemos una solicitud, usamos random.choice() para usar un país aleatorio de la lista. Nuestra proxy_url se formatea para ajustarse al país.

El ejemplo de abajo crea una pequeña lista de proxies rotativos.

import httpx
import asyncio
import random


countries = ["us", "gb", "au", "ca"]
username = "your-username"
proxy_url = "brd.superproxy.io:33335"

datacenter_zone = "your-zone"
datacenter_pass = "your-password"


for random_proxy in countries:
    print("----------connection info-------------")
    datacenter_proxy = f"http://brd-customer-{username}-zone-{datacenter_zone}-country-{random.choice(countries)}:{datacenter_pass}@{proxy_url}"

    ip_info = httpx.get("https://geo.brdtest.com/mygeo.json", proxy=datacenter_proxy)

    print(ip_info.text)

Este ejemplo realmente no es tan diferente del primero. Aquí están las diferencias clave.

  • Creamos un array de países: ["us", "gb", "au", "ca"].
  • En lugar de hacer una sola solicitud, hacemos varias. Cada vez que creamos una nueva solicitud, usamos random.choice(countries) para elegir un país aleatorio cada vez que creamos nuestra proxy_url.

Cómo Crear una Conexión Proxy de Respaldo

En los ejemplos de arriba, hemos usado solo proxies de centro de datos y gratuitos. Los proxies gratuitos no son muy confiables. Los proxies de centro de datos tienden a bloquearse con sitios más difíciles.

En este ejemplo, creamos una función llamada safe_get(). Cuando llamamos a esta función, primero intentamos obtener la url usando una conexión de centro de datos. Cuando esto falla, recurrimos a nuestra conexión residencial.

import httpx
from bs4 import BeautifulSoup
import asyncio


country = "us"
username = "your-username"
proxy_url = "brd.superproxy.io:33335"

datacenter_zone = "datacenter_proxy1"
datacenter_pass = "datacenter-password"

residential_zone = "residential_proxy1"
residential_pass = "residential-password"

cert_path = "/home/path/to/brightdata_proxy_ca/New SSL certifcate - MUST BE USED WITH PORT 33335/BrightData SSL certificate (port 33335).crt"


datacenter_proxy = f"http://brd-customer-{username}-zone-{datacenter_zone}-country-{country}:{datacenter_pass}@{proxy_url}"

residential_proxy = f"http://brd-customer-{username}-zone-{residential_zone}-country-{country}:{residential_pass}@{proxy_url}"

async def safe_get(url: str):
    async with httpx.AsyncClient(proxy=datacenter_proxy) as client:
        print("trying with datacenter")
        response = await client.get(url)
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, "html.parser")
            if not soup.select_one("form[action='/errors/validateCaptcha']"):
                print("response successful")
                return response
    print("response failed")
    async with httpx.AsyncClient(proxy=residential_proxy, verify=cert_path) as client:
        print("trying with residential")
        response = await client.get(url)
        print("response successful")
        return response

async def main():
    url = "https://www.amazon.com"
    response = await safe_get(url)
    with open("out.html", "w") as file:
        file.write(response.text)

asyncio.run(main())

Este ejemplo es un poco más complicado que los otros con los que hemos trabajado en este artículo.

  • Ahora tenemos dos conjuntos de variables de configuración, uno para nuestra conexión de centro de datos, y otro para nuestra conexión residencial.
  • Esta vez, usamos una sesión AsyncClient() para introducir algunas de las funcionalidades más avanzadas de HTTPX.
  • Primero, intentamos hacer nuestra solicitud con el datacenter_proxy.
  • Si no logramos obtener una respuesta adecuada, reintentamos la solicitud usando nuestro residential_proxy. Observa también la bandera verify en el código. Al usar nuestros proxies residenciales, necesitas descargar y usar nuestro certificado SSL.
  • Una vez que tenemos una respuesta sólida, escribimos la página en un archivo HTML. Podemos abrir esta página en nuestro navegador y ver qué fue lo que el proxy realmente accedió y nos envió de vuelta.

Si pruebas el código de arriba, tu salida y el archivo HTML resultante deberían verse muy parecidos a esto.

trying with datacenter
response failed
trying with residential
response successful
Screenshot of the Amazon homepage

Cómo Ayudan los Productos de Bright Data

Como probablemente has notado a lo largo de este artículo, nuestros proxies de centro de datos son muy económicos y nuestros proxies residenciales proporcionan un excelente respaldo para cuando los proxies de centro de datos no funcionan. También proporcionamos varias otras herramientas para ayudarte con tus necesidades de recopilación de datos.

  • Web Unlocker: Supera incluso los anti-bots más difíciles. Web Unlocker reconoce y resuelve automáticamente cualquier CAPTCHA en la página. Una vez que pasa los anti-bots, te envía de vuelta la página web.
  • Scraping Browser: Este producto tiene aún más funciones. El navegador de scraping en realidad te permite controlar un navegador remoto con integración de proxy y un resolvedor automático de CAPTCHA.
  • Web Scraper APIs: Con estas APIs, nosotros hacemos el scraping por ti. Todo lo que necesitas hacer es llamar a la API y parsear los datos JSON que recibes en la respuesta.
  • Conjuntos de datos: Explora nuestro mercado de conjuntos de datos para encontrar cientos de conjuntos de datos pre-recopilados, o solicita/crea uno personalizado. Puedes elegir una tasa de actualización y filtrar solo los puntos de datos que necesitas.

Conclusión

Cuando combinas HTTPX con nuestros proxies obtienes una forma privada, eficiente y confiable de hacer scraping web. Si quieres rotar proxies, es tan simple como usar la librería random incorporada de Python. Con una combinación de proxies de centro de datos y residenciales, puedes construir una conexión redundante que supere la mayoría de los sistemas de bloqueo.

Como aprendiste, Bright Data ofrece el paquete completo para tus proyectos de scraping web. ¡Empieza a usar los proxies de Bright Data hoy!