爬蟲 使用mongodb做去重集合

2021-08-26 12:27:27 字數 669 閱讀 1847

背景:最初是用redis資料庫中的set來做去重集合的,但是因為url的量級在億以上,redis記憶體飆公升到了22g,伺服器無法承受。於是將集合都搬到了mongodb中

解決方法:

1. 通過指令碼對redis中的集合進行遷移,

<1  對url進行雜湊,縮短長度,節省空間。

<2  在插入資料到mongo的時候, 要寫好索引 (為了加快遍歷速度,因為每訪問一次url, 就需要遍歷一遍去重表來比對)

url_hash = computemd5hash(self.main_url)

obj =

is_exist = self.fingure.find_one(obj)

if not is_exist:

self.fingure.create_index("urlhash")

self.reddb.lpush(self.queue, self.main_url)

#self.reddb.sadd(self.fingure, self.main_url)

self.fingure.insert_one(obj)

第一行 就是乙個 hash加密方法, 可以自己寫。   比較重要的就是create_index方法,用來建立索引

2. 限制mongo的記憶體,這也是我們的初衷。具體方法:  

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

1 使用scrapy自帶的set集合去重,當程式結束的時候會被清空,缺點 再次執行會導致資料重複。2 使用mysql做去重,對url位址進行md5,base64加密,加密之後會得到一串字元,判斷字串 是否在mysql表中,如果在表示已經爬取過了,如果不在,表示沒有爬取,執行請求,將加密後的url 3...

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

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

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

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