PageRank是一种著名的链接分析算法,可以用来衡量网页的重要性。很自然地,可以想到用PageRank的思想来对URL优先级进行排序。但是这里有个问题,PageRank是个全局性算法,也就是说当所有网页都下载完成后,其计算结果才是可靠的,而爬虫的目的就是去下载网页,在运行过程中只能看到一部分页面,所以在抓取阶段的网页是无法获得可靠PageRank得分的。
如果 我们仍然坚持在这个不完整的互联网页面子集内计算PageRank呢?这就是非完全PageRank策略的基本思路:对于已经下载的网页,加上待抓取URL队列中的URL一起,形成网页集合,在此集合内进行PageRank计算,计算完成后,将待抓取URL队列里的网页按照PageRank得分由高到低排序,形成的序列就是爬虫接下来应该依次抓取 的URL列表。这也是为何称之为“非完全PageRank”的原因。
如果 每次新抓取到一个网页,就将所有已经下载的网页重新计算新的非完全PageRank值,明显效率太低,在现实 中是不可行的。一个折中的办法是:每当新下载的网页攒免K个,然后将所有下载页面重新计算一遍新的非完全PageRank。这样的计算效率还勉强能够接受,但是又引来了新的问题:在展开下一轮PageRank计算之前,从新下载的网页抽取出包含的链接,很有可能这些链接 的重要性非常高,理应优先下载,这种情况该如何解决:非完全PageRank赋予这些新抽取出来但是又没有PageRank值的网页一个临时PageRank值,将这个网页的所有入链传导的PageRank值汇总,作为临时PageRank值,如果 这个值比待抓取URL队列中已经计算出来PageRank值的网页高,那么优先下载这个URL。