1. 程式人生 > >Python進階之爬蟲url去重(可用於檔案去重)

Python進階之爬蟲url去重(可用於檔案去重)

主要介紹幾個常用和目前瞭解的,當然還有其他方法,這裡只說目前本人自己能實現的幾種方法的基本思想:

基於Hash演算法的儲存。

對每一個給定的URL,都是用一個已經建立好的Hash函式,對映到某個實體地址上。當需要進行檢測URL是否重複的時候,只需要將這個URL進行Hash對映,如果得到的地址已經存在,說明已經被下載過,放棄下載,否則,將該URL及其Hash地址作為鍵值對存放到Hash表中。

這樣,URL去重儲存庫就是要維護一個Hash表,如果Hash函式設計的不好,在進行對映的時候,發生碰撞的機率很大,則再進行碰撞的處理也非常複雜。而且,這裡使用的是URL作為鍵,URL字串也佔用了很大的儲存空間。

基於MD5壓縮對映的儲存。

MD5演算法是一種加密演算法,同時它也是基於Hash的演算法。這樣就可以對URL字串進行壓縮,得到一個壓縮字串,同時可以直接得到一個Hash地址。另外,MD5演算法能夠將任何字串壓縮為128位整數,並對映為實體地址,而且MD5進行Hash對映碰撞的機率非常小,這點非常好。從另一個方面來說,非常少的碰撞,對於搜尋引擎的爬蟲是可以容忍的。況且,在爬蟲進行檢測的過程中,可以通過記錄日誌來儲存在進行MD5時發生碰撞的URL,通過單獨對該URL進行處理也是可行的。

基於布隆過濾器(Bloom Filter)的儲存。

布隆過濾器的基本演算法思想主要是利用一個長度為M的位陣列,且初始化為零,一個元素通過K(K<<M)個雜湊函式進行隨機裝配,並將該位置1,當再有資料字串進來要儲存的時候,比對該位置是否為1,如果是1就捨棄,如果是0則繼續 儲存。以此來達到去重的效果。