最近由于某些需要,开始入门Python网络爬虫,想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩,由于我并没有深入了解过过其他的编程语言,所以,也比较不出Python和其他语言(如JAVA/PHP)的优缺点,只是因为我会Python,废话不多说,开工。

首先说一下,我们学校教务系统的网址是http://222.24.19.201,我想到的流程是,登入教务系统,然后访问查成绩的网址,将历年成绩抓取下来,这是一个很直观的流程,在程序中要做的就是1.登录, 2.访问 , 3.抓取,4.解析。当然,在这之前,首先要解决一个问题: 验证码。

就是这样,验证码!我想到的第一个问题是OCR,可这个对我来说有点太复杂了,有其他的方法嘛,仔细观察,

我们登录要提交的验证码,帐号密码其实是提交到了http://222.24.19.201/default2.aspx

,可是这并没有什么用,还是验证码,等等,注意到了default后面的2,那岂不是还有0,1,3,4…,抱着试一试的态度,尝试了一下,知道找到http://222.24.19.201/default6.aspx,终于看到了预期的结果。

居然是北京第二外国语学院,贵圈真乱!由于我清楚222.24.19.201是邮电学院的IP,所以,我就在用户名和密码上填入了自己的用户名和密码,果不其然,登进去了,所以决定了,就从这个网址下手。

接下来,就得看浏览器都干了些什么,我用的查看浏览器行为的是一款叫做HttpFox的扩展程序,如果你用的是Windows, 那么Fiddler也是一个不错的选择,这是这款程序的外观

当浏览器访问新的网页的时候,这个程序会跟踪追踪浏览器的行为(POST & GET 不了解的请自行百度)所以我们先来尝试访问一下

看到了POST, 我想知道我们向浏览器都提交了什么,点击POST, 查看POST DATA

东西真多,我们需要将这些东西通过程序提交给服务器,值的说的是,乱码的一个是”学生” 一个是”登录”, 由于,教务系统的网站所用的编码是gb2312, 而它用utf-8的方式打开,所以,就乱了。。还有一个第一项—__VIEWSTATE这是asp.net框架特有的一个东西,详细用法自行百度,这里一定要加入(P.S 不要尝试登录朕的教务系统,这只是测试密码).

关于登录,我们必须要谈的一个话题是Cookie, 这不只是饼干,还是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),所以我们要做的第一件事就是获取这个网站的Cookie。Python提供了一个模块叫做cookielib,我们要构建一个cookie的处理器来存储访问网站所得的cookie

import urllib2

import cookielib

loginURL = 'http://222.24.19.201/default6.aspx'

cookie = cookielib.CookieJar()

opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

myRequest = urllib2.Request(loginURL, postdata,headers)

这个步骤过后,cookie我们就获得了cookie, 因为待会要用到,所以我们用字符串可以存储,然后打印出来

for i in cookie:

Cookie = i.name+"="+i.value

然后我们尝试登录,

page = urllib2.urlopen(loginURL).read()

postdata = urllib.urlencode({

'__VIEWSTATE':getVIEW(page),

'txtYhm':04133128, #std ID

'txtMm':'test1234', #password

'rblJs':'学生',

'btnDl':' 登录'})

headers = {

'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36'

}

cookie = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

myRequest = urllib2.Request(loginURL, postdata,headers)

loginPage = opener.open(myRequest).read()

page = unicode(loginPage, 'gb2312').encode("utf-8")

这样,主界面就存储到了page中。

接下来,我们就要开始往查成绩的界面走了, 继续HttpFox

我们会发现查成绩的网址其实是

http://222.24.19.201/xscjcx.aspx?xh=04133128&xm=%CD%F5%BE%A9%B2%A9&gnmkdm=N121605

xm后面是本人名字的编码,其他的我就不做过多解释了,将这个网址放到浏览器中访问,结果出现了神奇的

here是个网址,看下源码,

Nothiing!!!!!醉了,哪里出问题了?百度之,没有准确答复,遂自行解决,这下,我用程序试试看

head = {

'Host':'222.24.19.201',

'Cookie':Cookie,

'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36'

}

getdata = urllib.urlencode({

'xh':04133128,

'xm':***,

'gnmkdm': 'N121605'

})

MyRequest= urllib2.Request('http://222.24.19.201/xscjcx.aspx?'+getdata,None, head) #According to this page ,we can get the viewstats

loginPage=unicode(opener.open(MyRequest).read(), 'gb2312').encode("utf-8")

data = urllib.urlencode({

"__VIEWSTATE":getVIEW(loginPage),

"btn_zcj":"历年成绩"

})

MyRequest= urllib2.Request('http://222.24.19.201/xscjcx.aspx?'+getdata,data, head) #Score's page

html = opener.open(MyRequest)

result = unicode(html.read(), 'gb2312').encode("utf-8")

name栏的*是朕的名字。

打印result,居然变成了登录界面。。。是不是我的hander不全,人家访问的时侯hander request有那么多,抱着试试看的态度,我把他们全加上了所以, hander就成了这样

head = {

'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Accept-Encoding':'gzip, deflate',

'Accept-Language':'zh-CN,zh;q=0.8',

'Cache-Control':'no-cache',

'Connection':'keep-alive',

'Content-Type':'application/x-www-form-urlencoded',

'Host':'222.24.19.201',

'Cookie':Cookie,

'Origin':'http://222.24.19.201',

'Pragma':'no-cache',

'Referer':'http://222.24.19.201/xs_main.aspx?xh='+ID,

'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36'

}

再次打印,居然登录进去了,果然是hander出了问题,经过了解,错在了一个选项叫做Referer, 这个东西是记录,你是从哪个网页跳转到这个网页的,这也就是为什么会有Object move to here 的原因,具体请百度”Referer”.接下来,我们要对得到的result进行解析,我用的是正则

