• Python爬虫入门(1):综述
  • Python爬虫入门(2):爬虫基础了解
  • Python爬虫入门(3):Urllib库的基本使用
  • Python爬虫入门(4):Urllib库的高级用法
  • Python爬虫入门(5):URLError异常处理
  • Python爬虫入门(6):Cookie的使用
  • Python爬虫入门(7):正则表达式
  • Python爬虫入门(8):Beautiful Soup的用法
  • Python爬虫实战(1):爬取糗事百科段子
  • Python爬虫实战(2):百度贴吧帖子
  • Python爬虫实战(3):计算大学本学期绩点
  • Python爬虫实战(3):计算大学本学期绩点
  • Python爬虫实战(5):模拟登录淘宝并获取所有订单

大家好,本次为大家带来的项目是计算大学本学期绩点。首先说明的是,博主来自山东大学,有属于个人的学生成绩管理系统,需要学号密码才可以登录,不过可能广大读者没有这个学号密码,不能实际进行操作,所以最主要的还是获取它的原理。最主要的是了解cookie的相关操作。

本篇目标

1.模拟登录学生成绩管理系统

2.抓取本学期成绩界面

3.计算打印本学期成绩

1.URL的获取

恩,博主来自山东大学~

先贴一个URL,让大家知道我们学校学生信息系统的网站构架,主页是 http://jwxt.sdu.edu.cn:7890/zhxt_bks/zhxt_bks.html,山东大学学生个人信息系统,进去之后,Oh不,他竟然用了frame,一个多么古老的而又任性的写法,真是惊出一身冷汗~

算了,就算他是frame又能拿我怎么样?我们点到登录界面,审查一下元素,先看看登录界面的URL是怎样的?

QQ截图20150220211218

恩,看到了右侧的frame名称,src=”xk_login.html”,可以分析出完整的登录界面的网址为 http://jwxt.sdu.edu.cn:7890/zhxt_bks/xk_login.html,点进去看看,真是棒棒哒,他喵的竟然是清华大学选课系统,醉了,你说你抄袭就抄袭吧,改改名字也不错啊~

算了,就不和他计较了。现在,我们登录一下,用浏览器监听网络。

我用的是猎豹浏览器,审查元素时会有一个网络的选项,如果大家用的Chrome,也有相对应的功能,Firefox需要装插件HttpFox,同样可以实现。

这个网络监听功能可以监听表单的传送以及请求头,响应头等等的信息。截个图看一下,恩,我偷偷把密码隐藏了,你看不到~

大家看到的是登录之后出现的信息以及NetWork监听,显示了hearders的详细信息。

QQ截图20150220212025

最主要的内容,我们可以发现有一个表单提交的过程,提交方式为POST,两个参数分别为stuid和pwd。

请求的URL为 http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login,没错,找到表单数据和目标地址就是这么简单。

在这里注意,刚才的 http://jwxt.sdu.edu.cn:7890/zhxt_bks/xk_login.html 只是登录界面的地址,刚刚得到的这个地址才是登录索要提交到的真正的URL。希望大家这里不要混淆。

不知道山大这个系统有没有做headers的检查,我们先不管这么多,先尝试一下模拟登录并保存Cookie。

2.模拟登录

好,通过以上信息,我们已经找到了登录的目标地址为 http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login

有一个表单提交到这个URL,表单的两个内容分别为stuid和pwd,学号和密码,没有其他的隐藏信息,提交方式为POST。

好,现在我们首先构造以下代码来完成登录。看看会不会获取到登录之后的提示页面。

123456789101112131415161718192021222324252627282930 __author__ = \’CQC\’# -*- coding:utf-8 -*- import urllibimport urllib2import cookielibimport re #山东大学绩点运算class SDU:     def __init__(self):        self.loginUrl = \’http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login\’        self.cookies = cookielib.CookieJar()        self.postdata = urllib.urlencode({            \’stuid\’:\’201200131012\’,            \’pwd\’:\’xxxxxx\’         })        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))     def getPage(self):        request  = urllib2.Request(            url = self.loginUrl,            data = self.postdata)        result = self.opener.open(request)        #打印登录内容        print result.read().decode(\’gbk\’) sdu = SDU()sdu.getPage()

