教你爬取妹子图(三)定时爬取

337 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

教你爬取妹子图(三)定时爬取

声明

本人所有逆向、破解及爬虫相关教程均是以纯技术的角度来探讨研究和学习,严禁使用教程中提到的技术去破解、滥用、伤害其他公司及个人的利益,以及将以下内容用于商业或者非法用途。

前言

上一篇我们以及对网站进行了简单了爬取,我们来给我们的爬虫程序添加一个功能,就是定时爬取的功能,因为要同步更新。

准备工作

做定时爬取之前先要知道要做定时爬取的几个方向和技术点:其中包括谁来定时?是代码自己来控制还是系统级别来控制?怎么运行代码?前台的还是后台的?代码部署到什么地方?数据怎么增量更新?数据怎么进行存储?

APScheduler库

这里我们使用**APScheduler**框架来手动执行定时任务。APScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期,固定时间间隔及crontab类型的任务,并且可以持久化任务,并以daemon方式运行应用。下来来看看如何使用

安装方式

pip install apscheduler

基础介绍

apscheduler的很多,我们这这里不做过多的介绍,主要是说一下这里面用得到的。

调度器。apscheduler的调度器有很多种,我们这里使用的是BlockingScheduler调度器,它是一个阻塞的调度器,会一直等待任务的执行

触发器。触发器主要分为:

  • data:固定日期触发,什么时候执行
  • interval 时间间隔触发,隔多长时间执行
  • cron:cron字符串风格的触发器,非常灵活

添加任务。添加任务主要是使用add_job的方法,需要传递目标函数和触发器类型及其他参数

开发使用

我们把上一节的启动代码修改一下:

from apscheduler.schedulers.blocking import BlockingScheduler

......

def main():
    setting = Setting(
        out_path=['weimei.json', 'weimei.csv']
    )
    WeiMeiSp.start(setting=setting)

    scheduler = BlockingScheduler()
    scheduler.add_job(WeiMeiSp.start, 'interval', minutes=5, kwargs={"setting": setting})
    scheduler.start()

我们再第一行引入了调度器,然后再主函数里面,启动了调度器来执行定时任务,但定时任务不会立即执行会再下一个周期运行,所以我们会先执行一次然后再等待定时任务的开始。

主要看添加任务的那一行,我们使用了4个参数,第一个是我们要做定时的函数名称,第二个是触发器类型,kwargs是函数的关键字参数,minutes=5是每个5分钟执行一次,相关的参数有:

名称类型描述
weeksint间隔几周
daysint间隔几天
minutesint间隔几分钟
secondsint间隔及秒钟
start_datedatetime、str开始日期
end_datedatetime、str结束日期
timezonedatetime.tzinfo、str时区

我们看一下运行结果:

结语

我们这一节对我们的爬虫脚本进行了改造,添加的简单的定时爬取功能,当然这只是基本的实现,更详细的让我们逐步来完善