使用APScheduler定时调度Scrapy爬虫项目

前端之家收集整理的这篇文章主要介绍了使用APScheduler定时调度Scrapy爬虫项目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用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

原文链接:https://www.f2er.com/note/421667.html

猜你在找的程序笔记相关文章