利用python,shell,crontab实现成绩自动查询和更新邮件提醒

时间:2022-08-31 20:57:09

一,前言

最近等期末成绩,略是焦急,若成绩更新了直接邮件通知我该多好啊,于是想起了学了两天的python,学了两天的shell和记住了名字的crontab,试了试,成功了~~~~

二,工具介绍

python:爬课程系统的网页,实现自动登录和成绩数据提取;

shell:python代码的执行和成绩更新判断(决定是否发送更新邮件);

crontab:linux下的计划任务(很好用),实现程序定时执行;

三,参考内容

先说一下写之前找了哪些东西看:

如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站写的相当详细,里面的各种链接最好都点进去看看,灰常有用);

Python转码问题的解决方法是的,我什么都不会);

HTML+CSS基础课程只看了html,判断网站登录逻辑的时候有用的);

Linux中的计划任务—Crontab慕课网的教程,很久以前看的);

另外,浏览器的开发人员选项是一定要会用的。

四,实现过程

先把代码贴上,步骤有时间再补。。。

Talk is cheap, show me the code!

1,python部分

#!/usr/bin/python
# ^_^ coding: utf-8 ^_^
import cookielib
import urllib2
import re
#login
loginUrl = "http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login?stuid=201100090087&pwd=××××";
cj = cookielib.CookieJar();
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
urllib2.install_opener(opener);
resp = urllib2.urlopen(loginUrl);
#for index, cookie in enumerate(cj):
    #print '[',index, ']',cookie;
#get my grades
gradeUrl = "http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bkscjcx.curscopre";
req = urllib2.Request(gradeUrl);
resp = urllib2.urlopen(req);
grade = resp.read();
grade = grade.decode('gb2312').encode('utf-8');
#print grade;
#parse the html
m = re.findall(r'<td bgcolor="#EAE2F3"><p align="center">([^<]*?)</p></td>',grade,re.I|re.M);
if m:
    for x in m:
        print x;

2,shell部分

cd ~/python
python getGrade.py > grade_new.txt
d="`diff grade.txt grade_new.txt`"
if [ -z "$d" ]; then
	mv grade_new.txt grade.txt
else
	cat grade_new.txt | mail -s 'Grades' -t 1843773626@qq.com
	mv grade_new.txt grade.txt
fi
3,crontab部分

$ crontab -e

末尾添加一行:

1-59/5 * * * * /home/zzz/linux/grade.sh

:wq 保存退出即可
五,后记

本人山东大学本科在读,代码只适用于我们学校的教务系统,如果想用于其他需要登录的网站(前提是你要有账号密码),请看参考内容第一篇,搞懂网站的登录逻辑之后修改python代码即可~~

第一篇博客,请多指教~HELLO CSDN!