基于動態可分裂Bloom Filter的網絡爬蟲URL去重方法
【技術領域】
[0001] 本發明涉及一種網絡爬蟲的URL去重方法,該方法可用于實現大規模、分布式的 高性能網絡爬蟲應用,具體是一種基于動態可分裂Bloom Filter的網絡爬蟲URL去重方 法,屬于互聯網技術領域。
【背景技術】
[0002] 網絡爬蟲(Web Crawler)是很多互聯網信息采集系統的重要組成部分,它以網頁 的URL基礎,能夠依據一定的規則自動爬行互聯網中的網頁。由于互聯網中的URL數量數 以億計,并且不同URL之間相互鏈接,所以為了避免重復爬行相同的URL,網絡爬蟲在爬行 過程中需要判斷當前待爬行URL是否已經被爬行過,該過程稱為URL去重。實現URL去重 的關鍵在于,如何將已經爬行過的URL信息存儲到一個集合中,并保證該集合具有良好的 查詢性能。URL去重是否高效是影響信息采集系統效率的一個關鍵因素。
[0003] Bloom Filter是支持URL去重的一種有效解決方案。經典的Bloom Filter由1 個二進制數組和k個哈希映射函數(記為MapHash)組成,其結構如圖1所示,它可用來快 速檢測一個元素是否屬于給定集合。圖1是一個經典的Bloom Filter,其二進制數組長度 為12,用到3個哈希映射函數,當向該Bloom Filter插入xjt,首先用3個哈希映射函數 對Xi進行3次哈希計算,假定計算結果分別是0、3和6,則只需要把二進制數組中的第0位、 3位和6位置為1 ;插入&的過程與之類似。當查詢x ^寸,同樣用3個哈希映射函數對x i 進行3次哈希計算,然后查詢二進制數組中的相應位是否都是1。由圖可知,Xi在該Bloom Filter之中,而x k不在該Bloom Filter之中。若一個Bloom Filter的二進制數組長度為 m,則它的每一個哈希映射函數的值域都是S = {0, 1,2, ,哈希映射函數可以直接通 過常見的哈希函數(如MD5、SHA、MurmurHash、BKDRHash等)對m取模來實現。一般在向 一個數據集合插入某數據元素時,對應地在Bloom Filter中使用k個哈希映射函數對該數 據元素進行k次哈希計算,并且將二進制數組中以這k個哈希計算結果為下標的所有二進 制位置為1。那么,當查詢某數據元素是否在數據集合中時,只需使用k個哈希映射函數對 該數據元素進行k次哈希計算,然后查看Bloom Filter的二進制數組中與這k個哈希計算 結果對應的二進制位的取值,只有當它們都為1時才判定該數據元素在集合中。總的來說, Bloom Filter是一個空間效率和時間效率都很高的數據結構。但是,如果某個元素經k次 哈希計算結果所對應的k個二進制位,已經被集合中之前插入的其他元素置為1時,查詢該 元素時會發生假陽性誤判。Bloom Filter的假陽性誤判率的大小,主要取決于集合的大小、 二進制數組的長度以及哈希映射函數的個數等因素。
[0004] 目前已有的一些基于Bloom Filter的URL去重方案,在效率、可擴展性和性能等 方面存在欠缺。如Internet Archive爬蟲使用32KB的Bloom Filter來存儲每個網站的 所有URL。Apoide爬蟲使用8KB的Bloom Filter來存儲每個網站的所有URL,并且根據網 站域名的哈希值來決定某一條URL具體存儲在哪一個Bloom Filter中。總的來說,這些方 案中的Bloom Filter組織方式相對比較固定。對于一些大型門戶網站(如新浪網、新華 網等)而言,由于該域名下的URL數目眾多,常常難以使用一個長度有限的固定大小Bloom Filter來存儲;而對于一些小規模的網站,采用過大的Bloom Filter勢必引起存儲空間的 浪費。另外,一些對處理性能要求較高的信息采集系統,往往會在網絡分布環境中同時部署 大量網絡爬蟲進行網頁的并行爬行。針對這種應用場景中的URL去重問題,現有的Bloom Filter及它的一些改進方案大多難以適應。
【發明內容】
[0005] 發明目的:針對現有技術中存在的問題與不足,本發明提供了一種基于動態可 分裂Bloom Filter的網絡爬蟲URL去重方法。該方法的基礎是一個動態可分裂Bloom Filter (簡記DSBF),它與Interner Archive爬蟲和Apoide爬蟲中均勾負擔URL存取任務 的固定結構Bloom Filter不同,而是具有可按需靈活分裂成多層的動態可擴展結構。基于 動態可分裂Bloom Filter實現網絡爬蟲URL去重,既可保證當已處理的URL數目不斷增大 時,仍然能夠把Bloom Filter的假陽性誤判率控制在給定范圍內,又能將讓Bloom Filter 具有易于分布實現的靈活存儲結構,從而更加適合于構造大規模、分布式、多網絡爬蟲的并 行處理環境,支持互聯網海量網頁信息的高效采集和處理。
[0006] 技術方案:一種基于動態可分裂Bloom Filter的網絡爬蟲URL去重方法,包括:
[0007] (1)動態可分裂Bloom Filter采用樹狀的分層存儲結構,動態可分裂Bloom Filter中用到兩種哈希函數,一種是經典Bloom Filter中的哈希映射函數,另一種是新引 入的哈希定位函數(記為LocHash)。樹根(記為第0層)中存放一個哈希定位函數。在除樹 根外的各層中,每一個葉結點中存放一個經典的Bloom Filter (稱為葉片Bloom Filter), 它用于記錄網絡爬蟲已經爬取過的URL信息;每一個非葉結點中存放一個哈希定位函數, 非葉結點通過它把URL進一步導向其下一層的對應子結點。在動態可分裂Bloom Filter 中,為支持葉結點的靈活分裂,每個葉片Bloom Filter都會關聯一個URL集合,它的元素是 已經插入到該葉片Bloom Filter中的所有URL。基于動態可分裂Bloom Filter的網絡爬 蟲URL去重方法主要涉及4種操作,包括初始化、插入過程、分裂過程和查詢過程等。
[0008] (2)動態可分裂Bloom Filter的初始化過程。首先,根據待處理的URL數目的預 估值,確定樹的第一層結點的個數。計算方法如下:假設需要存儲的URL個數為n,而每一 個葉片Bloom Filter中的二進制數組長度是m,并且要求假陽性誤判率低于f。則動態可 分裂Bloom Filter的第一層的結點個數c :
【主權項】
1. 一種基于動態可分裂BloomFilter的網絡爬蟲URL去重方法,其特征在于,包括如 下步驟: (1) 首先要構造一個動態可分裂BloomFilter,它的各個葉片BloomFilter的二進 制數組采用Redis數據庫進行存儲,根據網絡爬蟲應用的規模和特征,確定適合葉片Bloom Filter的二進制數組的長度m,使之小于運行網絡爬蟲的計算機的內存大小; (2) 結合網絡爬蟲的應用需求和爬取策略,分析互聯網中待爬網站及Web頁面的組織 規律,從而預估網絡爬蟲應用所需處理的URL數量n;然后,根據m、n、以及假陽性誤判率上 限f,計算出動態可分裂Bloom Filter的第一層結點個數c、每個葉片Bloom Filter所需 的哈希映射函數個數k以及它最大能存儲的URL個數u; (3) 根據參數m的值,選取k個值域為{0,1,2,…,m-1}的哈希函數,它們充當第一層 c個葉片BloomFilter的哈希映射函數;同時,為動態可分裂BloomFilter的根結點選取 一個值域為{〇, 1