2012-05-29 27 views
9

Sto usando scrapy per un progetto in cui voglio raschiare un numero di siti - forse centinaia - e devo scrivere uno spider specifico per ogni sito. Posso programmare uno ragno in un progetto distribuito a scrapyd utilizzando:Esegui più ragni scrapy in una sola volta usando scrapyd

curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2 

Ma come faccio a programmare tutti ragni in un progetto in una sola volta?

Tutti gli aiuti molto apprezzati!

risposta

22

La mia soluzione per eseguire più di 200 spider contemporaneamente è stata quella di creare un comando personalizzato per il progetto. Vedere http://doc.scrapy.org/en/latest/topics/commands.html#custom-project-commands per ulteriori informazioni sull'implementazione dei comandi personalizzati.

YourProjectName/comandi/allcrawl.py:

from scrapy.command import ScrapyCommand 
import urllib 
import urllib2 
from scrapy import log 

class AllCrawlCommand(ScrapyCommand): 

    requires_project = True 
    default_settings = {'LOG_ENABLED': False} 

    def short_desc(self): 
     return "Schedule a run for all available spiders" 

    def run(self, args, opts): 
     url = 'http://localhost:6800/schedule.json' 
     for s in self.crawler.spiders.list(): 
      values = {'project' : 'YOUR_PROJECT_NAME', 'spider' : s} 
      data = urllib.urlencode(values) 
      req = urllib2.Request(url, data) 
      response = urllib2.urlopen(req) 
      log.msg(response) 

assicurarsi di includere quanto segue nel settings.py

COMMANDS_MODULE = 'YOURPROJECTNAME.commands' 

Poi dalla linea di comando (nella directory del progetto) puoi semplicemente digitare

scrapy allcrawl 
+0

Grande, proverò questa prima cosa al mattino. Non ho il computer al momento. Grazie per l'aiuto! – user1009453

+0

Ciao. Ho provato la tua soluzione ma ricevo il seguente errore di importazione: errore di importazione: Nessun modulo chiamato comandi Ho messo la riga "COMMANDS_MODULE = 'YOURPROJECTNAME.commands'" nel file delle impostazioni nella directory del progetto. È corretto? – user1009453

+0

@ user1009453 Assicurati che la tua cartella dei comandi abbia un '__init __. Py' – dru

1

Mi spiace , So che questo è un vecchio argomento, ma ho iniziato a studiare scrapy di recente e sono inciampato qui, e non ho ancora abbastanza rep per pubblicare un commento, quindi postare una risposta.

Da the common scrapy practices vedrai che se devi eseguire più spider contemporaneamente, dovrai avviare più istanze di servizio scrapyd e quindi distribuire le tue spider tra quelle.

Problemi correlati