Ejecutar araña múltiple secuencialmente

Class Myspider1 #do something.... Class Myspider2 #do something... 

Lo anterior es la architecture de mi archivo spider.py. y estoy intentando ejecutar el Myspider1 primero y luego ejecutar los múltiplos Myspider2 veces dependen de algunas condiciones. ¿Cómo podría hacer eso? ¿algun consejo?

 configure_logging() runner = CrawlerRunner() def crawl(): yield runner.crawl(Myspider1,arg.....) yield runner.crawl(Myspider2,arg.....) crawl() reactor.run() 

Estoy tratando de usar de esta manera. Pero no tengo idea de cómo ejecutarlo. ¿Debo ejecutar el cmd en el cmd (¿qué comandos?) O simplemente ejecutar el archivo python?

¡¡¡muchas gracias!!!

ejecuta el archivo python
por ejemplo: test.py

 import scrapy from twisted.internet import reactor, defer from scrapy.crawler import CrawlerRunner from scrapy.utils.log import configure_logging class MySpider1(scrapy.Spider): # Your first spider definition name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/" ] def parse(self, response): print "first spider" class MySpider2(scrapy.Spider): # Your second spider definition name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): print "second spider" configure_logging() runner = CrawlerRunner() @defer.inlineCallbacks def crawl(): yield runner.crawl(MySpider1) yield runner.crawl(MySpider2) reactor.stop() crawl() reactor.run() # the script will block here until the last crawl call is finished 

Ahora ejecuta python test.py> output.txt
Puedes observar en el output.txt que tus arañas se ejecutan secuencialmente.

Debe usar el objeto Deferred devuelto por process.crawl (), que le permite agregar una callback cuando finalice el rastreo.

Aqui esta mi codigo

 def start_sequentially(process: CrawlerProcess, crawlers: list): print('start crawler {}'.format(crawlers[0].__name__)) deferred = process.crawl(crawlers[0]) if len(crawlers) > 1: deferred.addCallback(lambda _: start_sequentially(process, crawlers[1:])) def main(): crawlers = [Crawler1, Crawler2] process = CrawlerProcess(settings=get_project_settings()) start_sequentially(process, crawlers) process.start()