2012-05-29 15 views
9

Estoy usando scrapy para un proyecto en el que quiero raspar varios sitios, posiblemente cientos, y tengo que escribir una araña específica para cada sitio. Puedo programar una araña en un proyecto desplegado a scrapyd usando:Ejecutar múltiples arañas de scrapy a la vez usando scrapyd

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

Pero ¿cómo puedo programar todas las arañas en un proyecto a la vez?

Toda ayuda muy apreciada!

Respuesta

22

Mi solución para ejecutar más de 200 arañas a la vez ha sido crear un comando personalizado para el proyecto. Consulte http://doc.scrapy.org/en/latest/topics/commands.html#custom-project-commands para obtener más información sobre la implementación de comandos personalizados.

YourProjectName/comandos/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) 

Asegúrese de incluir lo siguiente en su settings.py

COMMANDS_MODULE = 'YOURPROJECTNAME.commands' 

Entonces, desde la línea de comandos (en el directorio del proyecto) simplemente puede escribir

scrapy allcrawl 
+0

Genial, intentaré esto a primera hora de la mañana. No tengo computadora en este momento. Gracias por ayudar! – user1009453

+0

Hola. Intenté su solución pero recibí el siguiente error de importación: error de importación: Ningún módulo llamado comandos Pongo la línea "COMMANDS_MODULE = 'YOURPROJECTNAME.commands'" en el archivo de configuración en el directorio del proyecto. ¿Es esto correcto? – user1009453

+0

@ user1009453 Asegúrate de que tu carpeta de comandos tenga un '__init __. Py' – dru

1

Lo siento , Sé que este es un tema antiguo, pero recientemente comencé a aprender scrapy y tropecé aquí, y todavía no tengo suficiente representante para publicar un comentario, por lo que publico una respuesta.

De the common scrapy practices verás que si necesitas ejecutar varias arañas a la vez, tendrás que iniciar varias instancias de servicio scrapyd y luego distribuir tus carreras de araña entre esas.

Cuestiones relacionadas