使用APScheduler定时调度Scrapy爬虫项目
这里不介绍APScheudler和Scrapy了,网上太多关于这个,我也出不了新东西,我这里讲讲这两者的相互结合的用法。
首先我们必须知道的是Scrapy是基于Twisted的事件驱动网络框架,然后你的清楚APSchedluer的调度器分为asynico和twisted、QT、gevent、tornado、blackground。APScheduler文档说明不同的类型使用不同的调度器。如果你要把两者结合使用,那么你得选择合适的调度器,所以这里我们选择TwistedScheduler调度器。其次我们得用脚本方式启动scrapy爬虫项目,脚本方式启动写法这里我给个文档的链接,。这个链接讲解的很详细,版本是1.1的。然后脚本的文件存放位置也是很有讲究的,必须存放在Scrapy项目的根目录下,比如:你用命令行方式创建一个Scrapy项目,scrapy startproject example1,然后你cd Example1,就是这级目录下存放脚本文件。因为这个位置的脚本文件可以过获取项目配置对象然后运行爬虫项目。下面这个例子有个奇怪的现象就是定时执行时第一次不执行,第二次才开始执行,例子的源码:
#-*- coding:utf-8 -*-
from example.spiders.huaxia import ExampleSpider
from scrapy.crawler import CrawlerRunner
from scrapy.utils.project import get_project_settings
from scrapy.utils.log import configure_logging
from datetime import datetime
import os
from twisted.internet import reactor
from apscheduler.schedulers.twisted import TwistedScheduler
引入项目配置设置
configure_logging(get_project_settings())
By apscheduler regular operation reptile
def runSpider():
settings = get_projectsettings()
spider = ExampleSpider()
runner = CrawlerRunner(settings)
d = runner.crawl(spider)
d.addBoth(lambda : reactor.stop())
if name == 'main':
scheduler = TwistedScheduler()
scheduler.daemonic = False
scheduler.add_job(runSpider,'cron',hour=15,minute=23)
scheduler.start()
print 'Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C')
try:
reactor.run()
except (KeyboardInterrupt,SystemExit):
pass
@H_502_10@ 原文链接:https://www.f2er.com/note/421667.html