1、学会爬虫的基本原理和规范。 2、实现爬虫http会话保持。 3、实现进入需要登录授权的网站。 4、实现静态网页的获取。 5、实现网页信息的解析。
本次实验实现了爬虫HTTP会话保持的功能。HTTP连接是无状态的,因此HTTP采用的Cookie和Session来保持状态。一个会话的保持可以简单的理解为Cookie信息的保存和使用。设计中采用一个全局变量来储存会话,达到了会话保持的功能。 本次爬取的对象是教务处和实验选课系统,因此我们需要先进入一站式服务大厅,然后再进入该两个应用。一站式服务大厅及该两个应用的登录授权认证均为单点登录(详细内容在设计总结中有提及),该认证方式会涉及到重定向的问题,返回头带有的重定向直接用requests库即可自动处理了,而js的重定向需要自己处理,实验管理系统登录时便遇到了js的跳转。 静态网页的抓取采用requests库,解析采用的是Xpath解析,用到lxml中的etree。
本次实验让我对python的应用有了进一步的认识,加深了我对python语法的理解并且提高了我的编程思维,更重要的是使我学习到了许多的知识,扩展了自己的知识面,如了解了HTML的结构、JavaScript的执行机制、HTTP协议、Xpath,巩固了BurpSuite抓包、流量分析等知识,同时还巩固了自己密码学相关的知识Kerberos、SSO。 本次实验爬取的对象是学校的教务处课表信息,学校的登陆认证系统采用的是单点登录的方式,涉及的密码学的理论知识点是Kerberos,单点登录的运行原理见图1。为了分析登陆系统的实际业务认证逻辑,我使用了BurpSuite抓包,抓包分析结果如图2。一站式服务大厅和教务处都是属于应用系统中的应用之一,所以登陆认证原理是一样的,并且这两个应用的响应头中带有location(重定向),结合我实际的python爬虫设计,我采用requests库,其请求方法支持重定向,因此登陆大厅和教务处一个请求即可。分析登陆实验选课系统时,我发现其中有一处重定向是js重定向,如图3,requests不支持js的自动解析,因此此处重定向需要我自己解析处理,然后即可登入。认证机制分析完毕便是用python实现爬虫功能,其中需要注意的一个点是会话保持,整个登陆流程(获取验证码、获取加密秘钥和加密模式以和提交登陆信息)需要在一个会话中进行,用一个全局变量保存会话即可。获取HTML之后,我选择用Xpath解析,XPath 是一门在 XML 文档中查找信息的语言。它也支持HTML,因此Xpath能够很快的定位获取DOM(HTML文档)中的各个信息。 本次设计是一次综合知识的实践检验,极大的提升了个人实践能力和加强了多个学科知识的融合。
图 1
图 2
图 3