2016-11-01 5 views
1

Ich benutze eine eigenständige Scrapy-Spinne, die in einer einzigen .py Datei lebt. Im Falle eines Serverfehlers/Stromausfalls/aus irgendeinem anderen Grund, dass das Skript fehlschlagen könnte, gibt es einen eleganten Weg, um sicherzustellen, dass ich einen Lauf nach der Wiederherstellung fortsetzen kann?Anhalten und Fortsetzen eines eigenständigen Scrapy-Skripts

Vielleicht etwas ähnliches wie die eingebaute JOBDIR Einstellung?

Antwort

1

Sie können immer noch JOBDIR Option verwenden, wenn Sie ein in sich geschlossenes Skript, z.B. Sie können einen Wert in custom_settings Attribute:

class MySpider(scrapy.Spider): 
    custom_settings = { 
     'JOBDIR': './job', 
    } 
    #... 

Alternativ können Sie diese Option, wenn CrawlerProcess zu schaffen (wenn das, was Sie in einem Skript Spinnen laufen verwenden):

process = CrawlerProcess({'JOBDIR': './job'}) 
process.crawl(MySpider) 
process.start() 
+0

Sieht aus wie ich Ich muss mich an den Mechanismus von Scrapy halten, danke! –

0

Sie können supervisor verwenden.

[program:foo] 
command=~/script_path/script.py 
+0

I‘ Ich schaue mir das an, Danke! –

1

Es gibt eine ganze documentation page dieses Problem zu verdecken:

Um eine Spinne mit Ausdauer zu starten aktiviert unterstützt wird, führen Sie es wie dies:

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

Dann können Sie aufhören die Spinne jederzeit sicher (durch Drücken von Strg-C oder Senden eines Signals), und später wieder aufnehmen, indem Sie den gleichen Befehl absetzen :

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

+0

Was ich habe, ist ein in sich geschlossenes Spider-Modul, nicht ein ganzes Projekt, das durch das Schlüsselwort "startproject" generiert wird, das trifft leider nicht auf meine Situation zu. Außerdem suche ich nach einer Möglichkeit, den Zustand der Spinne kontinuierlich zu speichern, um sicherzustellen, dass ich im Falle eines Serverfehlers eine Möglichkeit der Wiederherstellung habe, nicht im Falle einer sanften Pause. –

+1

@ m.livs oh tut mir leid, ich habe diesen Teil verpasst. Warum nicht einfach ein Scrapy-Projekt? Das Projekt, das Sie in einem einzigen Modul haben, ist nie eine gute Idee, es sei denn, es ist unter 50 Zeilen Code oder so. – Granitosaurus

+0

Ich versuche nur die Teile zu verwenden, die ich von Scrapy brauche. Selbst wenn ich ein vollständiges Projekt benutzte, hilft der -S-Mechanismus nicht im Falle eines gewaltsamen Stopps ... –

Verwandte Themen