
Praktische Übungen mit Python zum Umgang mit JSON-Daten von Proxy-IPs
Die alten Eisen, die sich mit der Datenerfassung beschäftigen, aufgepasst! Heute wollen wir Python verwenden, um die JSON-Daten zu verarbeiten, die von der Proxy-IP-Schnittstelle zurückgegeben werden. Schauen Sie nicht auf diesen Link herab, wenn Sie ihn nicht gut behandeln, wird Ihr Crawler innerhalb von Minuten an Ort und Stelle gelähmt sein. Nehmen wir die ipipgo-API-Antwort als Beispiel, um zu lernen, wie man diese Gruben vermeidet.
Grundlegende Operation: JSON-Parsing drei Achsen
Geraten Sie nicht in Panik, wenn Sie eine API-Antwort erhalten, sondern vergewissern Sie sich zunächst, dass es sich nicht um echtes JSON handelt.response.json()Denken Sie daran, vor der Methode eine Ausnahme hinzuzufügen:
Einfuhrgesuche
try: resp = requests.get('')
resp = requests.get('https://api.ipipgo.com/getproxy')
data = resp.json()
except ValueError.
print("Verdammt! Die Schnittstelle gibt kein richtiges JSON zurück.")
Konzentrieren Sie sich auf diese Felder, wenn Sie die Daten erhalten:
– proxy_liste: Liste der IP-Adressen
– ablauf_zeit: Zeitstempel des Verfalls
– RegionIP-Zuordnung
Tipps zur Proxy-IP-Integration
Fügen Sie die Proxy-IP von ipipgo in die Anfragen ein, kopieren Sie nicht einfach den Beispielcode! Sie müssen die Verfallszeit dynamisch handhaben:
from datetime import datetime
def get_proxy().
Hier rufen wir die ipipgo API auf.
proxies = {
"http": f "http://{neue_ip}:{port}",
"https": f "http://{neue_ip}:{port}"
}
expire = datetime.fromtimestamp(data['expire_time'])
print(f "Diese IP gilt bis {Ablauf} und muss dann geändert werden")
Proxies zurückgeben
Anti-Rollover-Leitfaden für die Ausnahmebehandlung
Hier ist es am wahrscheinlichsten, dass die Proxy-IPs durcheinander geraten:
| Art des Fehlers | Verschreibung |
|---|---|
| VerbindungsFehler | Sofortiger Wechsel zur neuen IP |
| Zeitüberschreitung | Warten Sie 3 Sekunden, bevor Sie es erneut versuchen. |
| 403 status code | Prüfen, ob der Request-Header eine Authentifizierung enthält |
Empfohlenerneuter VersuchDie Bibliothek führt intelligente Wiederholungsversuche durch:
von retrying importieren retry
@retry(stop_max_attempt_number=3)
def safe_request(url).
return requests.get(url, proxies=get_proxy(), timeout=5)
Praktisches QA Erste-Hilfe-Set
Q:Was soll ich tun, wenn sich plötzlich alle Proxy-IPs aufhängen?
A: 80% der Gleichzeitigkeit wird überstrapaziert, das Paket von ipipgo hat eineAutomatische Pool-ErneuerungFunktion, schalten Sie sie einfach in der Konsole ein
F: Wie kann ich feststellen, ob die IP wirklich gilt?
A: Senden Sie eine Anfrage an die Verifizierungsschnittstelle von ipipgo, die zurückgegebene IP und der Port stimmen nicht mit der Eile überein, den
F: Was ist, wenn ich mehrere Agentenpools gleichzeitig verwalten muss?
A: Versuchen Sie ipipgo'sMehrkanalige IsolierungFunktionen, verschiedene IP-Pools für verschiedene Dienste, um gegenseitige Beeinflussung zu vermeiden
Sorgfältige Optimierung der Leistung
Was meinen Sie dazu? Viele Neulinge machen den Fehler, die API aufzurufen, um die IP für jede Anfrage abzurufen.lokaler Cache+vorausschauend aktualisieren::
Threading importieren
class ProxyPool.
def __init__(self).
self.lock = threading.
self.refresh() lädt einen Stapel beim Start
def refresh(self).
mit self.lock.
ipipgo-Schnittstelle aufrufen, um neue IPs aufzufüllen.
self.pool = deque(data['proxy_list'])
def get_ip(self).
if len(self.pool) < 5: frühzeitige Auffrischung, wenn der Bestand niedrig ist
self.refresh()
return self.pool.pop()
Ein letzter Tipp: ipipgo'snach Volumen bezahlenPakete eignen sich besonders für Stresstests, nutzen Sie so viel wie möglich, seien Sie nicht dumm, direkt ein Monatsabonnement zu kaufen. Wenn Sie das nächste Mal auf ein JSON-Parsing-Problem stoßen, denken Sie daran, zuerst zu prüfen, ob der Antwort-Header nichtanwendung/jsonIch bin nicht sicher, ob es nur die Schnittstelle ist, die ruckelt und eine HTML-Fehlerseite zurückgibt, aber ich bin nicht sicher, ob es die Schnittstelle ist, die ruckelt und eine HTML-Fehlerseite zurückgibt.

