爬取考试科目成绩、发送邮件提醒新出分

目录 技术

作为一个正在学习爬虫的学生,怎么会不想着爬爬学校的教务系统呢。今天晚上欧洲经济史闲着无聊,做了一个爬学校OA的爬虫,整个代码达到如下目的:

  1. 登录学校OA系统。
  2. 爬取所有课程成绩并存储为excel文件。
  3. 一旦有新课程出分,发送带有成绩附件的邮件到邮箱。

学校的OA系统以及成绩单界面

我们首先来看看学校的OA系统登录界面。

%e5%9b%be%e7%89%87-1

 

登录结束进入个人主页。

%e5%9b%be%e7%89%87-2
点击研究生院进入如下页面。

%e5%9b%be%e7%89%87-3

 

点击其中的“查看在校成绩”,进入下面的页面就能看到每门课的成绩了。

%e5%9b%be%e7%89%87-4

 

废话不多说,下面一步步的说明整个爬虫的步骤。

完整代码需要导入的包。

  • 导入Selenium包。这里面注意到专门引入了webdriver中的keys。主要作用是用来使用键盘回车键以及配合各种浏览器的快捷键。
  • 导入numpy和pandas,将爬到的成绩数据转化成DataFrame并存成excel。这个地方导入这两个包,可能有人会觉得有点突兀。但是个人习惯对于Python的科学计算包更加熟悉。所以遇到数据问题一般都会用这两个包。
  • 导入time模块。很多时候需要等待网页加载JS完成,另外最后设置每5分钟执行一次函数需要用到这个模块。
  • 导入邮件模块,用于发送带有附件的邮件。

爬取成绩部分代码

接下来看成绩爬取代码。

  • 打开OA系统登录页面,输入账号密码并登录。这里面需要注意的地方是,在输入学号之后,由于网页自身设计的原因不能直接定位到密码栏输入密码(坑爹的北大OA登录页=。=),这里面需要摁下键盘的回车键(也即Keys.RETURN)才能继续输入密码。
  •  进入了OA个人主页后,再点击进入业务办理→研究生院这一页。
  •  这时候利用快捷键直接新开了个tab,打开成绩单页。
  •  利用正则表达式,提取出成绩页面的表头以及表内容,并转换为DataFrame格式。同时计算一下有多少门课的成绩出分了。后面判断是否有新出分就根据这个来判断。

 

利用Python发邮件。

  • 确定发送、收取邮箱。输入发送邮箱代码。
  • 定义好msg对象,由于有附件,这里面定义了Multipart对象。
  • 往msg对象里面填东西。并利用attach方法添加邮件内容“附件里是您的成绩单,请查收。”
  • 定义附件为part,往里面填附件地址并加入到msg对象中区。
  • 设置服务器、接口并发送。

打包封装代码

将上面两端代码封装成函数,每5分钟执行一次。下面的这段代码含义为,每分钟执行一次代码,一旦出了新成绩,将成绩存成excel文件并发送邮件。

 

完整代码

完整的代码如下。需要注意要将学号、密码改为自己的学号和密码。发送邮箱、发送邮箱密码改为自己的邮箱和密码。收件邮箱改为自己的邮箱。

运行结果截图

 

%e5%9b%be%e7%89%87-5

2 条评论

  • 李阳博客
    2016年9月30日

    V友过来光顾一下

  • 寂静之声
    2016年10月26日

    灰常好

发表评论

电子邮件地址不会被公开。 必填项已用*标注