
Erstens, Scrapy Proxy Middleware am Ende, was ist der Nutzen?
Crawler Brüder sollten diese Situation angetroffen haben: nur ein paar Minuten des Programms laufen, wird die Ziel-Website geben Sie IP zu Tode blockiert. Zu dieser Zeit, dynamische Proxy-IP ist ein lebensrettender Strohhalm, wie ein Spiel zu öffnen unbegrenzte Auferstehung hängen, wurde versiegelt automatisch die neue Weste zu ändern, um weiter zu tun.
Das Proxy-Setup, das mit Scrapy geliefert wird, ist zu einfach, um komplexe Szenarien zu behandeln. Wir müssen unsere eigeneMiddleware herunterladenDieses Ding ist wie ein Versandzentrum für ein Kurierunternehmen, das jede Anfrage abfängt und heimlich die Uniform (IP-Adresse) des Kuriers (Anfrage) ändert.
II. von Hand gebaute Räder: Dynamische Agenten-Middleware
Bereiten Sie zunächst einen zuverlässigen Proxy-Pool vor. Hier ein Beispiel mit dem Dynamic Residential Proxy von ipipgo. Das Rückgabeformat der Home-API sieht wie folgt aus:
{
"proxy": "123.45.67.89:8888",
"expire_time": 1800
}
Eine neue.middlewares.pyDatei, und der Kerncode besteht aus nur 20 Zeilen:
zufällig importieren
importiere Anfragen
von scrapy importieren Signale
class DynamicProxyMiddleware.
def __init__(self, api_url): self.api = api_url + "?apikey=YOUR_API_KEY".
self.api = api_url + "?apikey=YOUR_API_KEY"
@classmethod
def from_crawler(cls, crawler):
return cls(
api_url=crawler.settings.get('IPIPGO_API')
)
def process_request(self, request, spider).
Eine neue IP abrufen
resp = requests.get(self.api)
proxy = f "http://{resp.json()['proxy']}"
Wichtig! Legen Sie die Authentifizierungsinformationen fest
request.meta['proxy'] = proxy
request.headers['Proxy-Authorization'] = 'Basic ' + base64.b64encode(b'username:password').decode()
III. geheime Parameter der Konfigurationsdatei
existiereneinstellungen.pyAktivieren Sie unsere Middleware in der
DOWNLOADER_MIDDLEWARES = {
your_project.middlewares.DynamicProxyMiddleware': 543,
}
IPIPGO_API = "https://api.ipipgo.com/getProxy" offizielle Schnittstellenadresse
Achten Sie auf diese beiden Schlaglöcher:
1. nicht mit den Prioritätsnummern herumspielendie kleiner ist als die Standard-HttpProxyMiddleware (750).
2. informationen zur AkkreditierungDenken Sie daran, das vom ipipgo-Backend vergebene Passwort zu ändern
IV. Leitfaden zur Vermeidung von Fallstricken in der Praxis
Ein Problem aus dem wirklichen Leben, auf das ich kürzlich bei der Unterstützung eines Kunden bei einem Einsatz gestoßen bin:
| symptomatisch | eine Angelegenheit regeln |
|---|---|
| Kontinuierliche Rückgabe von 407 Fehlern | Prüfen Sie, ob der Code für die Basisauthentifizierung korrekt ist. |
| Die IP-Überlebensdauer ist zu kurz | Fügen Sie &duration=600 zu den API-Parametern hinzu, um das Verfallsdatum zu verlängern. |
| WebDriver wird auf der Ziel-Website erkannt | Kopfzeilentarnung für ipipgo einschalten |
V. Kurze Fragen und Antworten auf häufig gestellte Fragen
F: Was sollte ich tun, wenn meine Proxy-IP oft ungültig ist?
A: Das dynamische Wohnpaket von ipipgo enthält dieAutomatische Umschaltung nicht möglichMechanismus wird empfohlen, die Häufigkeit der API-Aufrufe auf 3-5 Mal pro Sekunde festzulegen, und ihr IP-Pool ist groß genug, um dem Ansturm standzuhalten.
F: Plötzliche Verlangsamung des Crawlers?
A: Prüfen Sie, ob sie eingeschaltet istGLEICHZEITIGE_ANFRAGENGleichzeitigkeitskontrolle ist es empfehlenswert, mit ipipgo'sRegionale Optimierungum den Proxy-Knoten am Standort des Zielservers auszuwählen.
F: Müssen Sie mit CAPTCHA umgehen?
A: Schalten Sie es in der ipipgo-Konsole einIntelligente CAPTCHA-UmgehungDienstes wird nur von der Enterprise Edition unterstützt, normalen Benutzern wird empfohlen, die Häufigkeit der Anfragen zu reduzieren.
Eine letzte Erkenntnis: Öffnen Sie nicht dieCOOKIES_AKTIVIERTAndernfalls wird die Website feststellen, dass verschiedene IPs denselben Satz von Cookies verwenden, was ihre Identität sofort offenbaren wird! Wenn Sie Cookies für Ihr Unternehmen verwenden müssen, denken Sie daran, sie mit ipipgo'sSitzung haltenDie Sticky Session genannte Funktion sorgt dafür, dass die IP-Adresse für einen bestimmten Zeitraum gleich bleibt.

