page contents

Python爬虫定时计划任务的几种常见方法

本文讲述了python爬虫定时计划任务的几种常见方法!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

attachments-2024-02-xjR0rnMd65d83da29f050.png本文讲述了python爬虫定时计划任务的几种常见方法!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

记得以前的Windows任务定时是可以正常使用的,今天试了下,发现不能正常使用了,任务计划总是挂起。接下来记录下Python爬虫定时任务的几种解决方法。

1方法一、while True

首先最容易的是while true死循环挂起,不废话,直接上代码:

import os

import time

import sys 

from datetime import datetime, timedelta

def One_Plan():

     # 设置启动周期

     Second_update_time = 24 * 60 * 60

    # 当前时间

    now_Time = datetime.now()

    # 设置 任务启动时间

    plan_Time = now_Time.replace(hour=9, minute=0, second=0, microsecond=0)  

    # 设置差值,-1 day, 21:48:53.246576,类似于这样

    # time.sleep()需要传入int,所以下面使用.total_seconds() 

    # 主要用来计算差值,返回int,具体功能可以自行查阅相关资料

    delta = plan_Time - now_Time

    first_plan_Time = delta.total_seconds() % Second_update_time

    print("距离第一次执行需要睡眠%d秒" % first_plan_Time)

    return first_plan_Time

# while Ture代码块,挂起程序,睡眠时间结束后调用函数名进行执行

while True:

    s1 = One_Plan()

    time.sleep(s1)

    # 下面这里是自己定义的函数,想跑代码的可以换成hellow world函数或者注释掉这行测试下

    exe_file(D_list)

    print("正在执行首次更新程序")

个人感觉使用这种方式进行定时计划的启动如果为单个程序,并且一天执行一次的话没什么问题,如果要考虑到一天执行多个任务并且一天需要执行多次,短板一下就凸显出来了。

在工作的情况中还需要考虑到很多因素,比如爬虫程序需要在晚上12点和早上6点、9点,下午3点执行四次,并且需要同时执行4个爬虫,还需要考虑到网络是否稳定,如果程序挂掉该怎么处理等等因素。

2方法二、Timer模块

之前说了最简单的定时启动,可以说是最简单粗暴的,人生苦短,python优雅,有没有那种很简单很简单,几行代码就可以搞定的那种?必须有的哈!简单举个例子说一下,上一个方法的末尾提到过需要考虑到其他因素,这就来了:

现在需要启动一个selenium的爬虫,使用火狐驱动+多线程,大家都明白的,现在电脑管家显示CPU占用率20%,启动selenium后不停的开启浏览器+多线程,好,没过5分钟,CPU占用率直接拉到90%+,电脑卡到飞起,定时程序虽然还在运行,但是已经类似于待机状态,是不是突然感觉到面对电脑卡死,第一反应:卧槽,这个lj电脑,怎么程序都跑不起来,我还写这么多代码,*****!!

是吧,接下来上代码,具体功能,请自行查阅相关资料深造:

from datetime import datetime

from threading import Timer

import time

# 定时任务

def task():

    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

def timedTask():

    '''

    第一个参数: 延迟多长时间执行任务(秒)

    第二个参数: 要执行的函数

    第三个参数: 调用函数的参数(tuple)

    '''

    Timer(5, task, ()).start()

while True:

    timedTask()

    time.sleep(5)

7行代码,是不是很优雅?优不优雅的主要是代码少,不费劲对吧。

2020-06-05 14:06:39

2020-06-05 14:06:44

2020-06-05 14:06:49

2020-06-05 14:06:54

2020-06-05 14:06:59

2020-06-05 14:07:04

2020-06-05 14:07:09

2020-06-05 14:07:14

2020-06-05 14:07:19

2020-06-05 14:07:24

3方法三、sched模块

这次直接上模块——sched模块

代码如下:

from datetime import datetime

import sched

import time

def timedTask():

    # 初始化 sched 模块的 scheduler 类,传入(time.time, time.sleep)这两个参数

    scheduler = sched.scheduler(time.time, time.sleep)

    # 增加调度任务,enter(睡眠时间,执行级别,执行函数)

    scheduler.enter(5, 1, task)

    # 运行任务

    scheduler.run()

# 定时任务

def task():

    print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

if __name__ == '__main__':

    timedTask()

这个模块也很容易上手,需要注意,scheduler()只会执行一次就结束程序,可以在mian下面添加while Ture或者直接添加调度任务在timeTask中就可以,另外除了这样的写法外,还有另外一种写法,上代码:

import schedule

import time

def hellow():

    print('hellow')

def Timer():

    schedule.every().day.at("09:00").do(hellow)

    schedule.every().day.at("18:00").do(hellow)

    while True:

        schedule.run_pending()

        time.sleep('需要睡眠的周期')

Timer()

attachments-2024-02-QzB4PFii65d83d062da5d.png

在这里可以看到,有day-hour-minute,定时任务非常的方便,在while True里添加需要睡眠的时间,在函数模块内添加需要执行的次数即可。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-02-23 14:39
  • 阅读 ( 246 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1658 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章