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