摘要:
现在的Web应用程序中,由于JavaScript口动态文档对象模型具有的高交互性和快速的应答能力,使得它们在Web应用程序端得到越来越广泛的应用。近年来随着Web 2.0的兴起,在网页开发中也开始大量的运用Ajax技术。传统的Web站点中每一个URL标志一个静态页面,而在Ajax应用中,一个页面可能有很多状态变化,这种状态变化并不能通过页面的URL体现出来,而是通过文档对象模型(DOM)结构的动态变化来展现,所以对Ajax程序的爬取不同于对传统的网页爬取。现有的一些对Ajax网页爬取的算法存在爬取准确度不高或者状态爆炸等的问题,本论文结合Ajax动态网页的特点,设计并实现了一个可以爬取Ajax动态网页的爬取系统。本论文提出了基于用户界面状态改变的Ajax动态网页爬取算法,通过使用算法中状态的转换来模拟动态网页中通过触发动态事件造成的网页结构的改变。该算法首先初始化空的状态图及爬行队列,通过给定的URL获取初始页面的DOM树,通过遍历DOM树,算法识别出能够引起状态改变的候选可点击元素,并依次触发这些候选元素下的事件,然后进行状态比较,发现新的可能到达的状态,逐步更新状态图。为了能够触发同一状态下对应的所有绑定事件,该算法实现了状态回退的方法,用来判别某个状态下是否存在未被检查到的可点击元素存在。为了提高对Ajax动态网页爬取的性能,本文又提出了并行爬取Ajax动态网页的算法。该算法采用并行爬取的方法来进行状态爬取,通过控制器来监测所有的爬取节点,每个爬取节点负责自己对应的状态机,从浏览器池中运行自己的浏览器实例。控制器采用动态分配任务的方法给所有参与的爬取节点合理分配爬取任务,当爬取节点发现一个新的状态后,如果在先前的状态下还有未被识别的候选可点击元素存在,那么会沿着这个未被识别的状态,分配另一个线程新的线程进行探索,这种方法下就不需要浏览器重新加载和状态回退,极大的缩短了算法爬取的时间。最后,论文把算法应用于一些实际的Web动态网页中,通过实验对算法进行了评估和分析,验证了算法的可行性和有效性。
展开