持续创作,加速成长!这是我参与「掘金日新计划 · 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分钟执行一次,相关的参数有:
| 名称 | 类型 | 描述 |
|---|---|---|
| weeks | int | 间隔几周 |
| days | int | 间隔几天 |
| minutes | int | 间隔几分钟 |
| seconds | int | 间隔及秒钟 |
| start_date | datetime、str | 开始日期 |
| end_date | datetime、str | 结束日期 |
| timezone | datetime.tzinfo、str | 时区 |
我们看一下运行结果:
结语
我们这一节对我们的爬虫脚本进行了改造,添加的简单的定时爬取功能,当然这只是基本的实现,更详细的让我们逐步来完善