最近看了CSDN上一个专栏《
具体过程专栏作者写得很清楚,详见
根据那篇博文,整个过程分为以下几步:
打开教务系统网站,查看登陆时发送了哪些信息,分析POST和GET信息,并在模拟登陆时使用;
进入网站后,查看如何与网站交互,同步骤一,分析这些信息,在模拟查询时使用;
使用爬虫模拟登陆和查询,得到成绩页面的html代码;
使用正则表达式提取得到的html代码中的所有成绩信息;
通过提取到的成绩信息计算平均学分绩。
具体操作细节可以参考上面那篇博文。此处不再赘述。
这里写一下我遇到的问题。上述博文中,作者登陆成绩查询系统后,直接找到成绩查询页面的URL就可以得到成绩页面的html代码,而在我们学校的教务系统中我却怎么也找不到该URL。经过N多次实验发现,我们学校查询的时候也会发送一个特定格式的POST信息,然后才会返回成绩页面,也就是说得再次模拟发送一次浏览成绩信息。感觉是由于自己对网站相关知识不了解,认为只要模仿就能取得结果,殊不知这里查询方式的不同,浪费了不少时间。
得到网页信息后,就需要写正则表达式来提取成绩信息。关于Python的正则表达式详见:
附上源代码:
1 #-*- coding: utf-8 -*-
2 #author: Kill Console
3 #功能:计算西工大研究生本学期成绩学分绩
4
5 importurllib6 importurllib27 importcookielib8 importre9
10 REQUIRED = '\xe5\xad\xa6\xe4\xbd\x8d\xe5\xbf\x85\xe4\xbf\xae\xe8\xaf\xbe' #必修
11 ELECTIVE = '\xe5\xad\xa6\xe4\xbd\x8d\xe9\x80\x89\xe4\xbf\xae\xe8\xaf\xbe' #选修
12
13 classNPUSpider:14 def __init__(self, stuid, pwd):15 self.login_url = 'http://222.24.211.70/grsadmin/servlet/studentLogin' #登陆url
16 self.query_url =