如何一次性运行多个Spiders?

如何一次性运行多个Spiders?

如果创建了多个Spider,希望通过cronjob一次性运行所有的Spiders,可以通过自定义Scrapy命令来实现。

具体方法来自 techbrood.com 网站聚合引擎的实践。

1. 在你的Scrapy工程下面新建一个目录:

cd path/to/your_project

mkdir commands

注意这个commands和spiders目录是同级的

 

2. 在commands下面添加一个文件crawlall.py,代码如下:

from scrapy.command import ScrapyCommand
from scrapy.utils.project import get_project_settings
from scrapy.crawler import Crawler

class Command(ScrapyCommand):

  requires_project = True

  def syntax(self):
    return '[options]'

  def short_desc(self):
    return 'Runs all of the spiders'

  def run(self, args, opts):
    settings = get_project_settings()

    for spider_name in self.crawler.spiders.list():
      crawler = Crawler(settings)
      crawler.configure()
      spider = crawler.spiders.create(spider_name)
      crawler.crawl(spider)
      crawler.start()

    self.crawler.start()

3. 在settings.py中添加配置:

COMMANDS_MODULE = 'yourprojectname.commands'

 

4. 在cronjob中添加:scrapy crawlall命令即可

 

by iefreer