使用scrapyd一次运行多个scrapy spider

2024-04-18 21:57:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用scrapy进行一个项目,在这个项目中,我要清理许多站点(可能有数百个站点),我必须为每个站点编写一个特定的蜘蛛。我可以在部署到scrapyd的项目中安排一个蜘蛛,使用:

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

但是,如何在一个项目中同时调度all蜘蛛呢?

感谢大家的帮助!


Tags: 项目projectjsonlocalhosthttp站点myproject部署
2条回答

抱歉,我知道这是一个老话题,但我最近开始学习scrapy,并在这里绊倒了,我还没有足够的代表发表评论,所以张贴一个答案。

the common scrapy practices可以看出,如果需要同时运行多个Spider,则必须启动多个scrapyd服务实例,然后在这些实例之间分发Spider运行。

我一次运行200多个spider的解决方案是为项目创建一个自定义命令。有关实现自定义命令的详细信息,请参见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)

请确保在设置中包含以下内容.py

COMMANDS_MODULE = 'YOURPROJECTNAME.commands'

然后从命令行(在项目目录中)只需键入

scrapy allcrawl

相关问题 更多 >