Führen Sie alle Spinnen in Scrapy lokal aus

Gibt es eine Möglichkeit, alle Spinnen in einem Scrapy-Projekt auszuführen, ohne den Scrapy-Dämon zu verwenden? Früher gab es eine Möglichkeit, mit mehreren Spinnen zu rennenscrapy crawl, aber diese Syntax wurde entfernt und Scrapys Code hat sich ziemlich verändert.

Ich habe versucht, meinen eigenen Befehl zu erstellen:

from scrapy.command import ScrapyCommand
from scrapy.utils.misc import load_object
from scrapy.conf import settings

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):
        spman_cls = load_object(settings['SPIDER_MANAGER_CLASS'])
        spiders = spman_cls.from_settings(settings)

        for spider_name in spiders.list():
            spider = self.crawler.spiders.create(spider_name)
            self.crawler.crawl(spider)

        self.crawler.start()

Aber sobald eine Spinne mit registriert istself.crawler.crawl()Für alle anderen Spinnen erhalte ich Behauptungsfehler:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/scrapy/cmdline.py", line 138, in _run_command
    cmd.run(args, opts)
  File "/home/blender/Projects/scrapers/store_crawler/store_crawler/commands/crawlall.py", line 22, in run
    self.crawler.crawl(spider)
  File "/usr/lib/python2.7/site-packages/scrapy/crawler.py", line 47, in crawl
    return self.engine.open_spider(spider, requests)
  File "/usr/lib/python2.7/site-packages/twisted/internet/defer.py", line 1214, in unwindGenerator
    return _inlineCallbacks(None, gen, Deferred())
--- <exception caught here> ---
  File "/usr/lib/python2.7/site-packages/twisted/internet/defer.py", line 1071, in _inlineCallbacks
    result = g.send(result)
  File "/usr/lib/python2.7/site-packages/scrapy/core/engine.py", line 215, in open_spider
    spider.name
exceptions.AssertionError: No free spider slots when opening 'spidername'

Gibt es eine Möglichkeit, dies zu tun? Ich möchte lieber keine Scrapy-Kernkomponenten unterordnen, nur um alle meine Spinnen so laufen zu lassen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage