之前转载过一篇介绍定时执行Scrapy方法的博文:scrapy定时执行抓取任务,并且一直在使用这个方法做增量爬虫。
但是问题来了,假设如下情景:某一天,我要爬的网站更新了非常非常多的内容,以至于一天过去了,我的爬虫还没有停止工作。但是我的Ubuntu系统并不知道,于是它又定时的去crontab中执行了定时任务。于是就出现了如下尴尬的情景:
我的系统里同时运行着两只有同样功能的爬虫。
这太尴尬了,即浪费系统资源,又得不到什么好的效果,还给别人的服务器造成双倍的负担。
所以,如果有什么办法能保证爬虫在第二天开启前已经关闭就好了。
怎么说,Scrapy这框架,很舒服。只需要配置一个扩展就好了,打开settings.py
,添加一个配置项:
CLOSESPIDER_TIMEOUT = 82800 # 23小时后结束爬虫
这个配置项的意思:
CLOSESPIDER_TIMEOUT
默认值:
0
一个整数值,单位为秒。如果一个spider在指定的秒数后仍在运行, 它将以 closespider_timeout 的原因被自动关闭。 如果值设置为0(或者没有设置),spiders不会因为超时而关闭。
配好了之后,我们的增量爬虫就可以每天运行23小时,休息一小时,继续工作,这样周而往复了。
相关的扩展还有很多,比如可以配置获得了一定数量的item则退出等等,详见文档扩展(Extensions)。