2.1.3 蜘蛛是不是和我们一样聪明
尽管搜索引擎在不断地升级算法,但其终究还是程序,因此我们在布局网站结构的时候要尽可能地让蜘蛛能看得懂。每个蜘蛛都有自己的名字,在抓取网页的时候,都会向网站表明自己的身份。蜘蛛在抓取网页的时候会发送一个请求,这个请求中有一个字段为User-agent,用于标识此蜘蛛的身份。例如,谷歌蜘蛛的标识为GoogleBot,百度蜘蛛的标识为BaiduSpider,Yahoo!蜘蛛的标识为Yahoo!Slurp。只要网站上有访问日志记录,网站管理员就能知道哪些搜索引擎的蜘蛛来过,是什么时候来的,以及读取了多少数据,等等。如果网站管理员发现某个蜘蛛有问题,就可以通过其标识来和其所有者联系。
蜘蛛进入一个网站,一般会访问一个特殊的文本文件Robots.txt,这个文件一般放在网站服务器的根目录下,网站管理员可以通过Robots.txt来定义哪些目录蜘蛛不能访问,或者哪些目录对于某些特定的蜘蛛不能访问。例如,有些网站的可执行文件目录和临时文件目录不希望被搜索引擎搜索到,那么网站管理员就可以把这些目录定义为拒绝访问目录。Robots.txt语法很简单,例如,如果对目录没有任何限制,可以用以下两行语句来描述:
当然,Robots.txt只是一个协议,如果蜘蛛的设计者不遵循这个协议,网站管理员也无法阻止蜘蛛对于某些页面的访问,但一般的蜘蛛都会遵循这些协议,而且网站管理员还可以通过其他方式来拒绝蜘蛛对某些网页的抓取。
蜘蛛在下载网页的时候,会去识别网页的HTML代码,在其代码中会有一些meta标签。这些标识可以告诉蜘蛛本网页是否需要被抓取,还可以告诉蜘蛛本网页中的链接是否需要被继续跟踪。例如,标识表示本网页不需要被抓取,但是网页内的链接需要被跟踪。
目前,网站一般都希望搜索引擎能更全面地抓取自己网站的网页,因为这样可以让更多的访问者通过搜索引擎找到此网站。为了让本网站的网页能够被更全面地抓取,网站管理员可以建立一个网站地图(Sitemap)。许多蜘蛛会把sitemap.html文件作为一个网站网页爬取的入口,网站管理员可以把网站内部所有网页的链接放在这个文件里面,那么蜘蛛就可以很方便地把整个网站抓取下来,避免遗漏某些网页,也会减小网站服务器的负担(谷歌专门为网站管理员提供了XML格式的sitemap文件)。
搜索引擎建立网页索引,处理的对象是文本文件。对于蜘蛛来说,抓取下来的网页文件包括各种格式,如HTML、图片、DOC、PDF、多媒体、动态网页及其他格式等。这些文件被抓取下来后,需要把这些文件中的文本信息提取出来。准确提取这些文件的信息,一方面对搜索引擎的搜索准确性有重要作用,另一方面对于蜘蛛正确跟踪其他链接有一定的影响。
对于DOC、PDF等这种由专业厂商提供的软件生成的文件,厂商都会提供相应的文本提取接口。蜘蛛只需要调用这些插件的接口,就可以轻松地提取文件中的文本信息和文件的其他相关信息。
HTML文件则不一样,它有一套自己的语法,通过不同的命令标识符来表示不同的字体、颜色、位置等版式,提取文本信息时需要把这些标识符都过滤掉。过滤标识符并非难事,因为这些标识符都有一定的规则,只要按照不同的标识符取得相应的信息即可。但在识别这些信息的时候,需要同步记录许多版式信息。除了标题和正文,会有许多广告链接及公共的频道链接,这些链接和文本正文一点关系也没有,在提取网页内容的时候,也需要过滤这些无用的链接。例如,某个网站有“产品介绍”频道,因为导航条在网站内的每个网页中都有,若不过滤导航条链接,则在搜索“产品介绍”的时候,网站内的每个网页都会被搜索到,这无疑会带来大量的垃圾信息。过滤这些无效链接需要统计大量的网页结构规律,抽取一些共性,并统一过滤。对于一些重要而结构特殊的网站,还需要个别处理。这就需要蜘蛛的设计要有一定的扩展性。