文/趙旭 胡璇
面對信息爆炸時(shí)代所帶來的大數(shù)據(jù)沖擊,如何有效獲取與使用網(wǎng)絡(luò)數(shù)據(jù)對于各行各業(yè)已經(jīng)非常重要。網(wǎng)絡(luò)搜索作為政府、企業(yè)及個(gè)人獲取信息的主要途徑,我們必須深刻了解并優(yōu)化其工作方法與效率。生活中常用的各種搜索引擎如百度、Google等,其最底層的工作為網(wǎng)絡(luò)鏈接的爬取,即網(wǎng)絡(luò)爬蟲進(jìn)行數(shù)據(jù)爬取。
網(wǎng)絡(luò)爬蟲又稱網(wǎng)絡(luò)蜘蛛,是按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。百度、谷歌等搜索引擎使用網(wǎng)絡(luò)爬蟲將萬維網(wǎng)上的信息爬取到本地服務(wù)器后再排序推送給用戶。傳統(tǒng)爬蟲從一個(gè)或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,采取深度優(yōu)先或者廣度優(yōu)先策略不斷的抓取網(wǎng)頁URL并將新爬取的URL放入爬取地址隊(duì)列,直到滿足一定的停止條件。
高性能的網(wǎng)絡(luò)鏈接爬取算法應(yīng)當(dāng)具有很好的可伸縮性、“禮貌”性、可定制及分布式爬取等特性,如何有效的將這些特性融合并實(shí)現(xiàn)其價(jià)值均衡具有十分重要的意義,特別是對于行業(yè)內(nèi)的信息連接爬取更加重要。
一個(gè)好的網(wǎng)絡(luò)爬蟲算法應(yīng)當(dāng)很好的解決目標(biāo)的描述、網(wǎng)頁或數(shù)據(jù)的分析與過濾、URL搜索策略這三個(gè)問題。目前的網(wǎng)絡(luò)爬蟲算法主要有通用網(wǎng)絡(luò)爬蟲算法(General Purpose Web Crawler)、聚焦網(wǎng)絡(luò)爬蟲(Focused Web Crawler)、增量式網(wǎng)絡(luò)爬蟲(Incremental Web Crawler)、深層網(wǎng)絡(luò)爬蟲(Deep Web Crawler),實(shí)際的網(wǎng)絡(luò)爬蟲系統(tǒng)通常是幾種爬蟲技術(shù)相結(jié)合實(shí)現(xiàn)的。
通用網(wǎng)絡(luò)爬蟲爬行對象從一些種子 URL擴(kuò)充到整個(gè) Web,主要為門戶站點(diǎn)搜索引擎和大型 Web 服務(wù)提供商采集數(shù)據(jù),爬行范圍和數(shù)量巨大,對于爬行速度和存儲空間要求較高,對于爬行頁面的順序要求相對較低,同時(shí)由于待刷新的頁面太多,通常采用并行工作方式。聚焦網(wǎng)絡(luò)爬蟲又稱主題網(wǎng)絡(luò)爬蟲,是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)頁面的網(wǎng)絡(luò)爬蟲,能夠使用較少硬件和網(wǎng)絡(luò)資源實(shí)現(xiàn)少而快的網(wǎng)頁爬取,但需要準(zhǔn)確定義主題。
增量式網(wǎng)絡(luò)爬蟲是指對已下載網(wǎng)頁采取增量式更新,它只爬行新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁,具有較好的實(shí)時(shí)性,但算法的復(fù)雜度和實(shí)現(xiàn)難度都有很大的增加。深層網(wǎng)絡(luò)爬蟲主要針對那些大部分內(nèi)容不能通過靜態(tài)鏈接獲取的、隱藏在搜索表單后的,只有用戶提交一些關(guān)鍵詞才能獲得的 Web 頁面,具有更好的針對性,但問題在于很多時(shí)候無法獲知頁面的用戶名及密碼等隱私問題而受到限制。
流行的網(wǎng)絡(luò)爬蟲在爬取網(wǎng)頁時(shí)針對的是萬維網(wǎng),但對于某行業(yè)內(nèi)的網(wǎng)絡(luò)鏈接爬取時(shí)需要綜合考慮各種爬取算法的特點(diǎn)以及實(shí)際情況。在進(jìn)行行業(yè)內(nèi)信息爬取策略的定制時(shí),要充分考慮行業(yè)內(nèi)關(guān)鍵詞的設(shè)置,不良信息的過濾,“禮貌”爬取防止被屏蔽,避免過度爬取造成信息泛濫等。這里我們對傳統(tǒng)主題爬取算法進(jìn)行一下優(yōu)化,提高行業(yè)內(nèi)信息爬取效率。
這里我們?yōu)槊恳粋€(gè)源URL設(shè)置一個(gè)層數(shù)屬性L,每爬取一次,該屬性值折半。具體的,初始URL的層數(shù)屬性值L=0,通過第0層爬取到的URL的層數(shù)屬性值設(shè)置為1,通過第1層爬取到的URL的層數(shù)屬性值設(shè)置為2,依次類推。對于每一個(gè)URL作為源地址進(jìn)行網(wǎng)絡(luò)鏈接爬取時(shí),最多保存爬取到的255/L個(gè)URL鏈接,由此來限制爬取到的URL數(shù)量與深度。當(dāng)實(shí)際網(wǎng)頁包含的可爬取的鏈接數(shù)量n大于255/L時(shí),根據(jù)鏈接網(wǎng)頁的主題與開始設(shè)置的關(guān)鍵字比對的相似度決定保存哪一些鏈接與丟棄哪一些鏈接。具體的操作流程描述如下。
(1)設(shè)定行業(yè)關(guān)鍵字;
(2)設(shè)置有限的初始URL并添加至URL隊(duì)列,層數(shù)全部設(shè)置為0;
(3)記錄當(dāng)前時(shí)間t1,檢查爬取到的每一個(gè)URL的關(guān)鍵字匹配程度后決定是否添加到URL隊(duì)列并添加層數(shù)值;
(4)從URL隊(duì)列中取一個(gè)url進(jìn)行主題爬取,將符合要求的新鏈接添加至URL隊(duì)列,其層數(shù)設(shè)置為L(url)+1;
(5)記錄當(dāng)前時(shí)間t2,判斷t2-t1值是否大于一小時(shí),如果大于一小時(shí)則暫停爬取操作一個(gè)小時(shí),并執(zhí)行t1=t2,否則繼續(xù)執(zhí)行第“(3)”步操作。
在進(jìn)行行業(yè)關(guān)鍵字設(shè)置時(shí),除了設(shè)置要設(shè)置有關(guān)的關(guān)鍵字外還要進(jìn)行敏感詞匯的設(shè)置,如果網(wǎng)絡(luò)鏈接中包含敏感詞匯則需要直接丟棄該鏈接。另外,如果所用設(shè)備計(jì)算能力有限的話,時(shí)間間隔可以設(shè)置的長一些,避免浪費(fèi)時(shí)間資源。
隨著網(wǎng)絡(luò)時(shí)代的井噴式信息爆發(fā),利用有效的網(wǎng)絡(luò)爬蟲算法進(jìn)行行業(yè)內(nèi)的信息搜索以進(jìn)一步的分析利用已經(jīng)必不可免,各大機(jī)構(gòu)與院校均有對網(wǎng)絡(luò)爬取策略進(jìn)行相關(guān)的研究?,F(xiàn)有各類爬蟲算法均具有自身的優(yōu)勢與缺點(diǎn),直接套用無法達(dá)到現(xiàn)實(shí)目的,如何根據(jù)自身實(shí)際需要設(shè)計(jì)自己的網(wǎng)絡(luò)鏈接爬取策略并應(yīng)用至關(guān)重要。
上述優(yōu)化策略中的時(shí)間記錄與比對,可以有“禮貌”的進(jìn)行網(wǎng)絡(luò)鏈接爬取,避免被門戶網(wǎng)站的網(wǎng)管系統(tǒng)屏蔽加入和名單。網(wǎng)絡(luò)鏈接層數(shù)屬性的設(shè)置與使用以及將鏈接內(nèi)容與行業(yè)關(guān)鍵字進(jìn)行相似度比較,減少了網(wǎng)絡(luò)鏈接爬取時(shí)的爬取深度,避免因過度爬取造成的信息泛濫。
通過將本文描述的優(yōu)化了的網(wǎng)絡(luò)鏈接爬取策略應(yīng)用到電力行業(yè)的信息系統(tǒng)管理中,收到了很好的效益,效果很好,驗(yàn)證了該策略的可用性及效用性。