@Megos

Как запустить последовательно несколько пауков Scrapy?

В доках указано, что можно сделать последовательный запуск нескольких пауков https://docs.scrapy.org/en/latest/topics/practices...

from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy.utils.project import get_project_settings

class MySpider1(scrapy.Spider):
    # Your first spider definition
    ...

class MySpider2(scrapy.Spider):
    # Your second spider definition
    ...

configure_logging()
settings = get_project_settings()
runner = CrawlerRunner(settings)

@defer.inlineCallbacks
def crawl():
    yield runner.crawl(MySpider1)
    yield runner.crawl(MySpider2)
    reactor.stop()

crawl()
reactor.run() # the script will block here until the last crawl call is finished


Там же указано, что если пауки вызывают различные реакторы, то это вызовет ошибку с twisted_reactor.

Я получаю такую ошибку:

raise error.ReactorAlreadyInstalledError("reactor already installed")
twisted.internet.error.ReactorAlreadyInstalledError: reactor already installed

Похоже, что это как раз мой случай. Вопрос, можно ли обойти эту ошибку не изменяя пауков? Если нет, то что именно является вызовом реактора в пауке?

Есть предположение, что проблема в том, что один паук работает с картой сайта и вызывает класс SitemapSpider, а второй парсит готовые ссылки, которые первый записал в csv.
  • Вопрос задан
  • 209 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы