利用python爬取教务系统中成绩
2013-12-16 20:38
323 查看
最近在学习python,发现通过python爬取网页信息确实方便,以前用C++写了个简单的爬虫,爬取指定网页的信息,代码随便一写都几百行,而要用python完成相同的工作,代码量相当少。前几天看到了一个博客上讲解如何使用python写的爬虫爬取成绩信息,看了之后,自己实战了一番,并且达到了相同的效果。
整个过程和那篇博客所写的过程相同,不过由于我们学校的成绩查询系统要输入验证码,所以步骤稍微繁琐一点。
1.了解查询过程
使用的工具当然也是HttpFox插件。开启HttpFox插件后,我登录了成绩系统并且查询了成绩。然后发现httpFox检测到了很多条信息:
可以看到,当我们第一次访问成绩管理系统的时候,浏览器向服务器发送了一个GET请求,而服务器返回的消息头部中给定了Cookie值,如下图:
接下来,浏览器向http://gsinfo.whu.edu.cn/servlet/GenImg发送信息,获取验证码信息,可以发现发送消息的头部加载COOKIE信息:
然后,我输入用户名、密码、验证码登录系统,发现向http://gsinfo.whu.edu.cn/servlet/Login_use这个网址发送了POST信息,然后检查发送的POST数据,可以看到用户名,密码,验证码,这些信息都发送过去了。
这里可以看到,who变量表示的是用户的类别(学生还是老师),id,pwd,yzm分别表示的是学号,密码和验证码,而后面的submit.x和submit.y则不用管它。
登录之后,点击了“查询成绩”的按钮之后,才最终显示了成绩的页面,如下图:
运用HttpFox监测之后,我们大致了解了查询成绩的基本流程:
首先,我们访问http://gsinfo.whu.edu.cn,浏览器得到Cookie,然后获取到相应Cookie对应的验证码,得到验证码图片的网址是http://gsinfo.whu.edu.cn/servlet/GenImg。
其次,我们输入了学号,密码,验证码后,POST给http://gsinfo.whu.edu.cn/servlet/Login_use,如果登录成功,则进入到了成绩查询系统。
最后,我们要向http://gsinfo.whu.edu.cn/score/Svlt_QueryScore这个网址POST查询信息,得到最终的查询页面。
2.用python实现模拟登录
知道了成绩查询的大体流程之后,我们就可以使用python来模拟学生登录系统并且查询成绩。整个查询过程中最重要的一点是要得到登录时的Cookie值,并且后面访问时也要传入这个Cookie值,否则会出现登录失败的情况。我就在验证码这里遇到了点困难,明明输入的验证码就是看到的验证码,但是还是登录失败。最终发现,原来是Cookie的值发生了变化,导致登录时所需要的验证码已经不是你得到的验证码了。
这里给出了我写的python代码,用户需要输入学号,密码,和所看到的验证码,然后就能看到自己的成绩了。
代码的运行结果如下:
总结:本文介绍了如何利用python编写一个小爬虫,爬取武汉大学研究生管理系统中学生的成绩。我目前算是初学python,发现python确实是一门强大的编程语言。毕竟这只是个小练习,还有些不完善,没有考虑异常的情况。
参考文章:
[Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)
整个过程和那篇博客所写的过程相同,不过由于我们学校的成绩查询系统要输入验证码,所以步骤稍微繁琐一点。
1.了解查询过程
使用的工具当然也是HttpFox插件。开启HttpFox插件后,我登录了成绩系统并且查询了成绩。然后发现httpFox检测到了很多条信息:
可以看到,当我们第一次访问成绩管理系统的时候,浏览器向服务器发送了一个GET请求,而服务器返回的消息头部中给定了Cookie值,如下图:
接下来,浏览器向http://gsinfo.whu.edu.cn/servlet/GenImg发送信息,获取验证码信息,可以发现发送消息的头部加载COOKIE信息:
然后,我输入用户名、密码、验证码登录系统,发现向http://gsinfo.whu.edu.cn/servlet/Login_use这个网址发送了POST信息,然后检查发送的POST数据,可以看到用户名,密码,验证码,这些信息都发送过去了。
这里可以看到,who变量表示的是用户的类别(学生还是老师),id,pwd,yzm分别表示的是学号,密码和验证码,而后面的submit.x和submit.y则不用管它。
登录之后,点击了“查询成绩”的按钮之后,才最终显示了成绩的页面,如下图:
运用HttpFox监测之后,我们大致了解了查询成绩的基本流程:
首先,我们访问http://gsinfo.whu.edu.cn,浏览器得到Cookie,然后获取到相应Cookie对应的验证码,得到验证码图片的网址是http://gsinfo.whu.edu.cn/servlet/GenImg。
其次,我们输入了学号,密码,验证码后,POST给http://gsinfo.whu.edu.cn/servlet/Login_use,如果登录成功,则进入到了成绩查询系统。
最后,我们要向http://gsinfo.whu.edu.cn/score/Svlt_QueryScore这个网址POST查询信息,得到最终的查询页面。
2.用python实现模拟登录
知道了成绩查询的大体流程之后,我们就可以使用python来模拟学生登录系统并且查询成绩。整个查询过程中最重要的一点是要得到登录时的Cookie值,并且后面访问时也要传入这个Cookie值,否则会出现登录失败的情况。我就在验证码这里遇到了点困难,明明输入的验证码就是看到的验证码,但是还是登录失败。最终发现,原来是Cookie的值发生了变化,导致登录时所需要的验证码已经不是你得到的验证码了。
这里给出了我写的python代码,用户需要输入学号,密码,和所看到的验证码,然后就能看到自己的成绩了。
# -*- coding: utf-8 -*- #模拟登陆武汉大学研究生管理系统 import urllib2,cookielib import urllib,string import cStringIO,Image,re cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) opener.addheaders.append(('User-Agent','Mozilla/5.0 (Windows NT 5.1; rv:25.0) Gecko/20100101 Firefox/25.0')) #opener.addheaders.append(('Connection','Keep-Alive')) #获取验证码 opener.open(urllib2.Request('http://gsinfo.whu.edu.cn')) imgurl = 'http://gsinfo.whu.edu.cn/servlet/GenImg' userid = raw_input("学号:") pwd = raw_input("密码:") res = opener.open(urllib2.Request(imgurl)) tempIm = cStringIO.StringIO(res.read()) im = Image.open(tempIm) im.show() yzm = raw_input("验证码:") #需要post的数据 postdata = urllib.urlencode({ 'who':'student', 'id':userid, 'pwd':pwd, 'yzm':yzm, 'submit.x':'52', 'submit.y':'13' }) req = urllib2.Request( url = 'http://gsinfo.whu.edu.cn/servlet/Login_use', data = postdata ) opener.open(req) #已经成功进入系统 #查询成绩 postscore = urllib.urlencode({ 'queryType':'1', 'sYear':'-1', 'function':'queryScoreStu', 'Submit':'%C8%B7+%B6%A8', 'flag':'unnull'}) req = urllib2.Request( url = 'http://gsinfo.whu.edu.cn/score/Svlt_QueryScore', data = postscore ) result = opener.open(req) #返回打印内容 info = result.read() #打印成绩 pattern = r'<TD width="90" height="25" align="center" valign="middle">([^>]*?)</TD>[\s\S]*?height="25">([^>]*?)</TD>[\s\S]*?25[\s\S]*?25[\s\S]*?25[\s\S]*?25[\s\S]*?25[\s\S]*?25">[\s\S]*?25">([^>]*?)</TD>' p = re.compile(pattern) score = p.findall(info) for i in range(len(score)): print score[i][1],score[i][0],string.strip(score[i][2])
代码的运行结果如下:
总结:本文介绍了如何利用python编写一个小爬虫,爬取武汉大学研究生管理系统中学生的成绩。我目前算是初学python,发现python确实是一门强大的编程语言。毕竟这只是个小练习,还有些不完善,没有考虑异常的情况。
参考文章:
[Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)
相关文章推荐
- 利用Python获取正方教务系统在校成绩
- python爬虫获取强智科技教务系统学科成绩(模拟登录+成绩获取)
- 利用python进行哈工程教务系统中的绩点计算
- 利用python3.4爬取学校教务系统,并封装成api供app调用(一)
- python爬虫登录正方教务管理系统获取成绩数据
- python爬虫实战之模拟正方教务系统登录查询成绩
- 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
- python 爬虫实战--登陆学校教务系统获取成绩信息
- 利用Python requests库模拟登陆学校教务系统
- 利用python3.4爬取学校教务系统,并封装成api供app调用(二)之不带验证码模拟登录
- python爬虫——正方教务系统成绩查询
- python爬虫实战之模拟正方教务系统登录查询成绩
- 利用python实战开发一个web管理系统框架
- Python爬虫实战——模拟登录教务系统
- 西电教务管理系统成绩查询
- 利用Python搭建用户画像系统
- Python3 利用asynico协程系统构建生产消费模型
- 用java模拟登录正方教务系统,抓取课表和个人成绩等数据
- Python爬取江西农业大学教务系统的数据
- Python实现学生成绩管理系统