爬蟲去重策略

1、將url保存到數(shù)據(jù)庫中,檢查時在數(shù)據(jù)庫中查找。效率太低,頻繁的切換內(nèi)外存。使用mysql做去重,對url地址進行md5,base64加密,加密之后會得到一串字符,判斷字符串是否在mysql表中,如果在表示已經(jīng)爬取過了,如果不在,表示沒有爬取,執(zhí)行請求,將加密后的url地址存入表中。缺點: 但是這個方法對mysql壓力過大,導致崩潰,不推薦

2、將url保存到程序內(nèi)存set集合中,查詢速度快,但是占用內(nèi)存太大。


image.png

3、與第二種方法類似,只是進一步改進之后,將url通過哈希編碼壓縮在保存在程序內(nèi)存set集合中,相較于第二種方法直接保存,可以大大壓縮存儲空間。scrapy采用此方法。使用scrapy_redis的去重策略,會將已經(jīng)爬取的url地址經(jīng)過編碼后存入redis,并且會做數(shù)據(jù)持久化,當爬蟲再次啟動時,會重新加載本地的數(shù)據(jù),對爬蟲的url做去重。缺點:如果數(shù)據(jù)量較大的時候,會占用較多的內(nèi)存空間。

4、用bitmap方法,將訪問過的URL通過hash函數(shù)映射到某一位。這個方法將url通過哈希算法進一步壓縮空間至某位上,存儲空間大大減小,但是沖突率很高,很有可能兩個不同的url哈希到同一個位,導致第二個沒有的url被判斷為已存在。

5、布隆過濾器:通過boolmfilter算法壓縮url,在壓縮存儲空間的同時,也 大大降低沖突率,一億url經(jīng)過布隆過濾器后大約為11 M存儲空間。布隆過濾器呢,原理是這樣的,一個URL過來,通過M個特別的哈希函數(shù)對其進行運算,映射成一個M維位數(shù)組的M個維度。新的URL誕生時,進行同樣操作并逐個與set中的位數(shù)組做“與”運算,若結(jié)果改變則說明URL一定沒有被抓取過,若結(jié)果一致則說明URL有一定概率被抓取過。布隆過濾器的插入和查詢效率都是O(M),遠低于其他一般策略。

常用方法:

redis集合和布隆過濾器

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 一年一度的五一國際勞動節(jié)在萬眾期待中再次來到了我們的身邊,你出門旅游了嗎?去了哪些地方呢?玩得開心嗎?吃得舒...
    凡人sxj閱讀 362評論 2 1
  • 每年元月初你都會從皖返閩 參加一年一度廈門國際馬拉松 這一愛好堅持整整九年 你說離開鷺島回故鄉(xiāng)發(fā)展,夢卻留在廈門 ...
    卓夫文暄閱讀 387評論 0 7
  • 掐指一算,已經(jīng)有六年沒和父母在家過年啦。 偶爾也會有人問,你難道就不想家嗎? 廢話。 曾經(jīng)一首《?;丶铱纯础肪棺屛?..
    大張冰閱讀 129評論 0 1
  • 歡迎關(guān)注本人博客:云端筑夢師 描述Python 字典 get() 方法和 setdefault()方法類似,返回指...
    Aurora_Twinkle閱讀 744評論 2 1
  • "如果真的和她走進理想的愛情世界 那寫詩將變得毫無意義" 有限的時間 何謂不浪費 不過是聽從心里最真實的聲音 讓靈...
    白睿晰閱讀 233評論 0 2

友情鏈接更多精彩內(nèi)容