自动查询成绩的小玩意

考完试后就总是会不自觉得登上学校的选课系统去查询成绩,可是老是要打开浏览器去登陆系统也是比较麻烦的事,就思索着自己写一个脚本来查询成绩。刚好这些天在看python,用它来实现这方面的应用还是比较简单的。

其实总的说来就是要获取到查看成绩的那个页面,然后再分析得到里面的相关数据并显示出来。

抓取页面涉及到登陆跟cookie的问题,这里用的是urllib2和cookie这两个模块。

由于要保存登陆后的cookie,所以需要先提取出来。

这样通过urllib2来模仿登陆后就能获得相应的cookie了,这时才能接着下一步去获取对应的成绩页面。

因为我们需要登陆后才能获得相应的页面。这时候就用到urllib2模块了,用它可以实现向url发送一些数据,其实在网站上登陆也就是把相应的数据发送到服务器上,然后通过验证后再获得对应的cookie,这样下次发出请求时服务器就能通过cookie识别出用户并做出应答。

上面代码就是向服务器发送数据的代码。values这个字典变量保存了我们所填取的数据,如你所知都是一些键值对,键值就是所填的表单的名字,然后发送时要经过标准方式编码,这是由urllib.urlencode()完成的。

接下去用urllib2获取相关页面时就会自动替换头部中cookie的值,这样就能够得到应答了。

获取到成绩页面后,其实得到的也就是一个HTML文档,这时候还得通过分析来提取出我们相要的那些数据。

为了从HTML文档中提取数据,要将SGMLParser类进行子类化,然后对想要捕捉的标记或实体定义方法。

经过分析提取后,最后得到的才是我们想要的那些成绩的数据。

这是查询成绩的显示,没有经过格式化,懒得去搞了,能看就行了。

其实整个过程并不顺利,因为在抓取页面时一些网站会分析协议包的头部,要是Referer的值不是指向它的网站的URL时,就不会做出应答。我们学校的网站就是这样,就因为这个小小的问题不断地在试,有好几次还因为忘了替换User-Agent的值,被学校的服务器误以为是在对它做IPC$攻击,还把我的IP给封掉了(=_=!幸好过些时间就解封了)。

标签: ,
文章分类 Programming, Python

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*