str = r"

(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.*)(.?)(.*)(.*)(.*)(.?)(.?)"

正则写的太烂,勉强够用,,

这样我们就可以得到一项成绩,将之存储到一个列表中, 然后将课程名字与列表对应起来,构成一个字典,这样,完成了存储,大功告成!

这是我写的第一个Python网络爬虫程序,难免会有疏漏,请大家多多指出错误,谢谢。

有对源码感兴趣的请戳https://github.com/Penguin502/ScoreSpider。

python二级成绩查询入口官网_python爬虫实战之模拟正方教务系统登录查询成绩相关推荐

  1. python爬虫实战之模拟正方教务系统登录查询成绩

    最近由于某些需要,开始入门Python网络爬虫,想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩,由于我并没有深入了解过过其他的编程语言,所以,也比较不出Python和其他语言(如 ...

  2. python模拟正方教务系统登录

    目录 一.抓包检查请求信息 进入教务系统首先随便输一个号进行抓包,发现default2.axps包是使用post请求 在该文件下找到标头和负载信息 _VIEWSTATE: txtUserName:学号 ...

  3. 2021年安徽省副高考试成绩查询,安徽人事考试网-2021年安徽事业单位成绩查询入口官网...

    安徽人事考试网-2021年安徽事业单位成绩查询入口官网由人事考试网考试快讯提供,以及提供2021安徽事业单位招聘成绩查询考试信息.更多关于安徽人事考试网-2021年安徽事业单位成绩查询入口官网,事业单 ...

  4. 怎么查询2021年广东高考成绩,2021年广东省高考成绩查询入口官网http://eea.gd.gov.cn/...

    2021年广东省高考成绩查询入口官网 我院将于高考报名系统绑定手机的考生推送成绩,考生可通过我院官微(ID:gdsksy)小程序和广东教育考试服务网(www.eesc.com.cn)查询成绩.考生可以 ...

  5. 商标注册查询入口官网在国家知识产权局商标局查询

    最近程序员想要注册商标,注册之前要进行商标近似查询,提高通过成功率,前期不好好查询的话,要是被商标局驳回,规费可是不退的.所以,商标查询是很重要的环节,商标注册查询入口官网肯定是家知识产权局商标局官网 ...

  6. 商标注册查询入口官网

    商标注册查询入口官网在国家知识产权局商标局 中国商标网中查询,包括商标近似查询.商标综合查询.商标状态查询和商标公告查询,TM83商标网来详细说下商标注册查询入口官网链接地址及查询方法流程: 商标注册 ...

  7. 我的第一个开源项目:Java爬虫爬取旧版正方教务系统课程表、成绩表

    Java爬虫爬取旧版正方教务系统课程表.成绩表 一.项目展示 1.正方教务系统 首页 2.爬虫系统 首页: 成绩查询: 课表查询: 二.项目实现 1.爬取思路描述 无论是成绩查询或课表查询亦或者其它的 ...

  8. python爬虫学校正方教务系统获取全部成绩

    python爬虫正方教务系统许昌学院 来自许昌学院的大四小菜鸡,疫情封在宿舍,闲来无事在宿舍爬了一下之前没成功的教务系统爬虫,当时觉得挺难的,今天发现这个还是挺简单的,这个程序参考了很多前辈大佬们的程 ...

  9. 电力英语及计算机成绩查询入口官网,考试成绩查询入口

    在考完雅思之后,成绩查询成为很多考生的第一关注,在7月10日考试的同学,考试成绩查询时间与入口已经开通了,大家快来出国留学网查看一下吧! 2021年7月10日考试成绩查询时间 2021年7月10日雅思 ...

最新文章

  1. Java统计1到300_java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题)...
  2. 无异常日志,就不能排查问题了???
  3. Promise入门详解和基本用法 我来教你
  4. mysql主从复制 drbd_MySql主从复制简单案例实现
  5. Django死活不跳转的问题
  6. log4cplus导致主进程不能退出问题解决
  7. 依赖: ros-melodic-desktop 但是它将不会被安装_npm系列之依赖管理
  8. C++中虚函数、纯虚函数、普通函数三者的区别
  9. 大咖布道丨证券行业规模化敏捷和核心能力演进
  10. rs232接口定义_RS485通讯接口定义和特点
  11. 【Step1】【二分图匹配】poj 1274-The Perfect Stall
  12. [FFmpeg] 编译官方例子
  13. robotframework--登录接口,post传递多个参数、及获取content中指定属性的值(5)
  14. Java再学习——关于ConcurrentHashMap
  15. 尽善尽美之作《Python Qt GUI与数据可视化编程》
  16. vb写数据到mysql数据库_VB2010写入数据到access 2003数据库
  17. # 数学基础task 01 函数极限与连续性
  18. java AES文件流加密
  19. 超好用的图标搜索网站
  20. 《未来简史》的“数据主义”——企业运作就是一套数据算法!

热门文章

  1. c++ opencv保存图片
  2. 自组织是管理者和成员的双向奔赴
  3. 两年,从纯小白到腾讯阿里,应届非计算机毕业生的2014互联网求职之路
  4. 如何给网站设置自定义图标(标签页显示,收藏夹显示)
  5. 机器学习(RF,DT,LSTM)在影评数据中的应用
  6. 深度学习:GPU云服务器的租用
  7. DPU-PYNQ Ultra96v2安装使用说明
  8. ss terminal下客户端sslocal+proxychains或者privoxy
  9. c# 判断路径是否存在
  10. Elasticsearch6.4专题之16:Ingest Node