测试一下,竟然成功了,山大这网竟然没有做headers检查,很顺利就登录进去了。

说明一下,在这里我们利用了前面所说的cookie,用到了CookieJar这个对象来保存cookies,另外通过构建opener,利用open方法实现了登录。如果大家觉得这里有疑惑,请看 Python爬虫入门六之Cookie的使用,这篇文章说得比较详细。

好,我们看一下运行结果

QQ截图20150220214238

酸爽啊,接下来我们只要再获取到本学期成绩界面然后把成绩抓取出来就好了。

3.抓取本学期成绩

让我们先在浏览器中找到本学期成绩界面,点击左边的本学期成绩。

QQ截图20150220220000

重新审查元素,你会发现这个frame的src还是没有变,仍然是xk_login.html,引起这个页面变化的原因是在左边的本学期成绩这个超链接设置了一个目标frame,所以,那个页面就显示在右侧了。

所以,让我们再审查一下本学期成绩这个超链接的内容是什么~

QQ截图20150220220338

恩,找到它了,本学期成绩

那么,完整的URL就是 http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bkscjcx.curscopre,好,URL已经找到了,我们继续完善一下代码,获取这个页面。

123456789101112131415161718192021222324252627282930313233343536 __author__ = \’CQC\’# -*- coding:utf-8 -*- import urllibimport urllib2import cookielibimport re #山东大学绩点运算class SDU:     def __init__(self):        #登录URL        self.loginUrl = \’http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login\’        #本学期成绩URL        self.gradeUrl = \’http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bkscjcx.curscopre\’        self.cookies -h\”> = \’http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bkscjcx.curscopre\’        self.cookies thon.jobbole.com/81334/\” target=\”_blank\”>Python爬虫入门(2):爬虫基础了解

  • Python爬虫入门(3):Urllib库的基本使用
  • Python爬虫入门(4):Urllib库的高级用法
  • Python爬虫入门(5):URLError异常处理
  • Python爬虫入门(6):Cookie的使用
  • Python爬虫入门(7):正则表达式
  • Python爬虫入门(8):Beautiful Soup的用法
  • Python爬虫实战(1):爬取糗事百科段子
  • Python爬虫实战(2):百度贴吧帖子
  • Python爬虫实战(3):计算大学本学期绩点
  • Python爬虫实战(3):计算大学本学期绩点
  • Python爬虫实战(5):模拟登录淘宝并获取所有订单
  • 大家好,本次为大家带来的项目是计算大学本学期绩点。首先说明的是,博主来自山东大学,有属于个人的学生成绩管理系统,需要学号密码才可以登录,不过可能广大读者没有这个学号密码,不能实际进行操作,所以最主要的还是获取它的原理。最主要的是了解cookie的相关操作。

    本篇目标

    1.模拟登录学生成绩管理系统

    2.抓取本学期成绩界面

    3.计算打印本学期成绩

    1.URL的获取

    恩,博主来自山东大学~

    先贴一个URL,让大家知道我们学校学生信息系统的网站构架,主页是 http://jwxt.sdu.edu.cn:7890/zhxt_bks/zhxt_bks.html,山东大学学生个人信息系统,进去之后,Oh不,他竟然用了frame,一个多么古老的而又任性的写法,真是惊出一身冷汗~

    算了,就算他是frame又能拿我怎么样?我们点到登录界面,审查一下元素,先看看登录界面的URL是怎样的?

    QQ截图20150220211218

    恩,看到了右侧的frame名称,src=”xk_login.html”,可以分析出完整的登录界面的网址为 http://jwxt.sdu.edu.cn:7890/zhxt_bks/xk_login.html,点进去看看,真是棒棒哒,他喵的竟然是清华大学选课系统,醉了,你说你抄袭就抄袭吧,改改名字也不错啊~

    算了,就不和他计较了。现在,我们登录一下,用浏览器监听网络。

    我用的是猎豹浏览器,审查元素时会有一个网络的选项,如果大家用的Chrome,也有相对应的功能,Firefox需要装插件HttpFox,同样可以实现。

    这个网络监听功能可以监听表单的传送以及请求头,响应头等等的信息。截个图看一下,恩,我偷偷把密码隐藏了,你看不到~

    大家看到的是登录之后出现的信息以及NetWork监听,显示了hearders的详细信息。

    QQ截图20150220212025

    最主要的内容,我们可以发现有一个表单提交的过程,提交方式为POST,两个参数分别为stuid和pwd。

    请求的URL为 http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login,没错,找到表单数据和目标地址就是这么简单。

    在这里注意,刚才的 http://jwxt.sdu.edu.cn:7890/zhxt_bks/xk_login.html 只是登录界面的地址,刚刚得到的这个地址才是登录索要提交到的真正的URL。希望大家这里不要混淆。

    不知道山大这个系统有没有做headers的检查,我们先不管这么多,先尝试一下模拟登录并保存Cookie。

    2.模拟登录

    好,通过以上信息,我们已经找到了登录的目标地址为 http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login

    有一个表单提交到这个URL,表单的两个内容分别为stuid和pwd,学号和密码,没有其他的隐藏信息,提交方式为POST。

    好,现在我们首先构造以下代码来完成登录。看看会不会获取到登录之后的提示页面。

    123456789101112131415161718192021222324252627282930 __author__ = \’CQC\’# -*- coding:utf-8 -*- import urllibimport urllib2import cookielibimport re #山东大学绩点运算class SDU:     def __init__(self):        self.loginUrl = \’http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bks_login2.login\’        self.cookies = cookielib.CookieJar()        self.postdata = urllib.urlencode({            \’stuid\’:\’201200131012\’,            \’pwd\’:\’xxxxxx\’         })        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))     def getPage(self):        request  = urllib2.Request(            url = self.loginUrl,            data = self.postdata)        result = self.opener.open(request)        #打印登录内容        print result.read().decode(\’gbk\’) sdu = SDU()sdu.getPage()

    测试一下,竟然成功了,山大这网竟然没有做headers检查,很顺利就登录进去了。

    说明一下,在这里我们利用了前面所说的cookie,用到了CookieJar这个对象来保存cookies,另外通过构建opener,利用open方法实现了登录。如果大家觉得这里有疑惑,请看 Python爬虫入门六之Cookie的使用,这篇文章说得比较详细。

    好,我们看一下运行结果

    QQ截图20150220214238

    酸爽啊,接下来我们只要再获取到本学期成绩界面然后把成绩抓取出来就好了。

    3.抓取本学期成绩

    让我们先在浏览器中找到本学期成绩界面,点击左边的本学期成绩。

    QQ截图20150220220000

    重新审查元素,你会发现这个frame的src还是没有变,仍然是xk_login.html,引起这个页面变化的原因是在左边的本学期成绩这个超链接设置了一个目标frame,所以,那个页面就显示在右侧了。

    所以,让我们再审查一下本学期成绩这个超链接的内容是什么~

    QQ截图20150220220338

    恩,找到它了,本学期成绩

    那么,完整的URL就是 http://jwxt.sdu.edu.cn:7890/pls/wwwbks/bkscjcx.curscopre,好,URL已经找到了,我们继续完善一下代码,获取这个页面。

    123456789101112131415161718192021222324252627282930313233343536 __author__ = \’CQC\’# -*- coding:utf-8 -*- import urllibimport urllib2import cookielibimport re #山东大学绩点运算