Scrapy-Proxy-Middleware: Request gegenüber None als Rückgabewerte
Geben Sie die Kontrolle zurück, nachdem Sie einen Scrapy-Proxy zugewiesen haben, statt dieselbe Anfrage vor dem Download versehentlich neu einzuplanen.
Die Proxy-Adresse ändert sich im Log. Das Ziel erscheint nie im Zugriffslog des Proxys. Prüfen Sie, ob Ihre Middleware die Anfrage überhaupt bis zum Downloader durchlässt.
In der Downloader-Middleware von Scrapy bedeutet die Rückgabe einer Request, dass diese Anfrage neu eingeplant wird. Es bedeutet nicht „sende dieses Objekt weiter mit den Metadaten, die ich gerade geändert habe“.
Für einen Selektor, der nur eine Route auswählt, ist die wichtige Form:
def process_request(self, request):
request.meta['proxy'] = self.choose_proxy()
return None
Dieses Fragment zeigt die aktuelle Hook-Form; verwenden Sie die Middleware-Schnittstelle, die die installierte Scrapy-Version unterstützt. Der Selektor muss einen gültigen Endpunkt zurückgeben und einen nicht verfügbaren Pool ausdrücklich behandeln. Ein öffentlicher Crawl, der öffentliche Vermittler erlaubt, kann für diesen Rückgabewert HTTP-Kandidaten aus der HTTP-Proxy-Liste beziehen.
Die Rückgabe von None lässt die übrige Anfrage-Middleware und den Downloader fortfahren. Die Rückgabe einer anderen Request ist nützlich, wenn Sie Arbeit absichtlich ersetzen oder erneut versuchen, sie braucht aber einen Grund und eine Abbruchbedingung.
Ein Rotator, der jedes Mal dieselbe Anfrage zurückgibt, kann seinen eigenen Auswahlcode wiederholt ausführen, ohne je eine Verbindung zum Ziel aufzubauen. Höhere Timeouts oder mehr geöffnete Proxy-Ports können diese Kontrollfluss-Schleife nicht reparieren.
Betrachten Sie Middleware-Eintritt, Rückgabeverhalten und den ersten tatsächlichen Netzwerkversuch als getrennte Ereignisse. Eine Logzeile „Proxy ausgewählt“ belegt nur, dass der Selektor lief. Sie belegt nicht, dass eine Anfrage mit dem ausgewählten Endpunkt gesendet wurde.