Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Запустите несколько пауков Scrapy одновременно, используя scrapyd

Автор вопроса: user1009453Ответов: 2

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

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

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

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

pythonscrapyscreen-scrapingscrapyd

Ответы

Ответ 1 · рейтинг 23 · dru

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

ИМЯ_ПРОЕКТА/commands/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

Ответ 2 · рейтинг 1 · Cajetan Rodrigues

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

Из общепринятых практик скрапинга вы увидите, что если вам нужно запустить несколько пауков одновременно, вам придется запустить несколько экземпляров службы scrapyd, а затем распределить между ними свои запуски паука.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы