Ich möchte einen Crawler in Scrapy von einem Python-Modul starten. Ich möchte im Wesentlichen das Wesen der $ scrapy crawl my_crawler -a some_arg=value -L DEBUG
Was ist der einfachste Weg zum programmatischen Starten eines Crawlers in Scrapy> = 0.14
imitieren habe ich folgende Dinge im Ort:
- eine settings.py Datei für das Projekt
- Artikel und Pipelines
- ein Crawler-Klasse, die BaseSpider erstreckt und erfordert Argumente bei der Initialisierung.
ich ganz glücklich mein Projekt mit dem scrapy
Befehl wie oben angegeben ausgeführt werden kann, aber ich schreibe Tests Integration und ich möchte programmatisch:
- Einführung der Crawl die Einstellungen in
settings.py
und die Verwendung von Crawler, dasmy_crawler
name-Attribut hat (ich kann diese Klasse instanziiert leicht von meinem Testmodul. - ich alle Pipelines und Middleware will gemäß der Beschreibung in
settings.py
verwendet werden. - Ich bin froh, dass der Prozess blockiert wird, bis der Crawler fertig ist. Die Pipelines deponieren Dinge in einer DB und es ist der Inhalt der Datenbank, die ich nach dem Crawl untersuchen werde, um meine Tests zu erfüllen.
Also, kann mir jemand helfen? Ich habe einige Beispiele im Netz gesehen, aber sie sind entweder Hacks für mehrere Spinnen, oder umgehen Twisted's
Blockierung der Natur, oder nicht mit Scrapy 0.14 oder höher arbeiten. Ich brauche einfach etwas wirklich Einfaches. Siehe :-)
was mit 'subprocess.check_output falsch ist ([ 'scrapy' , ...], stderr = Unterprozess.STDOUT) '? – jfs
Ich fühle, dass das Starten eines anderen Prozesses und das Ausführen des externen Skripts ein bisschen wie ein Hack ist. Ich weiß, dass es möglich ist, es innerhalb desselben Prozesses (natürlich) zu tun, und ich würde gerne wissen, wie ich es selbst machen kann. :-) – Edwardr
es ist kein hack, wenn es ein integrationstest ist, sonst würdest du von einer bestimmten scrapy-version abhängen (einbauten ändern sich schneller als die kommandozeilenschnittstelle) – jfs