Ho uno script chiamato algorithm.py e voglio essere in grado di chiamare gli spider Scrapy durante lo script. Il file è scructure:Come chiamare particolari spider Scrapy da un altro script Python
algorithm.py MySpiders/
dove MySpiders è una cartella contenente diversi progetti Scrapy. Mi piacerebbe creare metodi perform_spider1(), perform_spider2() ... che posso chiamare in algorithm.py.
Come si costruisce questo metodo?
Sono riuscito a chiamare uno spider utilizzando il seguente codice, tuttavia, non è un metodo e funziona solo per uno spider. Sono un principiante che ha bisogno di aiuto!
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.')
Grazie, alecxe! Come posso fermare il reattore dopo l'ultimo ragno? Attualmente sto usando def stop_reactor(): reactor.stop() dispatcher.connect (stop_reactor, segnale = signals.spider_closed) Tuttavia, questo si ferma dopo il primo ragno ... –
Sei il benvenuto. Buona domanda! Che ne dici di tenere traccia degli spider chiusi in 'stop_reactor 'manualmente e fermare il reattore se tutti sono stati chiusi? A proposito, ho modificato la risposta e incluso il link a una discussione pertinente. – alecxe
Grazie, amico. Non ho abbastanza reputazione per potermi votare, ma io, moralmente, voterò in su invece :) –