Scrapyデーモンを使わずにScrapyプロジェクトですべてのスパイダーを実行する方法はありますか?以前はscrapy crawl
で複数のスパイダーを実行する方法がありましたが、その構文は削除され、Scrapyのコードはかなり変更されました。Scrapyのすべてのスパイダーをローカルで実行する
私は自分のコマンドを作成してみました:
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()
しかし、クモがself.crawler.crawl()
に登録されると、私は他のクモのすべてのためのアサーションエラーを取得:
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'
にどのような方法がありますこれを行う?私はむしろ、このようなすべてのスパイダーを実行するためにコアのScrapyコンポーネントのサブクラス化を開始したくないでしょう。ここで
あなたはどのようなScrapyバージョンを使用していますか? '$ scrapy version -v' –
[' scrapyd'](http://doc.scrapy.org/ja/latest/topics/scrapyd.html)について知っていますか? –
「0.16.4」。私はScrapydについて知っているが、私はこれらのスパイダーをローカルでテストしているので、むしろそれを使用したくない。 – Blender