最近在学习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代码,用户需要输入学号,密码,和所看到的验证码,然后就能看到自己的成绩了。

# -*- 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爬取教务系统中成绩相关推荐

  1. 利用Python爬取百度指数中需求图谱的关键词

    文章目录 需求背景 0.获取cookies 一.使用datetime计算查询的日期 二.爬取需求图谱关键词 三.扔进csv里 总结 已更新!!! 之前有小伙伴在评论里反应代码有点问题,今天看了下,报错 ...

  2. python爬取app图片_利用python爬取斗鱼app中照片方法实例

    前言 没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来. 最近看到斗鱼里的照片都不错,决定用最新学习的python ...

  3. python爬取微信运动_如何利用Python爬取微信运动中各个好友的运动信息

    2018-11-20 回答 主要思路 从ui获取文本信息是最为简单的方法,于是应该优先逆向ui代码部分. 逆向微信apk 首先解包微信apk,用dex2jar反编译classes.dex,然后用jd- ...

  4. 利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图

    1.本章利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图: 2.主要内容为绘制出中国各省疫情数据,疫情数据从四个维度进行可视化展示:累积确诊人数.现存确诊人数.治愈人数 ...

  5. python 怎么爬桌软件数据_如何利用Python爬取并分析红岭创投的数据?

    第一步:爬取数据 通过 selenium + Firefox 的无头模式将需要的数据爬取出来,代码实现不在赘述,详细步骤可查看我的上一篇图文(如何利用Python爬取网易新闻), 由于 seleniu ...

  6. python 翻译库本地库_利用python爬取并翻译GEO数据库

    原标题:利用python爬取并翻译GEO数据库 GEO数据库是NCBI创建并维护的基因表达数据库,始于2000年,收录了世界各国研究机构提交的高通量基因表达数据,现芯片集数据量高达12万以上.想要从这 ...

  7. 利用python爬取东方财富网股吧评论并进行情感分析(一)

    利用python爬取东方财富网股吧评论(一) python-东方财富网贴吧文本数据爬取 分享一下写论文时爬数据用到的代码,有什么问题或者改善的建议的话小伙伴们一起评论区讨论.涉及内容在前人的研究基础之 ...

  8. python3爬取教务系统的个人学期课程表(无头谷歌浏览模拟登录)

    前言 今天带来的是与上次爬取教务系统获取成绩单的姐妹版--爬取教务个人的学期课程表. 工具 使用pycharm编辑器,安装selenium库,beautifulsoup库,csv库,当然需要下载对应的 ...

  9. 利用python爬取豆瓣电影top250

    利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...

最新文章

  1. 老码农绝密:使用 TS(TypeScript) 的 10 大理由
  2. cpu多核 node 单线程_详解node单线程实现高并发原理与node异步I/O
  3. 龙格库塔法解微分方程组的matlab程序,MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc...
  4. 从C语言的角度重构数据结构系列(四)-静态链表动态链表
  5. 深度前沿:对话管理模型研究最新进展
  6. 使用BusyBox制作嵌入式Linux根文件系统
  7. python入门之字符串处理_Python基础之字符串操作,格式化。
  8. 模块电源(三):PCB Layout
  9. cudnn 7.5 linux x64,Ubuntu 18.04 N卡驱动安装+CUDA10.0+cuDNN7.5+Anaconda+Tensorflow-GPU
  10. Caffe学习系列(16):caffemodel可视化
  11. shiro加盐走源码
  12. Docker六大优势,云中部署模式、以及视频demo
  13. PPT画图保存时自动压缩图片问题
  14. 建立一台虚拟机并安装linux系统
  15. 聊聊互联网平台的四个效应
  16. c语言主函数调用函数
  17. 管家婆软件生产管理的简单方案
  18. 一文搞定JVM的内存结构
  19. linux下ntp对时设置
  20. 软件供应链攻击的新形式

热门文章

  1. [Python图像识别] 四十七.Keras深度学习构建CNN识别阿拉伯手写文字图像
  2. html5css3菜鸟教程,HTML5+CSS3实现拖放(Drag and Drop)示例
  3. API查q绑定带反查sgk带接口API文件源码
  4. dcos 架构官方文档
  5. 微信公众号简单接入springboot集成weixin4j
  6. 水浒传 第三十六回 没遮拦追赶及时雨 船火儿夜闹浔阳江
  7. 清华2021计算机学院复试,清华大学2021年硕士研究生复试名单汇总(持续更新中)...
  8. 如何开通一个微信公众号
  9. 【Rust日报】2020-01-27 QIP:Rust中的量子计算模拟
  10. html设置图片切割,HTML+CSS实现合并图片的切割显示以及背景渲染