PageRank是一種著名的鏈接分析算法,可以用來(lái)衡量網(wǎng)頁(yè)的重要性。很自然地,可以想到用PageRank的思想來(lái)對(duì)URL優(yōu)先級(jí)進(jìn)行排序。但是這里有個(gè)問題,PageRank是個(gè)全局性算法,也就是說(shuō)當(dāng)所有網(wǎng)頁(yè)都下載完成后,其計(jì)算結(jié)果才是可靠的,而爬蟲的目的就是去下載網(wǎng)頁(yè),在運(yùn)行過程中只能看到一部分頁(yè)面,所以在抓取階段的網(wǎng)頁(yè)是無(wú)法獲得可靠PageRank得分的。
如果 我們?nèi)匀粓?jiān)持在這個(gè)不完整的互聯(lián)網(wǎng)頁(yè)面子集內(nèi)計(jì)算PageRank呢?這就是非完全PageRank策略的基本思路:對(duì)于已經(jīng)下載的網(wǎng)頁(yè),加上待抓取URL隊(duì)列中的URL一起,形成網(wǎng)頁(yè)集合,在此集合內(nèi)進(jìn)行PageRank計(jì)算,計(jì)算完成后,將待抓取URL隊(duì)列里的網(wǎng)頁(yè)按照PageRank得分由高到低排序,形成的序列就是爬蟲接下來(lái)應(yīng)該依次抓取 的URL列表。這也是為何稱之為“非完全PageRank”的原因。
如果 每次新抓取到一個(gè)網(wǎng)頁(yè),就將所有已經(jīng)下載的網(wǎng)頁(yè)重新計(jì)算新的非完全PageRank值,明顯效率太低,在現(xiàn)實(shí) 中是不可行的。一個(gè)折中的辦法是:每當(dāng)新下載的網(wǎng)頁(yè)攢免K個(gè),然后將所有下載頁(yè)面重新計(jì)算一遍新的非完全PageRank。這樣的計(jì)算效率還勉強(qiáng)能夠接受,但是又引來(lái)了新的問題:在展開下一輪PageRank計(jì)算之前,從新下載的網(wǎng)頁(yè)抽取出包含的鏈接,很有可能這些鏈接 的重要性非常高,理應(yīng)優(yōu)先下載,這種情況該如何解決:非完全PageRank賦予這些新抽取出來(lái)但是又沒有PageRank值的網(wǎng)頁(yè)一個(gè)臨時(shí)PageRank值,將這個(gè)網(wǎng)頁(yè)的所有入鏈傳導(dǎo)的PageRank值匯總,作為臨時(shí)PageRank值,如果 這個(gè)值比待抓取URL隊(duì)列中已經(jīng)計(jì)算出來(lái)PageRank值的網(wǎng)頁(yè)高,那么優(yōu)先下載這個(gè)URL。