我使用scrapy的一个项目,我想凑一些网站-甚至几百个-我必须写为每个站点特定的蜘蛛。 我可以在部署使用到scrapyd项目安排一个蜘蛛:
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
但是,如何安排项目中的所有蜘蛛一次?
所有帮助非常感谢!
我使用scrapy的一个项目,我想凑一些网站-甚至几百个-我必须写为每个站点特定的蜘蛛。 我可以在部署使用到scrapyd项目安排一个蜘蛛:
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
但是,如何安排项目中的所有蜘蛛一次?
所有帮助非常感谢!
我在一次运行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
对不起,我知道这是一个老话题,但我已经开始学习最近和scrapy这里迷迷糊糊的,我没有足够的代表尚未发表评论,因此张贴一个答案。
从普通scrapy的做法 ,你会发现,如果你需要同时运行多个蜘蛛,你将不得不启动多个scrapyd服务实例,然后分发您的蜘蛛那些中运行。