url去重

常見URL過濾方法

1 直接查詢比較

假設要存儲url A,在入庫前首先查詢url庫中是否存在 A,如果存在,則不入庫,否則入庫。
這種方法準確性高,但是一旦數據量變大,佔用的存儲空間也變大,同時,由於要查庫,數據一多,查詢時間變長,存儲效率下降。

2 基於hashlib(MD5,SHA1摘要算法)的存儲

對於給定的url,通過hash函數生成對應的hash值,並將該值存入庫中。當在檢查url是否存在庫中時,只要將要檢查的url,通過hash函數獲取其hash值,然後查看庫中是否存在該hash值,存在則丟棄,否則入庫。

這種方法在數據量變大時,佔用的存儲空間也會增大,查詢時間也會加長。
但是它可以將url進行壓縮。對於很長的url,hash值可以相對很短。

以上方法中,爲加快查詢速度,一般可以選擇 Redis作爲查詢庫。

3 scrapy / scrapy-redis

1.使用scrapy自帶的set集合去重,當程序結束set集合會被清空,再次運行會導致數據重複

3.使用scrapy_redis的去重策略,會將已經爬取的url地址經過編碼後存入redis,並且會做數據持久化,當爬蟲再次啓動時,會重新加載本地的數據,對爬蟲的url做去重

4 布隆過濾器 Bloom Filter

布隆在1970年提出了布隆過濾器(Bloom Filter),是一個很長的二進制向量和一系列隨機映射函數(hash function)。

布隆過濾器可以用於檢索一個元素是否在一個集合中。

(大數據處理)使用布隆去重,會採用多重哈希,將url地址映射到位陣列中的某個點上,空間和時間利用率更高(推薦)

優點:佔用空間小,查詢快
缺點:有誤判,刪除困難

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章