分布式爬蟲:動(dòng)機(jī)、原理及實(shí)現(xiàn)

分布式爬蟲與爬蟲的區(qū)別是什么气嫁?多了“分布式”三個(gè)字。

分布式爬蟲的動(dòng)機(jī)

那么什么是分布式够坐?嚴(yán)謹(jǐn)學(xué)術(shù)的概念就不搬過來(lái)了寸宵。大致來(lái)說,就是需要計(jì)算的數(shù)據(jù)量太大元咙,任務(wù)太多梯影,一臺(tái)機(jī)器搞不定或者效率極低,需要多臺(tái)機(jī)器共同協(xié)作(而不是孤立地各做各的庶香,所以需要通信)甲棍,最后所有機(jī)器完成的任務(wù)匯總在一起,完成大量任務(wù)赶掖。

在我之前的文章《大規(guī)模爬蟲流程總結(jié)》中提到了任務(wù)分割方法感猛,但這并不是嚴(yán)格意義上的分布式爬蟲。任務(wù)分割的方法奢赂,是首先爬完了url或者id陪白,需要爬取的任務(wù)是確定的,這個(gè)時(shí)候可以人工地將任務(wù)劃分成幾個(gè)互不重復(fù)的子任務(wù)膳灶,交給多臺(tái)機(jī)器多個(gè)腳本去跑咱士,這樣彼此之間不通信不交流,也不會(huì)有影響轧钓。

然而還有一種情況序厉,輸入的待爬任務(wù)并不是固定不變的,而是實(shí)時(shí)變化的毕箍,這種情況下沒辦法人工以固定不變的邏輯去分割任務(wù)還能確背诜浚互相獨(dú)立、互不干擾霉晕,最好的辦法就是把任務(wù)集中在一處庭再,在各臺(tái)機(jī)器能互相通信的前提下,互不干擾地完成任務(wù)牺堰。

分布式爬蟲還有一個(gè)動(dòng)機(jī)拄轻,就是以機(jī)器換速度。有的網(wǎng)站反爬措施很嚴(yán)格伟葫,你必須得慢慢爬恨搓,否則稍微一浪就被封,這種情況下只靠一臺(tái)機(jī)器一個(gè)腳本的速度肯定是無(wú)法容忍的。但是對(duì)于分布式爬蟲斧抱,每一個(gè)機(jī)器的腳本都有不同的IP或者帳號(hào)cookie常拓,都以很慢的速度在爬,當(dāng)并行任務(wù)多了之后辉浦,總體上的速度就很可觀弄抬。

如何構(gòu)建分布式爬蟲

如何構(gòu)建分布式爬蟲?如開頭所說宪郊,只不過多了分布式而已掂恕,其他并無(wú)差別。Redis是一款最基于內(nèi)存的no-sql數(shù)據(jù)庫(kù)弛槐,簡(jiǎn)單懊亡、小巧、強(qiáng)大乎串,功能應(yīng)該很廣泛不僅僅只是爬蟲店枣,但是在分布式爬蟲中很好用。

Redis的安裝與配置就不細(xì)說了叹誉,網(wǎng)上很多教程鸯两。Redis-server打開后長(zhǎng)這樣:

redis-server

(圖中標(biāo)注的是stand alone mode表示單機(jī)模式,在分布式爬蟲中要配置 成cluster model的集群模式)
配置好了之后測(cè)試一下桂对,如果在各個(gè)機(jī)器上實(shí)現(xiàn)了數(shù)據(jù)共享就表示打通了分布式環(huán)節(jié)了甩卓。

分布式爬蟲任務(wù)調(diào)度

分布式通信中有一個(gè)Master-Slave模型:其中Master是核心,它來(lái)生產(chǎn)蕉斜、調(diào)度任務(wù)逾柿;其他多個(gè)Slave從Master中讀取任務(wù)并執(zhí)行≌耍可以簡(jiǎn)單地把Master理解成包工頭机错,Slave是搬磚工。

一個(gè)通用的模式是一個(gè)Master對(duì)應(yīng)多個(gè)Slave父腕,Master只負(fù)責(zé)寫入任務(wù)弱匪,Slave只負(fù)責(zé)讀任務(wù),二者同時(shí)進(jìn)行璧亮,讀寫分離比較不容易出錯(cuò)萧诫。當(dāng)然你也沒必要非按這個(gè)模式來(lái),你也可以設(shè)置成Master和Slave都可以讀寫任務(wù)枝嘶,只要你自己能理解帘饶、控制程序邏輯。

