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