搜索引擎处理的主要对象是海量的网页,一方面为了节省带宽、计算和存储资源,另一方面是为了利用有限的资源抓取到最有价值的网页以满足用户搜索需求,所以在搜索引擎在处理海量网页的时候会有一定的策略性。本文主要简单介绍了宽度(广度)优先,兼顾深度的遍历策略、不重复抓取策略、大站优先策略、非完全PageRank策略、OCIP策略、合作抓取策略等主流的网页抓取策略。
1、宽度(广度)优先,兼顾深度的遍历策略;
① 采用广度优先的原因:
重要的网页往往离种子站点距离较近;万维网的深度没有我们想象的那么深,但却出乎意料地宽(中文万维网直径长度只有17,即任意两个网页之间点击17次后便可以访问到); 宽度优先有利于多爬虫合作抓取;
② 广度优先的存在不利结果:
容易导致爬虫陷入死循环,不该抓取的反复抓取; 应该抓取的没有机会抓取;
③ 解决以上两个缺点的方法是深度抓取策略(Depth-First Trsversal)和不重复抓取策略
④ 为了防止爬虫无限制地宽度优先抓取,必须在某个深度上进行限制,达到这个深度后停止抓取,这个深度就是万维网的直径长度。当最大深度上停止抓取时,那些深度过大的未抓取网页,总是期望可以从其他种子站点更加经济地到达。限制抓取深度会破坏死循环的条件,即使出现循环也会在有限次后停止。
⑤评价: 宽度(广度)优先,兼顾深度的遍历策略,可以有效保证抓取过程中的封闭性,即在抓取过程(遍历路径)中总是抓取相同域名下的网页,而很少出现其他域名下的网页。
2、不重复抓取策略
保证一个变化不大的网页只抓取一次即可,防止重复抓取占用大量CPU和带宽资源,从而集中有限的资源区抓取更重要、质量更高的网页。
3、大站优先策略(Larser Site First) 通常大型网站都是优质的内容,网页质量一般较高,以网站为单位来衡量网页重要性,是有一定依据的。对于待抓取URL队列中的网页,根据等待下载的页面多少来判断下载优先级。
4、非完全PageRank策略(Partial PageRank)
对于已经下载的网页(不完整的互联网页面的子集)内,加上待抓取的URL队列中的URL一起,形成网页集合,在此集合内部进行PageRank计算;计算完成以后,将待抓取URL队列里的网页按照PageRank得分由高到低排序,形成序列就是爬虫接下来应该依次抓取的URL列表。 由于PageRank是一个全局算法,就是当所有网页都被下载完成以后,其计算结果才是可靠的,但是爬虫在抓取过程中只能接触到一部分网页,所以在抓取阶段的网页时无法进行可靠的PageRank计算的,所以叫做非完全PageRank策略。
5、OCIP策略(Online Page Importance Computation)
OCIP字面含义为“在线页面重要性计算”,算是一种改进的PageRank算法。算法开始前,每个互联网页面被赋予相同的数值,每当下载了某个页面P后,P将自己拥有的数值平均分配给页面中包含的链接,同时清空自己的数值。对于待抓取URL队列中的网页,根据其手头数值大小排序,优先下载数值较大的网页。
6、合作抓取策略(抓取提速策略)
增加爬虫数量可以提高总体抓取速度,但需要将工作量分解给不同的网页爬虫,以保证分工明确,防止出现多个爬虫抓取相同的页面,浪费资源。 ① 通过web主机的IP地址来分解,让某个爬虫仅抓取某个地址段的网页 对于中小型网站,出于经济的考虑,通常会在一台服务器中提供不同的web服务,这样就出现多个域名对应一个IP段的情况;但新浪、搜狐等大型网站通常采用负载均衡的IP组技术,同样的域名对应多个IP地址。所以这种方式并不方便 ② 通过网页域名来分解,使某个爬虫仅抓取某个域名段的网页 将不同域名分配给不同爬虫抓取,某一个爬虫只抓取固定域名集合下的网页;这样保证不重复抓取大型网站的网页,中小型网站即便重复抓取也可以接受的策略分配任务。所以,为了抓取大网站,按照域名分解的策略更加合理。 内容比较教条化,主要用于梳理常识使用。