Ich habe ein Skript namens algorithm.py und ich möchte Scrapy-Spider während des Skripts aufrufen können. Die Datei scructure ist:Wie bestimmte Scrapy-Spider aus einem anderen Python-Skript aufgerufen werden
algorithm.py MySpiders/
wo MySpiders ist ein Ordner mehrere scrapy Projekte enthält. Ich möchte Methoden perform_spider1(), perform_spider2() ... erstellen, die ich in algorithm.py aufrufen kann.
Wie konstruiere ich diese Methode?
Ich habe es geschafft, eine Spinne mit dem folgenden Code aufzurufen, aber es ist keine Methode und es funktioniert nur für eine Spinne. Ich bin ein Anfänger, der Hilfe braucht!
import sys,os.path
sys.path.append('path to spider1/spider1')
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log, signals
from scrapy.xlib.pydispatch import dispatcher
from spider1.spiders.spider1_spider import Spider1Spider
def stop_reactor():
reactor.stop()
dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = RaListSpider()
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
log.msg('Running reactor...')
reactor.run() # the script will block here
log.msg('Reactor stopped.')
Danke, Alecxe! Wie kann ich den Reaktor nach der letzten Spinne stoppen? Derzeit bin ich mit def stop_reactor(): reactor.stop() dispatcher.connect (stop_reactor, Signal = signals.spider_closed) jedoch hält dies nach der ersten Spinne ... –
Sie sind willkommen. Gute Frage! Wie wäre es, die Spinnen im "stop_reactor" manuell zu verfolgen und den Reaktor zu stoppen, wenn alle geschlossen wären? Übrigens, ich habe die Antwort bearbeitet und den Link zu einem relevanten Thread eingefügt. – alecxe
Danke, Kumpel. Ich habe nicht genug Reputation, um dich zu bewerten, aber ich stimme dich stattdessen moralisch ab :) –