2024-04-18 21:57:24 发布
网友
我正在使用scrapy进行一个项目,在这个项目中,我要清理许多站点(可能有数百个站点),我必须为每个站点编写一个特定的蜘蛛。我可以在部署到scrapyd的项目中安排一个蜘蛛,使用:
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
但是,如何在一个项目中同时调度all蜘蛛呢?
感谢大家的帮助!
抱歉,我知道这是一个老话题,但我最近开始学习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
抱歉,我知道这是一个老话题,但我最近开始学习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:
请确保在设置中包含以下内容.py
然后从命令行(在项目目录中)只需键入
相关问题 更多 >
编程相关推荐