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> ;
. 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
etmot 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 notreproxy_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
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