傅一平
聚焦爬蟲技術(shù)
聚焦網(wǎng)絡(luò)爬蟲也就是主題網(wǎng)絡(luò)爬蟲,它增加了鏈接評(píng)價(jià)和內(nèi)容評(píng)價(jià)模塊,其爬行策略實(shí)現(xiàn)要點(diǎn)就是評(píng)價(jià)頁(yè)面內(nèi)容以及鏈接的重要性。
基于鏈接評(píng)價(jià)的爬行策略,主要是以Web頁(yè)面作為半結(jié)構(gòu)化文檔,其中擁有很多結(jié)構(gòu)信息可用于評(píng)價(jià)鏈接重要性。還有一個(gè)是利用Web結(jié)構(gòu)來評(píng)價(jià)鏈接價(jià)值的方法,也就是HITS法,通過計(jì)算每個(gè)訪問頁(yè)面的Authority權(quán)重和Hub權(quán)重來決定鏈接訪問順序。
而基于內(nèi)容評(píng)價(jià)的爬行策略,主要是將與文本相似的計(jì)算法加以應(yīng)用。Fish-Search算法就是把用戶輸入查詢?cè)~當(dāng)作主題,在算法的進(jìn)一步改進(jìn)后,通過Shark-Search算法就能利用空間向量模型計(jì)算頁(yè)面和主題相關(guān)度大小。
而面向主題爬蟲與面向需求爬蟲會(huì)針對(duì)某種特定的內(nèi)容去爬取信息,而且會(huì)保證信息和需求盡可能相關(guān)。
通用爬蟲技術(shù)
通用爬蟲技術(shù)也就是全網(wǎng)爬蟲,其實(shí)現(xiàn)過程如下。
第一,獲取初始URL。初始URL地址可以由用戶人為指定,也可以由用戶指定的某個(gè)或某幾個(gè)初始爬取網(wǎng)頁(yè)決定。
第二,根據(jù)初始的URL爬取頁(yè)面并獲得新的URL。獲得初始的URL地址之后,需要先爬取對(duì)應(yīng)URL地址中的網(wǎng)頁(yè),接著將網(wǎng)頁(yè)存儲(chǔ)到原始數(shù)據(jù)庫(kù)中,并且在爬取網(wǎng)頁(yè)的同時(shí),發(fā)現(xiàn)新的URL地址,并將已爬取的URL地址存放到一個(gè)URL列表中,用于去重及判斷爬取的進(jìn)程。
第三,將新的URL放到URL隊(duì)列中,再于第二步內(nèi)獲取下一個(gè)新的URL地址之后,再將新的URL地址放到URL隊(duì)列中。
第四,從URL隊(duì)列中讀取新的URL,并依據(jù)新的URL爬取網(wǎng)頁(yè),同時(shí)從新的網(wǎng)頁(yè)中獲取新的URL并重復(fù)上述的爬取過程。
第五,滿足爬蟲系統(tǒng)設(shè)置的停止條件時(shí),停止爬取。在編寫爬蟲的時(shí)候,一般會(huì)設(shè)置相應(yīng)的停止條件。如果沒有設(shè)置停止條件,爬蟲便會(huì)一直爬取下去,一直到無法獲取新的URL地址為止,若設(shè)置了停止條件,爬蟲則會(huì)在停止條件滿足時(shí)停止爬取。
通用爬蟲技術(shù)應(yīng)用有著不同的爬取策略,其中的廣度優(yōu)先策略以及深度優(yōu)先策略都比較關(guān)鍵,深度優(yōu)先策略的實(shí)施是依照深度從低到高的順序來訪問下一級(jí)網(wǎng)頁(yè)鏈接。
增量爬蟲技術(shù)
某些網(wǎng)站會(huì)定時(shí)在原有網(wǎng)頁(yè)數(shù)據(jù)的基礎(chǔ)上更新一批數(shù)據(jù)。例如某電影網(wǎng)站會(huì)實(shí)時(shí)更新一批最近熱門的電影,小說網(wǎng)站會(huì)根據(jù)作者創(chuàng)作的進(jìn)度實(shí)時(shí)更新最新的章節(jié)數(shù)據(jù)等。在遇到類似的場(chǎng)景時(shí),便可以采用增量式爬蟲。
增量爬蟲技術(shù)就是通過爬蟲程序監(jiān)測(cè)某網(wǎng)站數(shù)據(jù)更新的情況,以便可以爬取到該網(wǎng)站更新后的新數(shù)據(jù)。
關(guān)于如何進(jìn)行增量式的爬取工作,以下給出3種檢測(cè)重復(fù)數(shù)據(jù)的思路。
在發(fā)送請(qǐng)求之前判斷這個(gè)URL是否曾爬取過;
在解析內(nèi)容后判斷這部分內(nèi)容是否曾爬取過;
寫入存儲(chǔ)介質(zhì)時(shí)判斷內(nèi)容是否已存在于介質(zhì)中。
第一種思路適合不斷有新頁(yè)面出現(xiàn)的網(wǎng)站,比如小說的新章節(jié)、每天的實(shí)時(shí)新聞等。
第二種思路則適合頁(yè)面內(nèi)容會(huì)定時(shí)更新的網(wǎng)站。
第三種思路則相當(dāng)于最后一道防線,這樣做可以最大限度地達(dá)到去重的目的。
不難發(fā)現(xiàn),實(shí)現(xiàn)增量爬取的核心是去重,目前存在2種去重方法。
第一,對(duì)爬取過程中產(chǎn)生的URL進(jìn)行存儲(chǔ),存儲(chǔ)在Redis的set中。當(dāng)下次進(jìn)行數(shù)據(jù)爬取時(shí),首先在存儲(chǔ)URL的set中對(duì)即將發(fā)起的請(qǐng)求所對(duì)應(yīng)的URL進(jìn)行判斷,如果存在則不進(jìn)行請(qǐng)求,否則進(jìn)行請(qǐng)求。
第二,對(duì)爬取到的網(wǎng)頁(yè)內(nèi)容進(jìn)行唯一標(biāo)識(shí)的制定(數(shù)據(jù)指紋),然后將該唯一標(biāo)識(shí)存儲(chǔ)至Redis的set中。當(dāng)下次爬取到網(wǎng)頁(yè)數(shù)據(jù)的時(shí)候,在進(jìn)行持久化存儲(chǔ)之前,可以先判斷該數(shù)據(jù)的唯一標(biāo)識(shí)在Redis的set中是否存在,從而決定是否進(jìn)行持久化存儲(chǔ)。
深層網(wǎng)絡(luò)爬蟲技術(shù)
在互聯(lián)網(wǎng)中,網(wǎng)頁(yè)按存在方式可以分為表層網(wǎng)頁(yè)和深層網(wǎng)頁(yè)兩類。
所謂的表層網(wǎng)頁(yè),是指不需要提交表單,使用靜態(tài)鏈接就能夠到達(dá)的靜態(tài)頁(yè)面。而深層網(wǎng)頁(yè)則隱藏在表單后面,不能通過靜態(tài)鏈接直接獲取,是需要提交一定的關(guān)鍵詞后才能夠獲取到的頁(yè)面,深層網(wǎng)絡(luò)爬蟲最重要的部分即為表單填寫部分。
在互聯(lián)網(wǎng)中深層網(wǎng)頁(yè)的數(shù)量往往要比表層網(wǎng)頁(yè)的數(shù)量多很多,故而,我們需要想辦法爬取深層網(wǎng)頁(yè)。
深層網(wǎng)絡(luò)爬蟲的基本構(gòu)成包括:URL列表、LVS列表(LVS指的是標(biāo)簽/數(shù)值集合,即填充表單的數(shù)據(jù)源)、爬行控制器、解析器、LVS控制器、表單分析器、表單處理器以及響應(yīng)分析器。
深層網(wǎng)絡(luò)爬蟲的表單填寫有2種類型:
基于領(lǐng)域知識(shí)的表單填寫(建立一個(gè)填寫表單的關(guān)鍵詞庫(kù),在需要時(shí)根據(jù)語(yǔ)義分析選擇對(duì)應(yīng)的關(guān)鍵詞進(jìn)行填寫);
基于網(wǎng)頁(yè)結(jié)構(gòu)分析的表單填寫,一般在領(lǐng)域知識(shí)有限的情況下使用,這種方式會(huì)根據(jù)網(wǎng)頁(yè)結(jié)構(gòu)進(jìn)行分析,并自動(dòng)進(jìn)行表單填寫。
計(jì)算機(jī)與網(wǎng)絡(luò)2021年6期