2015-11-13 19 views
5

Sono bloccato durante l'avvio di più istanze dello stesso spider. Voglio eseguirlo come 1 url per 1 istanza Spider. Devo elaborare 50k URL e per questo ho bisogno di avviare istanze separate per ciascuno. Nel mio script di spider principale, ho impostato il timeout di closedpider per 7 minuti, per assicurarmi di non essere sottoposto a scansione per un lungo periodo. Si prega di consultare il codice qui sotto:Scrapy - Come avviare più istanze dello stesso processo spider?

from scrapy.crawler import CrawlerProcess 
from scrapy.utils.project import get_project_settings 
import urlparse 

for start_url in all_urls: 
    domain = urlparse.urlparse(start_url).netloc 
    if domain.startswith('ww'): 
     domain = domain.split(".",1)[1] 

    process = CrawlerProcess(get_project_settings()) 
    process.crawl('textextractor', start_url=start_url,allowed_domains=domain) 
    process.start() 

Corre completamente per il 1 ° url, fresa, dopo che, quando viene passato il 2 ° url dà sotto l'errore:

raise error.ReactorNotRestartable() 
ReactorNotRestartable 

Si prega di suggerire che cosa devo fare per farlo eseguire per più istanze dello stesso spider. Inoltre, sto pensando di avviare più istanze di scrapy alla volta utilizzando thread. Sarebbe un buon approccio?

+0

Qualsiasi aggiornamento su questo argomento? – UriCS

risposta

0

ne dite di questo

process = CrawlerProcess(get_project_settings()) 

for start_url in all_urls: 
    domain = urlparse.urlparse(start_url).netloc 
    if domain.startswith('ww'): 
     domain = domain.split(".",1)[1] 
    process.crawl('textextractor', start_url=start_url,allowed_domains=domain) 

process.start() 
+0

furas Ho provato con la soluzione ma non fornisce i risultati corretti. Questa soluzione avvia più istanze senza dare l'errore '' 'ReactorNotRestartable''' ma esegue la scansione completa solo dell'ultimo URL passato e per altri URL inizia la scansione ma non strisciare più di 1 url e finisce il ragno. Ho controllato questi URL separatamente e restituiscono un sacco di dati scansionati su di essi. Inoltre, come ho già detto, devo farlo per 50k urls fare questo significa che inizierò il processo di scansione per 50k URL in una volta? Sembra un buon approccio? – user3721618

Problemi correlati