網(wǎng)絡(luò)爬蟲去重策略

在爬蟲中霉旗,我們經(jīng)常遇到這樣的問題澄步。一是希望抓取過的URL不再重復(fù)抓取械媒,節(jié)省資源目锭;二是希望下載過的數(shù)據(jù)不再重復(fù)下載(一般情況下保證了第一條可以差不多滿足第二條)。

爬蟲去重一般是對(duì)URL去重纷捞,訪問過的頁面不在訪問去重可以避免網(wǎng)絡(luò)之間的環(huán)路痢虹,并且增加爬取效率。


今天我們介紹幾個(gè)去重策略

一主儡、像十萬以下URL的抓取可以簡(jiǎn)單的用set來實(shí)現(xiàn)去重世分,可以在O(1)的時(shí)間內(nèi)查詢到一個(gè)URL是否存在于set中。

缺點(diǎn):占用內(nèi)存大缀辩,比如有1億條URL臭埋,占用的內(nèi)存是:1000000000*2byte*50字符/1024/1024/1024 = 9G(假設(shè)字符使用的是unicode編碼冯乘,每一個(gè)字符占2字節(jié)务漩,每一個(gè)URL有50個(gè)字符)。

二垒拢、如果是百萬或者千萬量級(jí)的話健无,考慮到性能荣恐,我們應(yīng)該使用基于hash的set實(shí)現(xiàn)去重。哈希使得我們并不需要對(duì)比超長(zhǎng)的URL以及params,只需要對(duì)比其哈希值叠穆。

缺點(diǎn):如果檢測(cè)結(jié)果為是少漆,該元素不一定在集合中;但如果檢測(cè)結(jié)果為否硼被,該元素一定不在集合中示损。這樣每個(gè)檢測(cè)請(qǐng)求返回有“在集合內(nèi)(可能錯(cuò)誤)”和“不在集合內(nèi)(絕對(duì)不在集合內(nèi))”兩種情況,可見 Bloom filter 是犧牲了正確率和時(shí)間以節(jié)省空間嚷硫。

三检访、URL經(jīng)過MD5或SHA-1等哈希算法生成摘要,再存到HashSet中仔掸。MD5處理后摘要長(zhǎng)度128位脆贵,SHA-1摘要長(zhǎng)度160位,這樣占用內(nèi)存比直接存小很多起暮。(scrapy使用的就是類似的方法)

四卖氨、使用bitmap方法,將訪問過的URL通過hash函數(shù)映射到某一位上负懦,這種方法可以大大壓縮URL的存儲(chǔ)空間筒捺,但是缺點(diǎn)是,會(huì)有很多的映射沖突密似,即多個(gè)不同的URL映射到一個(gè)位上。

五葫盼、如果數(shù)據(jù)量上億或者幾十億時(shí)使用?Bloom Filter(中文:布隆過濾器)算法残腌。布隆過濾器原理是這樣的,一個(gè)URL過來贫导,通過M個(gè)特別的哈希函數(shù)對(duì)其進(jìn)行運(yùn)算抛猫,映射成一個(gè)M維位數(shù)組的M個(gè)維度。新的URL誕生時(shí)孩灯,進(jìn)行同樣操作并逐個(gè)與set中的位數(shù)組做“與”運(yùn)算闺金,若結(jié)果改變則說明URL一定沒有被抓取過,若結(jié)果一致則說明URL有一定概率被抓取過因?yàn)橛幸欢ǖ牡湾e(cuò)誤率峰档。布隆過濾器的插入和查詢效率都是O(M)败匹,遠(yuǎn)低于其他一般策略。使用Bloom Filter方法對(duì)bitmap進(jìn)行改進(jìn)讥巡,多重哈希函數(shù)降低沖突掀亩,是對(duì)(四:bitmap方法)的改進(jìn),既能降低沖突欢顷,又能大大壓縮內(nèi)存

六槽棍、像MySQL這種關(guān)系型數(shù)據(jù)庫(kù),我們可以設(shè)置主鍵或者唯一索引來保證數(shù)據(jù)的唯一性。查詢導(dǎo)致效率低炼七,不推薦缆巧。

七、像MongoDB這種Schema free的非關(guān)系型數(shù)據(jù)庫(kù)豌拙,我們可以用先檢索再插入或者是upsert的方式保證數(shù)據(jù)的唯一性陕悬。(相對(duì)于MySQL數(shù)據(jù)庫(kù)的性能有了很大的提升)

八、緩存數(shù)據(jù)庫(kù)去重: 如Redis數(shù)據(jù)庫(kù)其高速的讀寫姆蘸,使用其中的Set數(shù)據(jù)類型墩莫,并可將內(nèi)存中的數(shù)據(jù)持久化,應(yīng)用廣泛逞敷,推薦狂秦。


比較好的方式為:URL經(jīng)過MD5或SHA-1等哈希算法生成摘要,再存到?Redis的HashSet中

歡迎留言糾錯(cuò)補(bǔ)充推捐,QQ:2223136131

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裂问,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牛柒,更是在濱河造成了極大的恐慌堪簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皮壁,死亡現(xiàn)場(chǎng)離奇詭異椭更,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛾魄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門虑瀑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滴须,你說我怎么就攤上這事舌狗。” “怎么了扔水?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵痛侍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我魔市,道長(zhǎng)主届,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任待德,我火速辦了婚禮岂膳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘磅网。我一直安慰自己谈截,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著簸喂,像睡著了一般毙死。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喻鳄,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天扼倘,我揣著相機(jī)與錄音,去河邊找鬼除呵。 笑死再菊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颜曾。 我是一名探鬼主播纠拔,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼泛豪!你這毒婦竟也來了稠诲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤诡曙,失蹤者是張志新(化名)和其女友劉穎臀叙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體价卤,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劝萤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慎璧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片床嫌。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炸卑,靈堂內(nèi)的尸體忽然破棺而出既鞠,到底是詐尸還是另有隱情煤傍,我是刑警寧澤盖文,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蚯姆,受9級(jí)特大地震影響五续,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜龄恋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一疙驾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧郭毕,春花似錦它碎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傻挂。三九已至,卻和暖如春挖息,著一層夾襖步出監(jiān)牢的瞬間金拒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工套腹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绪抛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓电禀,卻偏偏與公主長(zhǎng)得像幢码,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鞭呕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,305評(píng)論 25 707
  • 二十多歲不再是耳聽愛情的年紀(jì)蛤育。但我,對(duì)外宣稱是要一心學(xué)習(xí)葫松,祖國(guó)尚未統(tǒng)一瓦糕,豈敢兒女情長(zhǎng);一般人配不上我腋么,因?yàn)槲姨^優(yōu)...
    Cora狂奔的土豆泥閱讀 300評(píng)論 5 2
  • 今天那是真涼快咕娄!都冷! 就昨晚一場(chǎng)小雨而已珊擂,滿世界透著清涼圣勒。 院子里的花草也洗干凈了,在練字群里還看到廈門的小伙伴...
    只一點(diǎn)閱讀 121評(píng)論 0 0
  • 浮躁的表現(xiàn):心緒難平摧扇,容易不耐煩圣贸,做事堅(jiān)持不下去或者勉強(qiáng)堅(jiān)持收效甚微,想選擇什么都不干或者獵奇扛稽。 浮躁的原因:一般...
    楓林小筑閱讀 637評(píng)論 0 0