Heute lernen wir, wie man Proxys mit HTTPX verwendet. Ein Proxy fungiert als Schnittstelle zwischen Ihrem Scraper und der zu scrappenden Website. Ihr Scraper stellt eine Anfrage an den Proxyserver für die Zielsite. Der Proxy ruft dann die Zielsite ab und leitet sie an Ihren Scraper zurück.
Verwendung nicht authentifizierter Proxys
Kurz gesagt, all unsere Anfragen laufen über eine proxy_url
. Nachfolgend sehen Sie ein Beispiel für die Verwendung eines nicht authentifizierten Proxys. Das bedeutet, dass wir weder einen Benutzernamen noch ein Passwort verwenden. Dieses Beispiel wurde von deren 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)
Verwendung authentifizierter Proxys
Erfordert ein Proxy einen Benutzernamen und ein Passwort, wird er als „authentifizierter“ Proxy bezeichnet. Diese Zugangsdaten dienen zur Authentifizierung Ihres Kontos und der Verbindung zum Proxy.
Bei Authentifizierung sieht unsere proxy_url
wie folgt aus: http://<username>:<password>@<proxy_url>:<port_number>
. Im folgenden Beispiel nutzen wir sowohl unsere Zone
als auch unseren Benutzernamen
, um den Benutzerteil der Zeichenkette zur Authentifizierung zu erstellen.
Wir verwenden die Rechenzentrums-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 relativ einfach. Er bildet die Grundlage für jede Art von Proxy, die Sie einrichten möchten.
- Zunächst erstellen wir unsere Konfigurationsvariablen:
Benutzername
,Zone
undPasswort
. - Anhand dieser Variablen erstellen wir unsere
proxy_url
:f"http://brd-customer-{username}-zone-{zone}:{password}@brd.superproxy.io:33335"
. - Wir stellen nun bei der API eine Anfrage, um allgemeine Informationen über unsere Proxy-Verbindung zu erhalten.
Ihre Antwort sollte wie folgt 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"}}
Verwendung von rotierende Proxys
Beim Einsatz rotierender Proxys erstellen wir eine Liste von Proxys und wählen diese nach dem Zufallsprinzip aus. Im nachfolgenden Code erstellen wir eine Liste von Ländern
. Bei Anfragen verwenden wir random.choice()
, um ein zufälliges Land aus der Liste zu wählen. Unsere proxy_url
wird entsprechend dem jeweiligen Land formatiert.
Das Beispiel unten erstellt eine kleine Liste mit 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 kaum von Ihrem ersten. Hier die wichtigsten Unterschiede.
- Wir erstellen ein Array von Ländern:
[„us“, „gb“, „au“, „ca“]
. - Anstatt eine einzelne Anfrage zu stellen, stellen wir mehrere Anfragen. Bei jeder neuen Anfrage verwenden wir
random.choice(countries)
, um jedes Mal, wenn wir unsereproxy_url
erstellen, ein zufälliges Land auszuwählen.
Erstellung einer Fallback-Proxy-Verbindung
In den obigen Beispielen haben wir nur Rechenzentrums- und kostenlose Proxys verwendet. Kostenlose Proxys sind nicht besonders zuverlässig. Rechenzentrums-Proxys neigen dazu, bei schwierigeren Websites blockiert zu werden.
Im vorliegenden Beispiel erzeugen wir eine Funktion namens safe_get()
. Bei Aufruf dieser Funktion versuchen wir zunächst, die URL über eine Verbindung zum Rechenzentrum zu erhalten. Schlägt dies fehl, greifen wir auf unsere private Verbindung zurück.
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 ein wenig komplizierter als die anderen in diesem Artikel behandelten Beispiele.
- Jetzt haben wir zwei Sätze an Konfigurationsvariablen, einen für die Verbindung zum Rechenzentrum und einen für die Verbindung zum Wohnort.
- Dieses Mal verwenden wir eine
AsyncClient()
-Session, um einige der erweiterten Funktionen von HTTPX einzuführen. - Wir beginnen damit, unsere Anfrage über den
datacenter_proxy
zu stellen. - Falls wir keine angemessene Antwort erhalten, versuchen wir die Anfrage mit unserem
residential_proxy
erneut zu stellen. Beachten Sie auch dasverify
-Flag im Code. Für die Verwendung unserer Privatanwender-Proxys müssen Sie unser SSL-Zertifikat herunterladen und nutzen. - Sobald wir eine zuverlässige Antwort erhalten haben, schreiben wir die Seite in eine HTML-Datei. Wir können diese Seite nun in unserem Browser öffnen und sehen, worauf der Proxy tatsächlich zugegriffen und was er an uns zurückgesendet hat.
Wenn Sie den obigen Code ausführen, sollten Ihre Ausgabe und die resultierende HTML-Datei in etwa so aussehen.
trying with datacenter
response failed
trying with residential
response successful
Was Produkte von Bright Data leisten können
Wie Sie vermutlich schon bemerkt haben, sind unsere Proxys für Rechenzentren sehr erschwinglich und unsere Proxys für Privatanwender bieten eine hervorragende Fallback-Lösung, sollten die Proxys für Rechenzentren nicht funktionieren. Wir bieten zudem verschiedene andere Tools zur Unterstützung Ihrer Datenerfassung an.
- Web-Unlocker: Überlisten Sie selbst die anspruchsvollsten Anti-Bots. Ein Web-Unlocker erkennt und löst automatisch sämtliche CAPTCHAs auf der Seite. Sobald die Anti-Bots überwunden sind, sendet er Ihnen die Website zurück.
- Scraping-Browser: Dieses Produkt umfasst noch mehr Funktionen. Der Scraping Browser erlaubt es Ihnen, einen Remote-Browser mit Proxy-Integration und einem automatischen 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, die Sie in der Antwort erhalten, zu parsen.
- Datensätze: Erkunden Sie unseren Marktplatz mit Hunderten von bereits gesammelten Datensätzen, oder fordern bzw. erstellen Sie einen eigenen Datensatz. Dabei können Sie eine Aktualisierungsrate wählen und nur die von Ihnen benötigten Datenpunkte filtern.
Fazit
Kombinieren Sie HTTPX mit unseren Proxys und erhalten Sie eine private, effiziente und zuverlässige Art, das Web zu scrapen. Um die Proxys zu rotieren, können Sie einfach die in Python integrierte Zufallsbibliothek
verwenden. Mit einer Kombination aus Proxys für Rechenzentren und Privatanwender bauen Sie eine redundante Verbindung auf, die den meisten Sperrsystemen entgeht.
Wie Sie bereits erfahren haben, bietet Bright Data das komplette Paket für Ihre Web-Scraping-Projekte. Starten Sie noch heute Ihre kostenlose Testversion mit den Proxys von Bright Data!
Keine Kreditkarte erforderlich