2015-05-13 15 views
15

Devo chiamare il crawler da un altro file python, per il quale utilizzo il seguente codice.Chiamare Scrapy da un altro file senza threading

def crawl_koovs(): 
    spider = SomeSpider() 
    settings = get_project_settings() 
    crawler = Crawler(settings) 
    crawler.signals.connect(reactor.stop, signal=signals.spider_closed) 
    crawler.configure() 
    crawler.crawl(spider) 
    crawler.start() 
    log.start() 
    reactor.run() 

In esecuzione di questo, ottengo l'errore come

exceptions.ValueError: signal only works in main thread 

L'unica soluzione che ho trovato è quello di utilizzare

reactor.run(installSignalHandlers=False) 

che non voglio usare come voglio chiamare questo metodo più volte e volere che il reattore venga fermato prima della prossima chiamata. Cosa posso fare per farlo funzionare (magari forzare il crawler ad avviarsi nello stesso thread 'principale')?

+0

Ecco un [codice di esempio di lavoro] (http://stackoverflow.com/questions/18838494/scrapy-very-basic-example/27744766#27744766) I Ho usato per eseguire Scrapy dalla sceneggiatura prima. Spero che sia d'aiuto. – alecxe

risposta

6

La prima cosa che vorrei dire a voi è quando si sta eseguendo Scrapy dal file esterno il livello di log è impostato su INFO, si dovrebbe modificare per DEBUG per vedere cosa succede se il codice non funziona

si dovrebbe cambiare la linea:

log.start() 

per:

log.start(loglevel=log.DEBUG) 

per memorizzare tutto nel registro e generare un testo il file (per il debug) si può fare:

log.start(logfile="file.log", loglevel=log.DEBUG, crawler=crawler, logstdout=False) 

Circa la questione dei segnali con il livello di log cambiato DEBUG forse potete vedere un output che può aiutare a risolvere il problema, si può provare a mettere il vostro script in la cartella Scrapy Project per vedere se si blocca ancora.

Se si cambia la linea:

crawler.signals.connect(reactor.stop, signal=signals.spider_closed) 

per:

dispatcher.connect(reactor.stop, signals.spider_closed) 

Che cosa dice?

A seconda della versione Scrapy Può essere deprecato

Problemi correlati