伴随着以Ajax驱动为代表的所谓Web 2.0应用的大规模流行,一系列巨大的新挑战也开始加速降临到目前搜索引擎的头上,一个新“爬虫”机制的建立已迫在眉睫。究其原因,我尝试用简单的语言分析如下:
- Ajax应用颠覆了以往基于纯HTTP请求/响应协议的“爬虫”机制,即默认所有的页面资源都是直接由超级链接所触发并指向的,现有的“爬虫”只需模拟用户的超级链接请求并解析对应的响应页面,然后再分析页面内容、语义以及衍生的超级链接,以此进行“爬网”。
- 所谓Ajax,即Asychronous Javascript and XML,与以往应用的最大不同之处在于将超级链接驱动的请求/响应更多地改用了Javascript驱动的异步请求/响应。而对于现有的“爬虫”一般来说,它们对Javascript是缺乏语义理解的,它们很难再去模拟触发Javascript的异步调用并解析返回的异步回调逻辑和内容。
- 对于传统的Web应用“爬虫”来说,它们默认每个页面的DOM结构是相对静态不变的,而这个前提条件在新的Ajax应用中再次被颠覆,对于用户的操作,Javascript会对DOM结构进行大量地变动,甚至页面所有的内容都是通过Javascript直接从服务器端读取并动态绘制出来的。
对于以上的变化和新挑战,Shreeraj Shah在Infosec Writers上发表了一篇名为“Crawling Ajax-driven Web 2.0 Applications”的论文。
在文中,作者指出传统的“爬虫”引擎大都是协议驱动的,而新的“爬虫”引擎需要的是事件驱动。在新的引擎中,要做到事件驱动,需要考虑以下三大关键问题:
- Javascript的交互分析和解释
- DOM事件的处理和解释分发
- 动态DOM内容语义的抽取
另外,作者使用了rbNarcissus, Watir和Ruby语言和工具对这些问题和可能的解决方案进行了演示。有兴趣的可以去细细品读,再此就不一一介绍了。
在新一代或者说下一代Web应用中,这个“爬虫”机制的问题除了在Ajax中存在之外,在其他的Flash/Flex以及WPF/E, XUL应用等也是普遍存在的。而前对于Flash/Flex来说,问题可能更为严重,因为所有的Actionscript代码是编译执行的,这个在效率提高的同时,又无疑带给了“爬虫”们更为不可思议的持续挑战!
Tag标签:
ajax 爬虫