Comment Utiliser des Proxys Avec HTTPX

Découvrez les configurations de proxy HTTPX avec des exemples pour les proxys non authentifiés, authentifiés, rotatifs et de secours.
7 min de lecture
How To Use Proxies With HTTPX blog image

Aujourd’hui, nous allons apprendre à utiliser des proxys avec HTTPX. Un proxy se situe entre votre scraper et le site que vous essayez de scraper. Votre scraper fait une requête au serveur proxy pour le site cible. Le proxy récupère ensuite le site cible et le renvoie à votre scraper.

Comment Utiliser des Proxys Non Authentifiés

En résumé, toutes nos requêtes vont vers une proxy_url. Voici un exemple utilisant un proxy non authentifié. Cela signifie que nous n’utilisons pas de nom d’utilisateur ni 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 des Proxys Authentifiés

Lorsqu’un proxy nécessite un nom d’utilisateur et un mot de passe, on l’appelle un proxy « authentifié ». Ces identifiants servent à authentifier votre compte et vous donnent une connexion au proxy.

Avec l’authentification, notre proxy_url ressemble à ceci : http://<username>:<password>@<proxy_url>:<port_number>. Dans l’exemple ci-dessous, nous utilisons à la fois notre zone et notre username 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 pour tout type de proxy que vous voulez configurer.

  • D’abord, nous créons nos variables de configuration : username, zone et password.
  • Nous les utilisons pour créer notre proxy_url : f"http://brd-customer-{username}-zone-{zone}:{password}@brd.superproxy.io:33335".
  • Nous faisons une requête à l’API pour obtenir des informations générales sur notre connexion proxy.

Votre réponse 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 des Proxys Rotatifs

Lorsque nous utilisons des proxys rotatifs, nous créons une liste de proxys et en choisissons un au hasard. Dans le code ci-dessous, nous créons une liste de countries. Lorsque nous faisons une requête, nous utilisons random.choice() pour choisir un pays aléatoire dans la liste. Notre proxy_url est formatée pour correspondre au pays.

L’exemple ci-dessous crée une petite liste de proxys 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 vraiment 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 requête, 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 Secours

Dans les exemples ci-dessus, nous avons utilisé uniquement des proxys de centre de données et gratuits. Les proxys gratuits ne sont pas très fiables. Les proxys de centre de données ont tendance à être bloqués sur 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’url en utilisant une connexion de centre de données. Lorsque cela échoue, nous basculons vers notre connexion résidentielle.

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 vus dans cet article.

  • Nous avons maintenant deux ensembles de variables de configuration, l’un pour notre connexion de centre de données, et l’autre pour notre connexion résidentielle.
  • Cette fois, nous utilisons une session AsyncClient() pour introduire certaines fonctionnalités plus avancées de HTTPX.
  • D’abord, nous tentons de faire notre requête avec le datacenter_proxy.
  • Si nous n’obtenons pas de réponse correcte, nous réessayons la requête avec notre residential_proxy. Notez également le drapeau verify dans le code. Lors de l’utilisation de nos proxys résidentiels, vous devez télécharger et utiliser notre certificat SSL.
  • Une fois que nous avons une réponse solide, nous écrivons la page dans un fichier HTML. Nous pouvons ouvrir cette page dans notre navigateur et voir ce que le proxy a réellement accédé et renvoyé.

Si vous essayez le code ci-dessus, votre sortie et le fichier HTML résultant devraient ressembler à ceci.

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

Comment les Produits Bright Data Peuvent Vous Aider

Comme vous l’avez probablement remarqué tout au long de cet article, nos proxys de centre de données sont très abordables et nos proxys résidentiels fournissent une excellente solution de secours lorsque les proxys de centre de données ne fonctionnent pas. Nous proposons également divers autres outils pour vous aider dans vos besoins de collecte de données.

  • Web Unlocker : Contournez même les anti-bots les plus difficiles. Web Unlocker reconnaît et résout automatiquement tous les CAPTCHA sur la page. Une fois les anti-bots franchis, il vous renvoie la page web.
  • Navigateur de scraping : Ce produit offre encore plus de fonctionnalités. Le Navigateur de scraping vous permet de contrôler un navigateur distant avec intégration de proxy et un résolveur de CAPTCHA automatisé.
  • API Web Scraper : Avec ces API, nous faisons le scraping pour vous. Il vous suffit d’appeler l’API et d’analyser les données JSON que vous recevez dans la réponse.
  • Jeux de données : Explorez notre marketplace de jeux de données pour trouver des centaines de jeux de données précollectés, ou demandez/créez-en un sur mesure. Vous pouvez choisir une fréquence d’actualisation et filtrer uniquement les points de données dont vous avez besoin.

Conclusion

Lorsque vous combinez HTTPX avec nos proxys, vous obtenez un moyen privé, efficace et fiable de scraper le web. Si vous voulez faire tourner des proxys, c’est aussi simple que d’utiliser la bibliothèque intégrée random de Python. Avec une combinaison de proxys de centre de données et résidentiels, vous pouvez construire une connexion redondante qui contourne la plupart des systèmes de blocage.

Comme vous l’avez appris, Bright Data offre le package complet pour vos projets de scraping web. Commencez à utiliser les proxys de Bright Data dès aujourd’hui !