只所以想要写这篇文章,是因为之前碰到一土人,他需要定期的去从网页上扒数据,然后他用写了两个jsp网页,没错!就是JSP,为此他还装上了一个resin.大概他还不知道有个玩意叫J2SE吧.这俩jsp页面里面充满了indexOf,substring这类的代码,这个角度也证实这网页结构实在是简单。

解析网页是spider程序的主要工作,但不是全部,本文主要就讨论解析网页的相关技术。解析网页就是从html文本中提取数据,而html又和xml 结合,称为 xhtml,简单说就是html文本可以解析成dom树,因此,从网页中提取数据就有两种办法

  • 用正则表达式提取数据

  • 把html解析成dom树

这两种方法要结合起来使用,正则表达式效率会比较高,但是数据列表型网页就很能写出匹配正则表达式,解析这类型网页,用dom树就比较方便

网页就是html格式的文本,它的标准由w3c维护,但全世界的网页,能够通过w3c validate的寥寥无几,连各种主流浏览器本身都不完全支持这个标准,更何况这些由形形色色开发人员编写出来的网页。最常见的例子比如说:tag里面的属性没有用引号括起来,各个tag之间有多余空格的。

这样的网页,xml解析器会认为是not well form xml。面对这样的情况,很自然的想法是解析之前对网页做预处理, 对垂直搜索引擎来说,需要采集的都是固定的网站,可以每个网站做一个模版,有针对性的处理,这个也是垂直搜索引擎技术含量远低于通用搜索引擎的一个原因

另外有一个现象,各种brower都有一定的容错处理能力,你可以打开notepad,写一类似如下的一段代码

not yet

没有< html >,也没有< body >,用friefox打开,照样能够正常显示。这就是用浏览器来做爬虫的原因,用firefox来帮忙处理不符合标准的网页。这样做有两个问题:

  • js写大段代码,开发效率,调试效率,可维护性都非常差

  • 搜索引擎要的瓶颈,或者说技术核心是如何处理海量的数据,js的效率非常低,低到做垂直搜索都不能用的地步

想到用firefox插件的形式,是完全没有认清楚问题的关键。在搜索引擎或者数据挖掘中,要解决的关键问题是如何有效的处理海量数据数据提取在spider程序中只能算体现一些编程的技巧。另外,依托浏览器的js代码,解析html的手段多了一点,除了用正则表达式,dom树,还可以用css selector,xpath等方式,这点的确很省事。

本文地址: http://lutaf.com/34.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接