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