一,前言
最近等期末成绩,略是焦急,若成绩更新了直接邮件通知我该多好啊,于是想起了学了两天的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 fi3,crontab部分
$ crontab -e
末尾添加一行:
1-59/5 * * * * /home/zzz/linux/grade.sh
:wq 保存退出即可
五,后记
本人山东大学本科在读,代码只适用于我们学校的教务系统,如果想用于其他需要登录的网站(前提是你要有账号密码),请看参考内容第一篇,搞懂网站的登录逻辑之后修改python代码即可~~
第一篇博客,请多指教~HELLO CSDN!