python爬蟲去重策略 爬蟲去重策略

2021-10-11 20:30:23 字數 876 閱讀 2194

1)

使用scrapy自帶的set集合去重,當程式結束的時候會被清空,缺點:再次執行會導致資料重複。

2)使用mysql做去重,對url位址進行md5,base64加密,加密之後會得到一串字元,判斷字串

是否在mysql表中,如果在表示已經爬取過了,如果不在,表示沒有爬取,執行請求,將加密後的url

3)4)

如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路. 但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢。不過世界上還有一種叫作雜湊表(又叫雜湊表,hash table)的資料結構。它可以通過乙個hash函式將乙個元素對映成乙個位陣列(bit array)中的乙個點。這樣一來,我們只要看看這個點是不是 1 就知道可以集合中有沒有它了。這就是布隆過濾器的基本思想。

hash面臨的問題就是衝突。假設 hash 函式是良好的,如果我們的位陣列長度為 m 個點,那麼如果我們想將衝突率降低到例如 1%, 這個雜湊表就只能容納 m/100 個元素。顯然這就不叫空間有效了(space-efficient)。解決方法也簡單,就是使用多個 hash,如果它們有乙個說元素不在集合中,那肯定就不在。如果它們都說在,雖然也有一定可能性它們在說謊,不過直覺上判斷這種事情的概率是比較低的。

布隆去重的優點和缺點

優點相比於其它的資料結構,布隆過濾器在空間和時間方面都有巨大的優勢。布隆過濾器儲存空間和插入/查詢時間都是常數。另外, hash 函式相互之間沒有關係,方便由硬體並行實現。布隆過濾器不需要儲存元素本身,在某些對保密要求非常嚴格的場合有優勢

缺點但是布隆過濾器的缺點和優點一樣明顯。誤算率(false positive)是其中之一。隨著存入的元素數量增加,誤算率隨之增加。但是如果元素數量太少,則使用雜湊表足矣。

python爬蟲去重策略 爬蟲去重策略

下面我會從程式 資料庫等幾個層面詳細敘述一下相應的去重策略。程式層面,像十萬以下url的抓取可以簡單的用set來實現去重。如果是百萬或者千萬量級的話,考慮到效能,我們應該使用基於hash的set實現去重。知道了前面雜湊的知識,你肯定就懂這是為什麼了。雜湊使得我們並不需要對比超長的url以及param...

python爬蟲去重策略 爬蟲的去重策略

1.爬蟲時將爬取過的url存放到資料庫中,利用資料庫進行url的去重 每請求乙個url之前,都現在資料庫中查詢一下。方法最簡單,效率是最低的。2.將已經請求過的url儲存到set中,而set集合是在記憶體中建立的,訪問效率比資料庫的方式要快很多,只需要很簡單的乙個方法,就可以實現url的去重。缺點 ...

爬蟲去重策略

爬蟲去重策略 將訪問過的url儲存到資料庫中。最簡單的方式。即使資料庫有快取,但每次都從資料庫中查詢url,效率低下。將訪問過的url儲存到set中,只需要o 1 的代價就可以查詢url url經過md5等方法雜湊後儲存到set中 使用bitmap方法,將訪問過的url通過hash函式對映到某一位 ...