以一個(gè)例子來(lái)說明分布式爬蟲的任務(wù)調(diào)度:

Redis中有好幾種數(shù)據(jù)結(jié)構(gòu)群扶,其中簡(jiǎn)單點(diǎn)的用set就好及刻,用來(lái)存儲(chǔ)互不重復(fù)的爬蟲任務(wù)url镀裤;復(fù)雜點(diǎn)的就用hash表。首先Master程序源源不斷地往Redis里寫入互不重復(fù)的url缴饭,各個(gè)Slave每次隨機(jī)從中抽取一個(gè)任務(wù)執(zhí)行暑劝,一旦成功執(zhí)行就刪除該url,直到Redis中的任務(wù)已空颗搂。

這種方式會(huì)不會(huì)造成slave之間任務(wù)重復(fù)担猛?不必?fù)?dān)心。首先丢氢,當(dāng)Redis中的任務(wù)很多時(shí)毁习,有限的slave隨機(jī)抽1個(gè)任務(wù)還能有相互重復(fù)的概率很小卖丸;其次,各個(gè)slave在執(zhí)行任務(wù)時(shí)并不同步盏道,當(dāng)完成一個(gè)任務(wù)時(shí)立刻刪除稍浆,所以抽到已被完成的任務(wù)概率也很小猜嘱;再次衅枫,在數(shù)據(jù)庫(kù)的表中建好主鍵,即使重復(fù)爬取朗伶,也不會(huì)重復(fù)插入弦撩。

與人工手動(dòng)分割任務(wù)相比,分布式爬蟲其實(shí)還有以下的優(yōu)點(diǎn):

  • 從Redis中讀取论皆、處理數(shù)據(jù)比在MySQL中快得多益楼;
  • 代碼基本上不用改,最多改改IP和cookie点晴,而不必每一個(gè)腳本都去改輸入任務(wù)感凤。

爬蟲的本質(zhì)是什么

很多搞爬蟲的總愛吹噓分布式爬蟲,仿佛只有分布式才有逼格粒督,不是分布式簡(jiǎn)單不配叫爬蟲陪竿,這是一種很膚淺的思想。

分布式只是提高爬蟲功能和效率的一個(gè)環(huán)節(jié)而已屠橄,它從來(lái)不是爬蟲的本質(zhì)東西族跛。爬蟲的本質(zhì)是網(wǎng)絡(luò)請(qǐng)求和數(shù)據(jù)處理,如何穩(wěn)定地訪問網(wǎng)頁(yè)拿到數(shù)據(jù)锐墙,如何精準(zhǔn)地提取出高質(zhì)量的數(shù)據(jù)才是核心問題礁哄。分布式爬蟲只有當(dāng)爬蟲任務(wù)量很大的時(shí)候才會(huì)凸顯優(yōu)勢(shì),一般情況下也確實(shí)不必動(dòng)用這個(gè)大殺器贮匕,所以要明確你的目標(biāo)是什么姐仅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掏膏,更是在濱河造成了極大的恐慌劳翰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馒疹,死亡現(xiàn)場(chǎng)離奇詭異佳簸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颖变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門生均,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人腥刹,你說我怎么就攤上這事马胧。” “怎么了衔峰?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵佩脊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我垫卤,道長(zhǎng)威彰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任穴肘,我火速辦了婚禮歇盼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘评抚。我一直安慰自己豹缀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布盈咳。 她就那樣靜靜地躺著耿眉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鱼响。 梳的紋絲不亂的頭發(fā)上鸣剪,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音丈积,去河邊找鬼筐骇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛江滨,可吹牛的內(nèi)容都是我干的铛纬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼唬滑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼告唆!你這毒婦竟也來(lái)了棺弊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤擒悬,失蹤者是張志新(化名)和其女友劉穎模她,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懂牧,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侈净,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了僧凤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畜侦。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖躯保,靈堂內(nèi)的尸體忽然破棺而出旋膳,到底是詐尸還是另有隱情,我是刑警寧澤途事,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布溺忧,位于F島的核電站,受9級(jí)特大地震影響盯孙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祟滴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一振惰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垄懂,春花似錦骑晶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至漫谷,卻和暖如春仔雷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舔示。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工碟婆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惕稻。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓竖共,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親俺祠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子公给,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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