论文部分内容阅读
快速增长的网络信息资源已经成为一个巨大的信息宝藏。实际上通用搜索引擎仅能检索到整个网络资源的一小部分信息(称之为Surface Web),而大部分更有价值的信息资源却不能够被通用搜索引擎检索,这些不能被检索到的信息就称为Deep Web。对Deep Web中信息获取的研究已经越来越受到人们的关注。在Deep Web中,有相当一部分内容因为以动态网页的形式存在而不能被有效抓取。究其原因是,目前很多网站通过动态脚本的方式与用户进行交互,特别是以Ajax为代表的技术在网站开发中得到了广泛应用。Ajax技术改变了传统的基于静态页面的网站架构,在提高用户体验度的同时,由于其特性如JavaScript事件执行、状态识别与切换等,导致使用Ajax技术的网站及其后台服务器资源无法被通用网络爬虫抓取,成为了不同于Surface Web的Deep Web资源。针对如何获取这类使用Ajax技术的网站信息的问题研究将变得越来越重要,因此,实现此类信息的获取成为了本文工作的出发点。本文的主要研究内容如下:(1)研究了通用网络爬虫的体系结构、工作原理,重点分析其抓取Ajax网页所面临的JavaScript执行、状态识别与切换等问题。基于以上研究,本文提出了一种基于状态仓库的Deep Web网络爬虫(即AjaxFetcher)的体系结构及其基本算法。(2)该爬虫通过加入嵌入式浏览器的功能,可以模拟执行页面中的JavaScript事件,接受服务器端的异步响应,通过分析页面DOM结构的变化识别新生成的状态,逐步生成Ajax网站的状态仓库,该状态仓库呈现出了Ajax网站的结构及其各个页面状态信息。(3)由于在Ajax分页抓取中对同一个函数的每次调用都将导致同样的服务器端响应,本文将包含Ajax请求的JavaScript函数标记为热点,通过缓存数据响应策略的方法改进上述基本算法,从而减少与服务器端通信所带来的性能损耗。最后本论文通过设计对比实验来验证提出的新型网络爬虫的有效性,实验结果表明利用该爬虫能够从Ajax页面更多的获取后台Deep Web资源。