Comment utiliser les proxies avec HTTPX

Apprenez comment configurer vos proxies HTTPX avec des exemples de proxies sans authentification, avec authentification, rotatifs et de repli.
1 min de lecture
How To Use Proxies With HTTPX blog image

Aujourd’hui, nous allons apprendre à utiliser des proxies avec HTTPX. Un proxy s’interpose entre votre scraper et le site que vous essayez de scraper. Votre scraper adresse une demande au serveur proxy du site cible. Le proxy récupère ensuite le site cible et le renvoie à votre scraper.

Comment utiliser les proxys non authentifiés

En résumé, toutes nos requêtes sont dirigées vers un proxy_url . Voici un exemple utilisant un proxy non authentifié. Cela signifie que nous n’utilisons pas de nom d’utilisateur ou de mot de passe. Cet exemple s’inspire de leur documentation .

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)

Comment utiliser les proxy authentifiés

Lorsqu’un proxy demande un identifiant et un mot de passe, on parle de proxy « avec authentification ». Ces informations d’identification sont utilisées pour authentifier votre compte et vous permettre de vous connecter au proxy.

Avec l’authentification, notre proxy_url ressemble à ceci : http://<username>:<password>@<proxy_url>:<port_number&gt ;. Dans l’exemple ci-dessous, nous utilisons à la fois notre zone et notre nom d’utilisateur pour créer la partie utilisateur de la chaîne d’authentification.

Nous utilisons des proxys de centre de données pour notre connexion de 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)

Le code ci-dessus est assez simple. C’est la base de tout type de proxy que vous souhaitez mettre en place.

  • Tout d’abord, nous créons nos variables de configuration : nom d'utilisateur, zone et mot de passe.
  • Nous les utilisons pour créer notre proxy_url : f"http://brd-customer-{identifiant}-zone-{zone}:{mot_de_passe}@brd.superproxy.io:33335".
  • Nous faisons une demande à l’API pour obtenir des informations générales sur notre connexion proxy.

La réponse que vous recevrez devrait ressembler à ceci.

{"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"}}

Comment utiliser les serveurs proxy rotatifs

Lorsque nous utilisons des proxies rotatifs, nous créons une liste de proxies et en choisissons un au hasard. Dans le code ci-dessous, nous créons une liste de pays . Lorsque nous créons une requête, nous utilisons random.choice() pour utiliser un pays aléatoire de la liste. Notre proxy_url est formaté pour s’adapter au pays.

L’exemple ci-dessous crée une petite liste de proxies rotatifs.

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)

Cet exemple n’est pas très différent du premier. Voici les principales différences.

  • Nous créons un tableau de pays : ["us", "gb", "au", "ca"].
  • Au lieu de faire une seule demande, nous en faisons plusieurs. Chaque fois que nous créons une nouvelle requête, nous utilisons random.choice(countries) pour choisir un pays aléatoire à chaque fois que nous créons notre proxy_url.

Comment créer une connexion proxy de repli

Dans les exemples ci-dessus, nous n’avons utilisé que les proxies du centre de données et les proxies gratuits. Les proxys gratuits ne sont pas très fiables. Les proxys des centres de données ont tendance à être bloqués par des sites plus difficiles.

Dans cet exemple, nous créons une fonction appelée safe_get(). Lorsque nous appelons cette fonction, nous essayons d’abord d’obtenir l’adresse URL à l’aide d’une connexion à un proxy de centre de données. En cas d’échec, nous nous replions sur notre connexion à un proxy résidentiel.

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())

Cet exemple est un peu plus compliqué que les autres que nous avons traités dans cet article.

  • Nous avons maintenant deux ensembles de variables de configuration, un pour notre connexion au centre de données et un pour notre connexion résidentielle.
  • Cette fois, nous utilisons une session AsyncClient() pour présenter certaines des fonctionnalités les plus avancées de HTTPX.
  • Nous tentons d’abord d’effectuer notre requête avec datacenter_proxy (le proxy de centre de données).
  • Si nous n’obtenons pas de réponse appropriée, nous réessayons la demande en utilisant notre residential_proxy. Notez également le drapeau « verify » dans le code. Lorsque vous utilisez nos proxies résidentiels, vous devez télécharger et utiliser notre certificat SSL.
  • Une fois que nous avons obtenu une réponse solide, nous écrivons la page dans un fichier HTML. Nous pouvons ouvrir cette page dans notre navigateur et voir ce à quoi le proxy a accédé et ce qu’il nous a renvoyé.

Si vous essayez le code ci-dessus, votre résultat et le fichier HTML qui en découle devraient ressembler à ceci.

trying with datacenter
response failed
trying with residential
response successful
Capture d'écran de la page d'accueil d'Amazon

Comment les produits Bright Data aident

Comme vous l’avez probablement remarqué tout au long de cet article, nos proxies de centre de données sont très abordables et nos proxies résidentiels constituent une excellente solution de repli lorsque les proxies de centre de données ne fonctionnent pas. Nous fournissons également d’autres outils pour vous aider à collecter des données.

  • Web Unlocker: Passez même les anti-bots les plus difficiles. Web Unlocker reconnaît et résout automatiquement les CAPTCHA présents sur la page. Une fois qu’il a passé les protections anti-bots, il vous renvoie la page web.
  • Scraping Browser: Ce produit a encore plus de fonctionnalités. Scraping Browser vous permet en fait de contrôler un navigateur distant avec l’intégration d’un proxy et un résolveur automatique de CAPTCHA.
  • Web Scraper APIs: Avec ces APIs, nous faisons le scraping pour vous. Il vous suffit alors d’appeler l’API et d’analyser les données JSON que vous recevez dans la réponse.
  • Datasets: Explorez notre marché de datasets pour trouver des centaines de datasets pré-collectés, ou demandez/construisez un dataset personnalisé. Vous pouvez choisir un taux de rafraîchissement et filtrer uniquement les points de données dont vous avez besoin.

Conclusion

Lorsque vous combinez HTTPX avec nos proxies, vous obtenez un moyen privé, efficace et fiable de gratter le web. Si vous voulez alterner entre les différents proxies, sachez qu’il suffit d’utiliser la bibliothèque random (aléatoire) intégrée de Python. En combinant des proxys de centre de données et des proxys résidentiels, vous pouvez établir une connexion redondante qui passe la plupart des systèmes de blocage.

Comme vous l’avez appris, Bright Data propose une offre complète pour vos projets de scraping web. Commencez votre essai gratuit avec les proxies de Bright Data dès aujourd’hui !

Aucune carte de crédit requise