scrapy 在脚本中循环调用爬虫

0.问题描述

需要定时爬取一个页面,从中取得不同时间段的数据

1.解决方案

使用CrawlerRunner通过链接延迟顺序运行爬虫
代码如下:

#引入你的爬虫
from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
import time
import logging
from scrapy.utils.project import get_project_settings


#在控制台打印日志
configure_logging()
#CrawlerRunner获取settings.py里的设置信息
runner = CrawlerRunner(get_project_settings())

@defer.inlineCallbacks
def crawl():
    while True:
        logging.info("new cycle starting")
        yield runner.crawl(爬虫的名字)
        #一分钟跑一次
        time.sleep(60)
    reactor.stop()

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

其中inlineCallbacks 是一个修饰符,它总是修饰生成器函数,如那些使用 yield 语句的函数. inlineCallbacks 的全部目的是将一个生成器按照上述策略转化为一系列异步回调.
关于inlineCallbacks更多的相关知识请参考
第十七部分 构造”回调”的另一种方法

2.总结一下

这个问题实在是太坑了哇,耗费我很多时间。
同时也说明轮子虽好,可不要贪杯哦(大雾
用轮子的时候,一定要多去看官方文档,可以少走很多弯路。以上

    原文作者:freeyun
    原文地址: https://www.jianshu.com/p/218d5528ae39
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