2012-05-29 1 views
9

Я использую scrapy для проекта, где я хочу очистить несколько сайтов - возможно, сотни - и я должен написать конкретный паук для каждого сайта. Я могу запланировать один паук в проекте развертываемых на scrapyd с помощью:Запуск нескольких скабирующих пауков сразу с помощью scrapyd

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

Но как запланировать все пауков в проекте сразу?

Вся помощь очень ценится!

ответ

22

Мое решение для запуска 200+ пауков сразу заключалось в создании пользовательской команды для проекта. См. http://doc.scrapy.org/en/latest/topics/commands.html#custom-project-commands для получения дополнительной информации о реализации пользовательских команд.

YOURPROJECTNAME/команды/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) 

Убедитесь, что включают в себя следующее в вашем settings.py

COMMANDS_MODULE = 'YOURPROJECTNAME.commands' 

Затем из командной строки (в директории проекта) вы можете просто ввести

scrapy allcrawl 
+0

Отлично, я попробую это первым делом с утра. На данный момент у меня нет компьютера. Спасибо за помощь! – user1009453

+0

Привет. Я попробовал ваше решение, но я получаю следующую ошибку импорта: ошибка импорта: нет имен модулей с командами Я установил строку «COMMANDS_MODULE =« YOURPROJECTNAME.commands »в файле настроек в каталоге проекта. Это верно? – user1009453

+0

@ user1009453 Убедитесь, что у вашей папки команд есть '__init __. Py' – dru

1

Извините , Я знаю, что это старая тема, но я недавно начал изучать скрипинг и споткнулся здесь, и у меня пока нет достаточного количества комментариев, чтобы опубликовать комментарий, поэтому отправляю ответ.

От the common scrapy practices вы увидите, что если вам нужно запустить сразу несколько пауков, вам нужно будет запустить несколько экземпляров службы scrapyd, а затем распределить между ними Spider.