【发布时间】:2022-07-09 20:55:18
【问题描述】:
我有以下 Python 代码来启动 APScheduler/TwistedScheduler cronjob 来启动蜘蛛。
使用一只蜘蛛没有问题,而且效果很好。但是使用两个蜘蛛会导致错误:twisted.internet.error.ReactorAlreadyInstalledError: reactor already installed。
我确实找到了related question,使用CrawlerRunner 作为解决方案。但是,我使用的是 TwistedScheduler 对象,所以我不知道如何使用多个 cron 作业(多个 add_job())来使其工作。
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from apscheduler.schedulers.twisted import TwistedScheduler
from myprojectscraper.spiders.my_homepage_spider import MyHomepageSpider
from myprojectscraper.spiders.my_spider import MySpider
process = CrawlerProcess(get_project_settings())
# Start the crawler in a scheduler
scheduler = TwistedScheduler(timezone="Europe/Amsterdam")
# Use cron job; runs the 'homepage' spider every 4 hours (eg. 12:10, 16:10, 20:10, etc.)
scheduler.add_job(process.crawl, 'cron', args=[MyHomepageSpider], hour='*/4', minute=10)
# Use cron job; runs the full spider every week on the monday, tuesday and saturday at 4:35 midnight
scheduler.add_job(process.crawl, 'cron', args=[MySpider], day_of_week='mon,thu,sat', hour=4, minute=35)
scheduler.start()
process.start(False)
【问题讨论】:
标签: python scrapy twisted reactor twisted.internet