定时爬虫(续)

在上一篇博客中提到了两种定时的方法:
1、使用time.sleep直接做延时处理。
缺点:存在时间的偏移,即运行爬虫所用的时间;
2、使用crontab来定时。
比较好的方法。可以设置日志,随时查看是否出现问题。
上一篇博客地址:定时爬虫1
这一次主要对上次的第二种方法做一个补充,以及介绍一些其他的方法。

crontab定时

在上一次中采用了写sh文件,在定时任务中定时调用脚本文件的方式。
其实,这里也是可以直接在定时任务中执行爬虫,而不需要通过脚本二次调用。
需要之一的一点是:这里必需有一步切换目录的命令,即切换到爬虫的目录下。

* * * * * cd project && envs/env/bin/scrapy crawl spider  >> logs/spider.log 

一定要指出python的路径,因为我这里使用的是scrapy,因此这里使用scrapy的路径,后面是自定义的日志文件的目录和名称。
前面的“*”代表的就是定时的设置,

*    *    *    *    *
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

具体设置可以去查看crotab的详细介绍:Linux crontab 命令,这里有详细的介绍,还有例子。

然后,这一次我要介绍一些其它的方法,因为有些人可能希望有一个可视化的界面,因此这里介绍两种方法。

scrapyd和spiderkeeper的使用

spiderkeeper的界面是比较好看的,但也需要先安装scrapyd。具体怎么使用就不介绍了,网上太多的配置和使用教程了。
scrapyd配置简单,页面简陋;
spiderkeeper配置相对复杂一点,页面很好看(推荐)。
然后注意的是:端口的设置,选空闲端口,自己记住就好,不一定要5000端口。
windows和linux都可用,很方便

其他的定时方法

可能这些定时方法大家都觉得稍显复杂,而上次介绍的简单的time.sleep还有时间偏置的问题。
如果你要是嫌麻烦,可以直接采用下面这种方法:
写一个定时文件

import time


def timing():
    while True:
        time_now = time.strftime("%H", time.localtime())  # 刷新
        print(time_now)
        if time_now == "04":  # 此处设置每天定时的时间
            cmdline.execute("scrapy crawl spider".split())
        else
        	time.sleep(2)
        	continue
if __name__ == "__main__":
    timing()

通过获取当前时间的方法减少偏差.,最多也只是两秒的偏差

猜你喜欢

转载自blog.csdn.net/fuzizhu1/article/details/106049325