一、什么是网络蜘蛛
网络蜘蛛(Web Spider)又称为:“网络爬虫”,“机器人”,简称“蜘蛛”。是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。
网络蜘蛛就是一个爬行程序,一个抓取网页的程序。网络蜘蛛与搜索引擎有着比较密切的关系,目前全球知名的搜索引擎google、百度、雅虎等都为各自开发了网络蜘蛛程序。
Google为了获取上亿的网页,设计了一个分布式的爬行系统。一个URL服务器将URL列表提供给网络爬行器。每个爬行器同时保持大约300个网络连接。在最高速度的时候,通过4个爬行器,该系统可以每秒种获取超过100个网页。
影响爬行速度的一个重要因素是DNS查询,为此每个爬行器都要维护一个自己的DNS缓冲。这样每个连接都处于不同的状态,包括DNS查询、连到主机、发送请求、得到响应。这些因素综合起来使得爬行器变成一个非常复杂的系统。它通过异步输入/输出来管理事件,通过一定数量的队列来管理获取网页过程中的状态迁移。
二、抓取网页的策略
在抓取网页的时候,网络蜘蛛一般有两种策略:广度优先和深度优先。
广度优先是指网络蜘蛛会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。这是最常用的方式,因为这个方法可以让网络蜘蛛并行处理,提高其抓取速度。
深度优先是指网络蜘蛛会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。这个方法有个优点是网络蜘蛛在设计的时候比较容易。
两种策略的区别: 由于不可能抓取所有的网页,有些网络蜘蛛对一些不太重要的网站,设置了访问的层数。例如,在右图中,A为起始网页,属于0层,B、C、D、E、F属于第1 层,G、H属于第2层,I属于第3层。如果网络蜘蛛设置的访问层数为2的话,网页I是不会被访问到的。这也让有些网站上一部分网页能够在搜索引擎上搜索到,另外一部分不能被搜索到。对于网站设计者来说,扁平化的网站结构设计有助于搜索引擎抓取其更多的网页。
网络蜘蛛在访问网站网页的时候,经常会遇到加密数据和网页权限的问题,有些网页是需要会员权限才能访问。当然,网站的所有者可以通过协议让网络蜘蛛不去抓取,但对于一些出售报告的网站,他们希望搜索引擎能搜索到他们的报告,但又不能完全免费的让搜索者查看,这样就需要给网络蜘蛛提供相应的用户名和密码。网络蜘蛛可以通过所给的权限对这些网页进行网页抓取,从而提供搜索。而当搜索者点击查看该网页的时候,同样需要搜索者提供相应的权限验证。