Как сохранить работу Scrapy Crawler - PullRequest
0 голосов
/ 20 января 2019

У меня есть сканер Scrapy, который запускается один раз.Я искал решение, чтобы он непрерывно повторял свой цикл сканирования, пока не остановился.

Другими словами, как только первая итерация обхода завершится, автоматически запустите вторую итерацию, не останавливая весь обходчик, после этого - третья итерация и так далее.Кроме того, возможно, он снова запустится через x секунд, хотя я не уверен, как система отреагирует в случае, если предыдущий процесс сканирования не завершится при попытке запустить еще одну итерацию.

Решения, которые я нашел в Интернете, таким образомдалеко только ссылки на cron или scrapyd, в которых я не заинтересован. Меня больше интересует реализация настраиваемого планировщика в проекте crawler с использованием таких процессов, как CrawlerRunner или реакторы.У кого-нибудь есть пара указателей?

Следующий код из другого вопроса stackoverflow - самая близкая информация, которую я нашел в отношении моих вопросов, но я ищу несколько советов о том, как реализовать более непрерывный подход.

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

+ def run_crawl():
+     """
+     Run a spider within Twisted. Once it completes,
+     wait 5 seconds and run another spider.
+     """
+     runner = CrawlerRunner(get_project_settings())
+    runner.crawl(SpiderA)
+     runner.crawl(SpiderB)
+     deferred = runner.join()
+     deferred.addCallback(reactor.callLater, 5, run_crawl)
+     return deferred

+ run_crawl()
+ reactor.run()

Ошибка: «сообщение»: «В модуле« twisted.internet.reactor »нет элемента« run »,« source »:« pylint »,

ОБНОВЛЕНИЕ Как программно запланировать выполнение сканирования Scrapy

Попытка реализовать это, но не удается импортировать моего паука, я получаю сообщение об ошибке модуля не найден.Переменные реактора также имеют красный цвет с ошибкой и говорят, что модуль twisted.internet.reactor не имеет члена callLater ////// или не имеет элемента run.

1 Ответ

0 голосов
/ 21 января 2019

Если вы не уточните, что вы подразумеваете под "более непрерывным", я могу придумать единственный способ сделать код цитируемого ответа более непрерывным, это заменить 5 на 0 в отсроченный.

...