我正在使用Scrapy进行一个项目,在这个项目中,我想爬取很多网站 - 可能是数百个 - 并且我必须为每个网站编写一个特定的 "spider"。我可以使用以下代码在部署到 Scrapyd 的项目中调度 一个 "spider":
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
但我该如何一次性调度项目中的所有蜘蛛?
非常感谢您的帮助!
我正在使用Scrapy进行一个项目,在这个项目中,我想爬取很多网站 - 可能是数百个 - 并且我必须为每个网站编写一个特定的 "spider"。我可以使用以下代码在部署到 Scrapyd 的项目中调度 一个 "spider":
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/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
抱歉,我知道这是一个旧话题,但我最近开始学习scrapy并偶然发现了这里,由于我的声望还不够高,无法发布评论,因此发布了一个回答。
从常见的scrapy实践中可以看出,如果您需要同时运行多个爬虫,您将需要启动多个scrapyd服务实例,然后在这些实例之间分配您的Spider运行。