Wie kann ich verschiedene Pipelines für verschiedene Spinnen in einem Scrapy-Projekt verwenden?
Ich habe einen scrapy-Projekt enthält mehrere Spinnen.
Gibt es eine Möglichkeit, ich kann definieren, welche pipelines zu verwenden, für die Spinne? Nicht alle Leitungen, die ich definiert haben, gelten für jede Spinne.
Dank
Kommentar zu dem Problem
Vielen Dank für Ihre sehr gute Frage. Bitte wählen Sie eine Antwort für alle künftigen Google-Mitarbeiter. Die Antwort mstringer funktionierte sehr gut für mich.
InformationsquelleAutor der Frage CodeMonkeyB | 2011-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur entfernen Sie alle Leitungen von Haupt-Einstellungen und verwenden Sie diese innerhalb Spinne.
Diese definiert die pipeline, die die Nutzer pro spider
InformationsquelleAutor der Antwort Mirage
Gebäude auf die Lösung von Pablo Hoffman, können Sie die folgenden decorator auf die
process_item
Methode, die eine Pipeline-Objekt so, dass es prüft diepipeline
Attribut des spider für den ob oder nicht es ausgeführt werden soll. Zum Beispiel:Für diesen Dekorator, um korrekt zu arbeiten, der spider muss ein pipeline-Attribut mit einem container der Pipeline-Objekte, die Sie verwenden möchten, verarbeiten Sie das Objekt, zum Beispiel:
Dann in einer
pipelines.py
Datei:Alle Pipeline-Objekte sollten noch definiert werden in ITEM_PIPELINES in den Einstellungen (in der richtigen Reihenfolge -- wäre schön, so zu ändern, dass die Reihenfolge angegeben werden kann, auf die Spinne, Beine).
InformationsquelleAutor der Antwort mstringer
Ich denken kann, mindestens vier Ansätze:
scrapy settings
zwischen jedem Aufruf des spiderdefault_settings['ITEM_PIPELINES']
auf Ihren Befehl-Klasse, um die pipeline-Liste, die Sie möchten, dass das Kommando. Sehen line 6 dieses Beispiel.process_item()
prüfen, welche Spinne es ausgeführt, und nichts, wenn es ignoriert werden sollte für diese Spinne. Finden Sie die Beispiel für die Verwendung der Ressourcen pro spider, um Ihnen den Einstieg. (Dies scheint wie eine hässliche Lösung, weil es eng Paare Spinnen und item-pipelines. Sollten Sie wahrscheinlich nicht verwenden Sie diese.)InformationsquelleAutor der Antwort Francis Avila
Können Sie die
name
Attribut der Spinne in Ihre pipelineDefinieren, werden alle Leitungen auf diese Weise können erreichen, was Sie wollen.
InformationsquelleAutor der Antwort pad
Den anderen Lösungen, die hier gegeben werden sind gut, aber ich denke, Sie könnte langsam sein, weil wir nicht wirklich nicht mit dem pipeline pro Spinne, sondern wir werden überprüfen, ob eine pipeline vorhanden ist, jedes mal, wenn ein Element zurückgegeben wird (und in einigen Fällen kann dies erreicht Millionen).
Einen guten Weg, um vollständig zu deaktivieren (oder aktivieren) Sie ein feature spider pro ist mit
custom_setting
undfrom_crawler
für alle Erweiterungen wie diese:pipelines.py
settings.py
spider1.py
Als Sie zu überprüfen, haben wir angegeben
custom_settings
überschrieben wird, die Dinge, angegeben insettings.py
, und wir werden die DeaktivierungSOMEPIPELINE_ENABLED
für diese Spinne.Nun, wenn Sie diese Spinne, schauen Sie nach etwas wie:
Nun scrapy hat komplett deaktiviert, die pipeline, nicht stört, der seine Existenz für die gesamte Auflage. Überprüfen, dass dies funktioniert auch für scrapy
extensions
undmiddlewares
.InformationsquelleAutor der Antwort eLRuLL
Ich bin mit zwei pipelines, eine für Bild-download (MyImagesPipeline) und die zweite für das speichern von Daten in mongodb (MongoPipeline).
nehmen wir an, wir haben viele Spinnen(spider1,spider2,...........),in meinem Beispiel spider1 und spider5 nicht verwenden können, MyImagesPipeline
settings.py
Und Balg vollständige code der pipeline
InformationsquelleAutor der Antwort Nanhe Kumar