搜索引擎建立网页索引,处理的对象是文本文件。对于搜索引擎爬虫来说,抓取下来的网页包括各种格式,如html、图片、doc、pdf,多媒体、动态网页及其他格式等。这些文件抓取下来后,需要把这些文件中的文本信息提取出来。准确提取这些文档的信息,一方面对搜索引擎的搜索准确性有重要作用,另一方面对于搜索引擎爬虫正确跟踪其他链接也有一定的影响。
对于doc、pdf等由专业厂商提供的软件生成的文档,厂商都会提供相应的文本提取接口。搜索引擎爬虫只需要调用这些插件的接口,就可以轻松地提取文档中的文本信息和文件相关的其他信息。
HTML等文档不一样,HTML有一套自己的语法,通过不同的命令标识符来表示不同的字体、颜色、位置等版式,提取文本信息时需要把这些标识符都过滤掉。过滤标识符并非难事,因为这些标识符都有一定的规则,只要按照不同的标识符取得相应的信息即可。但在识别这些信息的时候,需要同步记录许多版式信息,例如文字的字体大小、是否是标题、是否是加粗显示、是否是页面的关键词等,这些信息有助于计算单词在网页中的重要程度。同时,对于HTML网页来说,除了标题和正文以外,会有许多广告链接以及公共的频道链接,这些链接和文本正文一点关系也没有,在提取网页内容的时候,也需要过滤这些无用的链接。例如某个网站有“产品介绍”频道,因为导航条在网站内每个网页都有,若不过滤导航条链接,在搜索“产品介绍”的时候,则网站内每个网页都会搜索到,无疑会带来大量垃圾信息。过滤这些无效链接需要统计大量的网页结构规律,抽取一些共性,统一过滤;对于一些重要而结果特殊的网站,还需要个别处理。这就需要搜索引擎爬虫的设计有一定的扩展性。
对于多媒体、图片等文件,一般是通过链接的锚文本(即链接文本)和相关的文件注释来判断这些文件的内容。例如有一个链接文字为“故宫的照片”,其链接指向一张bmp格式的图片,那么搜索引擎爬虫就知道这张图片的内容是“故宫的照片”。这样,在搜索“故宫”和“照片”的时候都能让搜索引擎找到这张图片。另外,许多多媒体文件中都有文件属性,考虑这些属性也可以更好地了解文件的内容。
动态网页一直是网络蜘蛛面临的难题。所谓动态网页,是相对于静态网页而言的,是由程序自动生成的页面,这样的好处是可以快速统一更改网页风格,也可以减少网页所占服务器的空间,但同样给网络蜘蛛的抓取带来一些麻烦。由于开发语言不断增多,动态网页的类型也越来越多,如asp、jsp、php等。这些类型的网页对于搜索引擎爬虫来说,可能还稍微容易一些。搜索引擎爬虫比较难于处理的是一些脚本语言(如VBScript和JaVaScript)生成的网页,如果要完善地处理好这些网页,网络蜘蛛需要有自己的脚本解释程序。对于许多数据是放在数据库的网站,需要通过本网站的数据库搜索才能获得信息,这样给网络蜘蛛的抓取带来很大的困难。对于这类网站,如果网站设计者希望这些数据能被搜索引擎搜索,则需要提供一种可以遍历整个数据库内容的方法。
对于网页内容的提取,一直是搜索引擎爬虫中重要的技术。整个系统一般采用插件的形式,通过一个插件管理服务程序,遇到不同格式的网页采用不同的插件处理。这种方式的好处在于扩充性好,以后每发现一种新的类型,就可以把其处理方式做成一个插件补充到插件管理服务程序中。
由于网站的内容经常在变化,因此搜索引擎爬虫也需要不断地更新其抓取网页的内容,这就需要搜索引擎爬虫按照一定的周期去扫描网站,查看哪些页面是需要更新的页面,哪些页面是新增页面,哪些页面是已经过期的死链接。
搜索引擎的更新周期对搜索引擎搜索的查全率有很大影响。如果更新周期太长,则总会有一部分新生成的网页搜索不到;周期过短,技术实现会有一定难度,而且会对带宽、服务器的资源都有浪费。搜索引擎爬虫并不是所有的网站都采用同一个周期进行更新,对于一些重要的更新量大的网站,更新的周期短,如有些新闻网站,几个小时就更新一次;相反,对于一些不重要的网站,更新的周期就长,可能一两个月才更新一次。
一般来说,搜索引擎爬虫在更新网站内容的时候,不用把网站网页重新抓取一遍,对于大部分网页,只需判断网页的属性(主要是日期),把得到的属性和上次抓取的属性相比较,如果一样则不用更新。