So verwenden Sie Proxys mit HTTPX

Lernen Sie HTTPX-Proxy-Setups mit Beispielen für nicht-authentifizierte, authentifizierte, rotierende und Fallback-Proxys.
6 min lesen
How To Use Proxies With HTTPX blog image

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, zone und password.
  • Wir verwenden diese, um unsere proxy_url zu 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 unserer proxy_url ein 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_proxy zu stellen.
  • Wenn wir keine ordnungsgemäße Antwort erhalten, wiederholen wir die Anfrage mit unserem residential_proxy. Beachten Sie auch das verify-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
Screenshot der Amazon-Startseite

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!