
Praktische Erfahrung mit asynchronen HTTPX-Anfragen zum Spielen mit Proxy-IPs
Vor kurzem in der Crawler-Gruppe, um zu sehen, eine Menge von kleinen Partnern beschwert, dass die Verwendung von Anfragen zu tun Datensammlung immer blockiert werden IP. heute ändern wir eine neue Waffe - HTTPX Bibliothek, dieses Ding asynchrone Anfrage Funktion ist sehr gut, mit dem Proxy-IP ist einfach wie ein Tiger mit Flügeln. Wir werden unsere eigenen Proxy-Service ipipgo verwenden, um zu demonstrieren, Hand in Hand, um Ihnen beizubringen, wie man Anti-Climbing-Mechanismus zu vermeiden.
HTTPX Basic Operation Triple Strike
Lassen Sie uns zuerst eine Bibliothek installieren:pip install httpx. Die grundsätzliche Verwendung ist ähnlich wie bei Requests, aber mit mehr asynchroner Unterstützung. Sehen Sie sich diesen Code an:
httpx importieren
Normale GET-Anfrage
mit httpx.Client() as client:
response = client.get('https://example.com')
print(antwort.status_code)
Hinzufügen von Proxies zur Pose (Fokus hier!)
proxies = "http://用户名:密码@gateway.ipipgo.com:9021"
Antwort = httpx.get("https://ip.ipipgo.com", proxies=proxies)
print(f "Aktuelle IP: {response.json()['ip']}")
Beachten Sie, dass die Proxy-Adresse in der Dateigateway.ipipgo.comDas ist der Eingang zu unserem Dienst, der Port ist für verschiedene Pakete unterschiedlich. Der Vorteil der Verwendung eines eigenen Dienstes ist, dass der IP-Pool groß genug ist, um sich automatisch zu ändern, ohne dass Sie sich darum kümmern müssen.
Der richtige Weg zum Öffnen einer asynchronen Anfrage
Synchrone Anfragen können Sie schnell umbringen, wenn Sie in großen Mengen erfassen müssen. Gehen Sie asynchron! Sehen Sie sich diese göttliche Operation an:
asyncio importieren
importieren httpx
async def fetch(url):
async with httpx.AsyncClient(
proxies="http://user:pass@gateway.ipipgo.com:9021"
) as client: resp = await client.get(url)
resp = await client.get(url)
return resp.text
100 Anfragen gleichzeitig ohne Verzögerung
urls = ["https://example.com/page/{}".format(i) for i in range(100)]
results = asyncio.run(asyncio.gather([fetch(url) for url in urls]))
Die ipipgo's werden hier verwendetLangfristige Agenturpaketeder sich besonders für dieses Szenario mit hoher Anfragefrequenz eignet. Denken Sie daran, einen asynchronen Client zu verwenden, denn der normale Client wird sich zurückhalten.
Proxy IP - praktischer Leitfaden zur Vermeidung von Fallstricken
Einige Fallstricke, die bei der tatsächlichen Entwicklung häufig auftreten:
| problematisches Phänomen | Verschreibung |
|---|---|
| Zeitüberschreitung der Verbindung | Umschaltung der verschiedenen Serverraum-Knoten von ipipgo |
| Rückgabe 407 Fehler | Prüfen Sie, ob das Kontopasswort Sonderzeichen enthält |
| langsame Reaktionszeit | Aktivieren von Link-Multiplexing für HTTPX |
Es wird empfohlen, einen Wiederholungsmechanismus in den Code mit ipipgo'sAutomatische IP-UmschaltungDie Funktionalität ist viel unkomplizierter. Ihre API unterstützt den automatischen IP-Wechsel nach der Anzahl der Ausfälle, was besonders für die Erfassung großer Mengen von Daten hilfreich ist.
QA Time: Zusammenfassung der häufigsten Fragen
F: Was soll ich tun, wenn das Mittel nicht funktioniert, wenn ich es benutze?
A: Es wird empfohlen, das Dynamic Residential IP-Paket von ipipgo zu verwenden, das die IP-Adresse bei jeder Anfrage automatisch ändert und der anderen Partei keine Möglichkeit gibt, den Zugang zu sperren.
F: Asynchrone Anfragen bleiben plötzlich stecken und bewegen sich nicht mehr?
A:Prüfen Sie, ob der Timeout-Parameter nicht gesetzt ist, HTTPX wartet standardmäßig unendlich. Fügen Sie den Parameter timeout=30 hinzu, dann wird es stabil sein.
F: Was ist, wenn ich einen hohen anonymen Proxy benötige?
A: Wählen Sie direkt ipipgo'sAgenturleistungen auf UnternehmensebeneDer Request-Header gibt keinerlei Aufschluss über die Eigenschaften des Proxys und wurde durch die strenge Prüfung eines bestimmten Ostens getestet.
Ultimatives Konfigurationsprogramm
Ein letzter wichtiger Punkt: Hier ist meine bevorzugte Konfigurationsvorlage:
client = httpx.AsyncClient(
proxies={
"http://": "http://user:pass@gateway.ipipgo.com:9021",
"https://": "http://user:pass@gateway.ipipgo.com:9021"
},
timeout=30.0,
limits=httpx.Limits(max_connections=100),
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
)
Mit dieser Konfiguration besteht kein Druck, Millionen von Anfragen mit den Proxys von ipipgo zu stellen. Ihre IP-Pool wird häufig genug aktualisiert, dass Sie im Grunde nicht CAPTCHA Bombardierung begegnen wird. Schließlich, um daran zu erinnern, tun Datenerhebung mit den Regeln der Website entsprechen, ist die Verwendung von Proxy nicht für den Zweck der Sabotage ha.

