Ich habe versucht, eine App in Python mit Scrapy
zu erstellen, die die folgende Funktionalität hat:
Ich kann dies mit dem folgenden Code tun:
%Vor% Jetzt ist das Problem, dem ich gegenüberstehe, nachdem ich den Reaktor gestoppt habe (was mir notwendig erscheint, weil ich nicht bei der reactor.run()
hängen bleiben will). Ich konnte die weitere Anfrage nach erster Anfrage nicht annehmen. Nachdem die erste Anfrage abgeschlossen wurde, wurde der folgende Fehler angezeigt:
Das ist offensichtlich, da wir den Reaktor nicht starten können.
Meine Fragen sind also:
1) Wie kann ich die nächsten Crawling-Anfragen unterstützen?
2) Gibt es eine Möglichkeit, nach reactor.run () in die nächste Zeile zu wechseln, ohne sie zu stoppen?
Hier ist eine einfache Lösung für Ihr Problem
%Vor%In der obigen Lösung gehe ich davon aus, dass Sie in der Lage sind, Ihren Crawler über die Befehlszeile zu starten, indem Sie die Datei start_request.py in der Shell / Befehlszeile verwenden.
Wir verwenden nun Threading in Python, um einen neuen Thread für jede eingehende Anfrage zu starten. Jetzt können Sie Ihre Crawler-Instanz für jeden Treffer einfach parallel ausführen. Steuern Sie die Anzahl der Threads mit threading.activeCount ()
Ich empfehle Ihnen, ein Warteschlangensystem wie Rq zu benutzen (der Einfachheit halber, aber es gibt nur wenige andere).
Sie könnten eine Craw-Funktion haben:
Verwenden Sie dann in Ihrem Hauptcode die Rq-Warteschlange, um Crawler-Ausführungen zu sammeln:
%Vor%Vergessen Sie nicht, einen rq-Worker-Prozess zu starten, der für den gleichen Warteschlangennamen arbeitet (hier parse ). Beispielsweise in einer Terminalsitzung ausführen:
%Vor%Tags und Links python flask reactor scrapy twisted.internet