点击上方“算法与数据之美”,选择“置顶公众号”
更多精彩等你来!
随着课程的结束,期末考试的脚步也近了。作为“资深抱佛脚玩家”,在得知准确的考试安排后我便可以及时做好预习准备,从而在 deadline 的压力之下,迸发出惊人的力量,强化自己的学习能力!
而期末考试的通知是第一时间发布在培养办的网站上,即该网站是最快获取考试信息的渠道。由于经常手动访问该网站会造成自己的焦虑并且浪费宝贵的时间,我决定用我的好帮手「 网络爬虫 」来帮我自动化监测网站,并且当培养办的网站发布出考试安排的通知之后立即告知于我,而告知我的形式采取了邮件发送的形式,即推送到常用的手机中。
页面爬取
观察网页结构发现通知都是发布在 通知公告 这个页面中,非常符合正常的逻辑,即最新发布的通知会出现在第一条的位置。那么我们只需要实时抓取该页面最新一条也就是第一条的内容就可以完成目标。
根据对历来考试通知形式的观察发现,所有的考试通知都带有“考试通知”的字样,并且打开该链接会下载一个xlsx文件,其中包含了考试时间地点等一系列必要信息。
我们采用 lxml 来解析网页,利用 xpath 提取关键的信息,一是通知的title,二是通知的内容(xlsx文件),而这个内容是通过获取该通知的 href 链接下载得到的。
定时爬取
为了能够在发布通知之后尽快得到该消息,又不是非常频繁的访问该网站以至于带来一些不必要的麻烦,所以我们采取每十分钟执行一次程序的策略,也是一种 trade off 。
这里用到了第三方库 apscheduler ,每十分钟执行一次任务,而 misfire_grace_time 则是允许的误差时延,当任务连续执行多次之后,会产生一定的时延,导致下次任务无法执行。
邮件推送
当爬虫监测到培养办有最新的考试信息之后,自动将该 xlsx 文件下载到本地,并且通过邮件附件的形式送到我自己的邮箱,以便我随时随地都能用手机接收到这第一手的资讯。
需要注意的是这里 passwd 不是自己QQ邮箱的密码,而是在开启QQ邮箱的 POP3/SMTP服务 之后得到的授权码。
到这我们的爬虫脚本就已经完成了,一共分为爬虫爬取网页,程序定时运行,邮件发送这三个主体部分。然后我们就可以愉快地“不务正业”啦,直到收到来自自己发给自己的 “死亡邮件” ~