工大助手(爬虫——登录部分)

工大助手

基本内容

  • 工大助手(桌面版)
  • 实现登陆、查成绩、计算加权平均分等功能

团队人员

工大教务爬虫编写(登录)

具体爬虫的流程与一般登录、查询成绩等操作一致,即输入用户名、密码、验证码等信息进入相应用户的系统,之后访问查成绩的网址,将历年成绩(即该学生全部成绩)爬取下来。

学校的教务系统采用的正方教务管理系统,具体的请求/响应以及网页结构都可以通过浏览器自带的开发者工具查看。

首先。登陆界面如下:
图片名称

可以在浏览器的开发者工具中看到在登陆的过程所要提交的信息包括:用户名(学号)、密码(明文)、验证码、登录身份(学生、教师等信息)以及asp.net特有的__VIEWSTATE,主要目的在于在页面回传的时候保存状态值,使原本没有“记忆”的Http协议变得有“记忆”。__VIEWSTATE是写在页面中的,但根据我们的实验发现不同IP访问教务网站的时候产生的VIEWSTATE不同,所以在向教务系统发送相应请求的时候,首先访问教务系统,叫页面中的VIEWSTATE爬取下来。

同时,发现验证码的获取是在页面加载时页面自动访问CheckCode.aspx或去相应的验证码,所以在第一次访问页面的时候不仅爬取VIEWSTATE,同时访问CheckCode.aspx将验证码爬取下来。

在登录的过程很关键的一点在于网站使用了Cookie,为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(加密)。我利用python中的cookielib模块来获取网站的Cookie,通过建立一个Cookie的处理器完成这一项工作。

之后将相应的参数填好,就可以尝试登录了,代码如下:

self.postData = urllib.urlencode({
	'__VIEWSTATE': self.viewstate,
    'txtUserName': self.studentNo,
    'TextBox2': self.studentPass,
    'txtSecretCode': SecretCode,
    'RadioButtonList1': '学生',
    'Button1': '',
    'lbLanguage': '',
    'hidPdrs': '',
    'hidsc': ''
})
request = urllib2.Request(self.baseURL, self.postData, self.headers)
result = self.opener.open(request)

其中opener即是之间建立好的Cookie处理器,可用以下代码建立:

self.cookie = cookielib.CookieJar()
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))
原文地址:https://www.cnblogs.com/syncCN/p/5585616.html