Heute lernen wir, wie man Proxys mit HTTPX verwendet. Ein Proxy sitzt zwischen Ihrem Scraper und der Website, die Sie scrapen möchten. Ihr Scraper sendet eine Anfrage an den Proxy-Server für die Zielseite. Der Proxy ruft dann die Zielseite ab und gibt sie an Ihren Scraper zurück.
Wie man nicht-authentifizierte Proxys verwendet
Zusammenfassend gehen alle unsere Anfragen an eine proxy_url. Unten sehen Sie ein Beispiel mit einem nicht-authentifizierten Proxy. Das bedeutet, dass wir keinen Benutzernamen oder Passwort verwenden. Dieses Beispiel wurde von der Dokumentation inspiriert.
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)
Wie man authentifizierte Proxys verwendet
Wenn ein Proxy einen Benutzernamen und ein Passwort erfordert, nennt man ihn einen “authentifizierten” Proxy. Diese Anmeldedaten werden verwendet, um Ihr Konto zu authentifizieren und Ihnen eine Verbindung zum Proxy zu ermöglichen.
Mit Authentifizierung sieht unsere proxy_url so aus: http://<username>:<password>@<proxy_url>:<port_number>. Im Beispiel unten verwenden wir sowohl unsere zone als auch unseren username, um den Benutzerteil des Authentifizierungsstrings zu erstellen.
Wir verwenden Datacenter-Proxys für unsere Basisverbindung.
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)
Der obige Code ist recht einfach. Dies ist die Grundlage für jede Art von Proxy, den Sie einrichten möchten.
- Zuerst erstellen wir unsere Konfigurationsvariablen:
username,zoneundpassword. - Wir verwenden diese, um unsere
proxy_urlzu erstellen:f"http://brd-customer-{username}-zone-{zone}:{password}@brd.superproxy.io:33335". - Wir senden eine Anfrage an die API, um allgemeine Informationen über unsere Proxy-Verbindung zu erhalten.
Ihre Antwort sollte ähnlich wie diese aussehen.
{"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"}}
Wie man rotierende Proxys verwendet
Wenn wir rotierende Proxys verwenden, erstellen wir eine Liste von Proxys und wählen zufällig aus ihnen aus. Im Code unten erstellen wir eine Liste von countries. Wenn wir eine Anfrage stellen, verwenden wir random.choice(), um ein zufälliges Land aus der Liste zu verwenden. Unsere proxy_url wird entsprechend dem Land formatiert.
Das Beispiel unten erstellt eine kleine Liste von rotierenden Proxys.
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)
Dieses Beispiel unterscheidet sich eigentlich nicht sehr von Ihrem ersten. Hier sind die wichtigsten Unterschiede.
- Wir erstellen ein Array von Ländern:
["us", "gb", "au", "ca"]. - Statt eine einzelne Anfrage zu stellen, stellen wir mehrere. Jedes Mal, wenn wir eine neue Anfrage erstellen, verwenden wir
random.choice(countries), um bei jeder Erstellung unsererproxy_urlein zufälliges Land zu wählen.
Wie man eine Fallback-Proxy-Verbindung erstellt
In den obigen Beispielen haben wir nur Datacenter- und kostenlose Proxys verwendet. Kostenlose Proxys sind nicht sehr zuverlässig. Datacenter-Proxys werden bei schwierigeren Websites eher blockiert.
In diesem Beispiel erstellen wir eine Funktion namens safe_get(). Wenn wir diese Funktion aufrufen, versuchen wir zuerst, die URL über eine Datacenter-Verbindung abzurufen. Wenn dies fehlschlägt, greifen wir zurück auf unsere Residential-Verbindung.
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())
Dieses Beispiel ist etwas komplizierter als die anderen, mit denen wir uns in diesem Artikel beschäftigt haben.
- Wir haben jetzt zwei Sätze von Konfigurationsvariablen, einen für unsere Datacenter-Verbindung und einen für unsere Residential-Verbindung.
- Diesmal verwenden wir eine
AsyncClient()-Sitzung, um einige der fortgeschritteneren Funktionen von HTTPX einzuführen. - Zuerst versuchen wir, unsere Anfrage mit dem
datacenter_proxyzu stellen. - Wenn wir keine ordnungsgemäße Antwort erhalten, wiederholen wir die Anfrage mit unserem
residential_proxy. Beachten Sie auch dasverify-Flag im Code. Bei der Verwendung unserer Residential-Proxys müssen Sie unser SSL-Zertifikat herunterladen und verwenden. - Sobald wir eine solide Antwort erhalten haben, schreiben wir die Seite in eine HTML-Datei. Wir können diese Seite in unserem Browser öffnen und sehen, worauf der Proxy tatsächlich zugegriffen und was er uns zurückgesendet hat.
Wenn Sie den obigen Code ausprobieren, sollten Ihre Ausgabe und die resultierende HTML-Datei ungefähr so aussehen.
trying with datacenter
response failed
trying with residential
response successful

Wie Bright Data-Produkte helfen
Wie Sie wahrscheinlich im Laufe dieses Artikels bemerkt haben, sind unsere Datacenter-Proxys sehr erschwinglich, und unsere Residential-Proxys bieten einen ausgezeichneten Fallback, wenn Datacenter-Proxys nicht funktionieren. Wir bieten auch verschiedene andere Tools an, um Ihnen bei Ihren Datenerfassungsbedürfnissen zu helfen.
- Web Unlocker: Kommen Sie selbst an den schwierigsten Anti-Bot-Systemen vorbei. Web Unlocker erkennt und löst automatisch alle CAPTCHAs auf der Seite. Sobald er durch die Anti-Bots ist, sendet er Ihnen die Webseite zurück.
- Scraping Browser: Dieses Produkt hat noch mehr Funktionen. Scraping Browser ermöglicht es Ihnen tatsächlich, einen entfernten Browser mit Proxy-Integration und einem automatisierten CAPTCHA-Löser zu steuern.
- Web Scraper APIs: Mit diesen APIs übernehmen wir das Scraping für Sie. Alles, was Sie tun müssen, ist die API aufzurufen und die JSON-Daten zu parsen, die Sie in der Antwort erhalten.
- Datensätze: Erkunden Sie unseren Datensatz-Marktplatz, um Hunderte von vorgesammelten Datensätzen zu finden, oder fordern Sie einen benutzerdefinierten an. Sie können eine Aktualisierungsrate wählen und nur die Datenpunkte filtern, die Sie benötigen.
Fazit
Wenn Sie HTTPX mit unseren Proxys kombinieren, erhalten Sie eine private, effiziente und zuverlässige Methode, um das Web zu scrapen. Wenn Sie Proxys rotieren möchten, ist es so einfach wie die Verwendung von Pythons integrierter random-Bibliothek. Mit einer Kombination aus Datacenter- und Residential-Proxys können Sie eine redundante Verbindung aufbauen, die die meisten Blockierungssysteme umgeht.
Wie Sie gelernt haben, bietet Bright Data das komplette Paket für Ihre Web-Scraping-Projekte. Beginnen Sie noch heute mit den Proxys von Bright Data!