Python —爬取教务管理系统,个人成绩

Python —爬取教务管理系统,个人成绩
文章图片

打开chrome的按F12进入,选择network,勾上preserve log(为了保存中间过程),输入上图的用户名密码,点击登陆。


Python —爬取教务管理系统,个人成绩
文章图片


【Python —爬取教务管理系统,个人成绩】

比如POST方法或者查看login.aspx,这个就是我们提交表单的信息了,点进去拖到最下方可以看到form data,
可以看到提交的用户名密码,接下来只需代码模拟登陆的话把提交这个data里的信息就可以了。

下图的,本人学校的登入的用户名密码的表单。


Python —爬取教务管理系统,个人成绩
文章图片




登入进去后,为了爬取成绩需要转到成绩页面,不过不管怎么点击其他页面按键,发现网址始终不变:xxx.xxx.edu.cn/Index.aspx。
这是什么原理,目前还不太懂。不过chrome的network,勾上preserve log(为了保存中间过程),点击成绩查询,又收到2个文件。


Python —爬取教务管理系统,个人成绩
文章图片


cjcx:就是“成绩查询”的缩写,Request URL就是真实的地址。
所以真实的成绩查询地址不是:xxx.xxx.edu.cn/Index.aspx,而是:xxx.xxx.edu.cn/cjgl/xs_cjcx.aspx。
接下来,就需要用到cookie登入,然后正则表达式(各个学校不一样),匹配信息,并写入test.txt文件。
正则表达式,自己看了几个网页粗粗的学了下,没有学到家,可以匹配出所有的成绩,但是还是会匹配出一些垃圾信息出来。


Python —爬取教务管理系统,个人成绩
文章图片
Python —爬取教务管理系统,个人成绩
文章图片




下面就是代码部分:


#encoding=utf-8 import urllib import urllib2 import cookielib import re import stringfile_name1=r'C:\Users\112\Desktop\test.txt' e = open(file_name1,'w+')#绩点运算 class SDU: #类的初始化 def __init__(self): #登录URL self.loginUrl = 'http://XXX.XXX.edu.cn/login.aspx' #本学期成绩URL self.gradeUrl = 'http://XXX.XXX.edu.cn/cjgl/xs_cjcx.aspx' self.cookies = cookielib.CookieJar() self.postdata = https://www.it610.com/article/urllib.urlencode({'muser':'151100000', 'passwd':'12345678' }) self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1)AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'} #构建opener self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies)) #学分list self.credit = [] #成绩list self.grades = [] def getPage(self): request= urllib2.Request( url = self.loginUrl, data = https://www.it610.com/article/self.postdata, headers = self.headers) result = self.opener.open(request) result = self.opener.open(self.gradeUrl) #打印登录内容 #print result.read() page = result.read() print page #替换内容 page = page.replace('','') page = page.replace('','') #正则匹配 st= re.compile(r'.*?(.*?).*?(.*?).*?(.*?)(.*?)(.*?)(.*?)(.*?)') myItems3 = re.findall(st,page) print myItems3 for item3 in myItems3: for i in range(7): e.write(item3[i]+'') print item3[i] e.write('\n \n ') sdu = SDU() sdu.getPage() e.close()





    推荐阅读