AJAX动态网页信息提取原理
考察网页信息提取软件工具包MetaSeeker的实现原理可以看出:MetaSeeker使用XPath和XSLT分析网页DOM并提取网页信息,虽然也可以使用一些字符串处理函数自定义XPath表达式, 但是总体上说,与使用正则表达式分析HTML文档的方法相比区别十分明显。基于DOM的提取能够比较容易地提取AJAX动态网页信息,因为,无论DOM的 内容来自于静态网页、服务器动态网页(例如,PHP、ASP、JSP等)还是浏览器端动态网页(例如,Javascript/AJAX),只要内容需要 DOM进行展现,都可以使用一致的方法进行提取。
然而,Javascript编程语言的逻辑表述能力远远高于HTML,所以,存在各种各样的AJAX动态网页信息生成方式,使网页信息提取过程复杂 化了,不可能一下子开发出一个一劳永逸的信息提取软件来。例如,MetaSeeker早在V1.0版本就能够提取很多Javascript生成的内容,比 方说,提取Google AdSense广告用于商业情报挖掘,但是,不能准确提取QQ群聊天记录,虽然都是AJAX/Javascript动态生成的网页内容,而且都通过DOM 进行展现,但是,构建DOM结构的方式和时机不同。例如,Google广告的Javascript代码在加载HTML文档时就执行,执行完才算完全加载了 HTML文档(虽然Google广告放在单独的IFRAME/FRAME框架中与主网页HTML异步加载,但是MetaSeeker等待整个页面的 load事件),而QQ群的Javascript代码是在加载完HTML文档后,很可能在onload()事件处理函数中构建DOM结构,所以网页信息提 取时机不能通过监视load事件来确定。甚至有些网页还会使用Javascript的setTimeout或者setInterval函数自动地周期性刷 新网页内容,也影响到网页信息提取策略。同时,这些情形很容易发展出衍生情形来,例如,假设某段代码在加载HTML文档过程中执行,如果使用同步的 XMLHttpRequest与服务器通信,是一种情况,如果使用异步的XMLHttpRequest,就会衍生出另外一种情形,这进一步增加了网页信息 提取的复杂性。
MetaSeeker V4.1.1进行了增强,上述情形都能够处理,而且,后续版本还会持续增强以应对其它新发现的AJAX编程模式,详细使用方法和原理介绍参见用户手册#怎样提取AJAX网页信息。