從上一章我們知道,獲取鏈接是爬蟲(chóng)工作的第一步.
除去我們事先給與的鏈接外,大部分鏈接都要靠通過(guò)挖掘現(xiàn)有的鏈接得到,而網(wǎng)上的網(wǎng)頁(yè)很多是重復(fù)的,過(guò)期的和沒(méi)有參考性的。那么,我們?nèi)绾卧谂廊∵^(guò)程中避免出現(xiàn)這些情況呢?我們可以通過(guò)地址去重來(lái)避免抓取的重復(fù)頁(yè)面,然后通過(guò)價(jià)值算法來(lái)提升優(yōu)質(zhì)鏈接的優(yōu)先級(jí)來(lái)避免抓取到無(wú)參考性的和過(guò)期的頁(yè)面.
首先我們來(lái)說(shuō)下地址去重。這指的是由于獲取方式的不固定,那么就有可能存在地址重復(fù)的問(wèn)題,我們可以在鏈接送到下載模塊之前,對(duì)整個(gè)地址池內(nèi)的鏈接進(jìn)行去重操作.這樣我們就可以防止同一個(gè)鏈接反復(fù)多次抓取從而浪費(fèi)資源和性能。
然后我們通過(guò)通過(guò)對(duì)鏈接進(jìn)行價(jià)值估算來(lái)實(shí)現(xiàn)優(yōu)先級(jí)順序.可以根據(jù)權(quán)重來(lái)決定傳遞給下載模塊的鏈接.既然我們目標(biāo)是最短的時(shí)間內(nèi)獲取到最優(yōu)質(zhì)的數(shù)據(jù),那么肯定是高價(jià)值的頁(yè)面具有最高優(yōu)先級(jí).我們可以通過(guò)擬定的權(quán)重(例如數(shù)據(jù)準(zhǔn)確,更新迅速,網(wǎng)頁(yè)接口好等等),將地址分為幾個(gè)檔次,在傳遞鏈接時(shí),優(yōu)先提供價(jià)值高的鏈接。這樣可以有效的提高獲取優(yōu)質(zhì)數(shù)量的效率.
比如說(shuō),我們可以通過(guò)日后講的消息隊(duì)列來(lái)實(shí)現(xiàn)價(jià)值估算。最開(kāi)始,我們給每個(gè)地址加上相同的時(shí)間屬性.該時(shí)間屬性是用來(lái)表示我們應(yīng)該多久重復(fù)來(lái)爬取一次.然后經(jīng)過(guò)幾次測(cè)試后,將更新快的與不更新的區(qū)分開(kāi),最終打上優(yōu)先級(jí).然后在爬蟲(chóng)取出鏈接時(shí),可以根據(jù)優(yōu)先級(jí)來(lái)獲取鏈接.簡(jiǎn)化版流程圖如下:
這流程圖只畫(huà)了了一個(gè)流程,我們可以通過(guò)多次流程來(lái)更精準(zhǔn)的確定各鏈接的優(yōu)先級(jí).
最后的地址模塊內(nèi)部的流程圖就是這樣: