關(guān)于分布式爬蟲思考

這一篇垒拢,沒有項(xiàng)目旬迹,沒有教程。只不過是想記錄下最近對于分布式爬蟲的思考求类。半年前我去一家公司面試的時(shí)候奔垦,面試官問我什么是分布式爬蟲,我只能回呵呵噠仑嗅。在后來工作中漸漸地對這東西有了初步認(rèn)識。爬蟲無非兩樣?xùn)|西

  • 網(wǎng)站的破解
  • 爬取的效率
    由于我很懶,爬蟲就隨便寫寫懟上服務(wù)器上跑就行了仓技,從來不考慮效率的問題鸵贬,所以用到分布式的情況很少。不過也有用到的時(shí)候脖捻,之前爬個(gè)youtube阔逼,除了爬取視頻信息又要下載視頻又要上傳視頻,還要下載縮略圖上傳縮略圖地沮。如果只用一個(gè)爬蟲去做的話嗜浮,其實(shí)也沒什么,就是會失業(yè)而已摩疑。然后我就開始嘗試去做分布式危融。我從網(wǎng)上看到的大部分分布式教程,都是用redis來儲存任務(wù)隊(duì)列雷袋,然后開啟幾個(gè)slave爬蟲來提高爬取速度吉殃。不過我當(dāng)時(shí)懶,懶得學(xué)redis楷怒,就直接用mongodb來存取任務(wù)隊(duì)列蛋勺。
    微信截圖_20170815103745.png

    master爬蟲在網(wǎng)站的列表頁中爬取任務(wù)url去重后寫入mongo,然后開啟各個(gè)slave爬蟲從mongo中領(lǐng)取任務(wù)鸠删,完成任務(wù)的就打上標(biāo)簽抱完。這是我的做法,用mongo的讀取速度應(yīng)該比不上用儲存在內(nèi)存的redis刃泡。但由于我的slave爬蟲不僅要完成爬取任務(wù)還要進(jìn)行下載上傳多種操作巧娱,mongo比redis更適合。
    不過看到網(wǎng)上把redis傳得神乎其神捅僵,我自然也得去了解家卖,不經(jīng)意間就看到了scrapy-redis這個(gè)包 https://scrapy-redis.readthedocs.io/en/stable/ 可是它的文檔內(nèi)容很少,可以了解的內(nèi)容不多庙楚,只能通過閱讀源碼去了解上荡。我一開始心想,為什么要有這個(gè)包馒闷?因?yàn)槲铱梢宰约涸谖业膕crapy項(xiàng)目里用redis來寫分布式爬蟲啊酪捡。無非就是一個(gè)爬蟲爬任務(wù)url,其他的爬蟲領(lǐng)任務(wù)來爬字段纳账。然后把scrapy-redis的示例跑起來我發(fā)現(xiàn)了不一樣的東西逛薇。使用這個(gè)包的爬蟲如果沒有獲得任務(wù)隊(duì)列,是可以掛起的疏虫,直到從redis中重新獲得任務(wù)隊(duì)列才會再跑起來永罚。如果是我自己寫的話啤呼,那我做不到讓爬蟲掛起等待任務(wù)隊(duì)列。
    無意中我也看到了個(gè)celery的分布式爬蟲呢袱。celery這個(gè)我之前用過官扣,是完成異步任務(wù)的。之前在項(xiàng)目中是用在發(fā)郵件這個(gè)部分羞福。我看到網(wǎng)上的一篇文章的分布式爬蟲惕蹄,只看源碼我總覺得差了點(diǎn)什么。
1937608650-1.png
代碼來源:http://p0sec.net/index.php/archives/58/
# !/usr/bin/python
# -*- coding: utf-8 -*-
from spider import getPageUrl
from spider import getUrl
from spider import getImg
import requests
import threading
x = 0
#run函數(shù)
def Run():
    pageurls = getPageUrl.delay().get()#這個(gè)是celerytask
    for i in range(1,len(pageurls)):
        html = requests.get(pageurls[i]).text
        urllist = getUrl.delay(html).get()#這個(gè)也是celerytask
        for url in urllist:
            url = 'http://umei.cc'+url
            print url
            ImgHtml = requests.get(url).text
            imglist = getImg.delay(ImgHtml).get()#這個(gè)也是celerytask
            for imgurl in imglist: 
                print imgurl
                urllib.urlretrieve(imgurl,'/test/%s.jpg' % x)  
                global x
                x += 1
if __name__ == '__main__':
    Run()

我在上面標(biāo)注的三個(gè)celery task治专。一般的操作都是 task.delay()卖陵,直接異步完成任務(wù),不返回結(jié)果张峰±崮瑁可是這個(gè)爬蟲有個(gè)返回結(jié)果的操作get()。這我就看不懂了挟炬,這等待結(jié)果返回才開始下一步鸥滨,不成了堵塞么?
繼續(xù)拿我的Youtube爬蟲來探討谤祖,按我的理解婿滓,celery的任務(wù)都是異步完成的。也就是說粥喜,我的視頻爬取凸主,下載上傳全部異步完成。我只要寫個(gè)爬蟲爬取任務(wù)隊(duì)列额湘,然后建立寫異步task(下載視頻卿吐,上傳視頻,下載圖片锋华,上傳圖片)嗡官,畫個(gè)圖吧

圖片.png

通過task.delay()這個(gè)操作讓任務(wù)自己在后臺執(zhí)行并完成,完美毯焕!原來celery分布式爬蟲是這樣使用衍腥!
現(xiàn)在思路清晰了,也知道怎么做了纳猫。但素婆咸!我不想寫代碼去驗(yàn)證思路和效率!

因?yàn)槲覒?/h2>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芜辕,一起剝皮案震驚了整個(gè)濱河市尚骄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侵续,老刑警劉巖倔丈,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憨闰,死亡現(xiàn)場離奇詭異,居然都是意外死亡需五,警方通過查閱死者的電腦和手機(jī)起趾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來警儒,“玉大人,你說我怎么就攤上這事眶根∈癫” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵属百,是天一觀的道長记劝。 經(jīng)常有香客問我,道長族扰,這世上最難降的妖魔是什么厌丑? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮渔呵,結(jié)果婚禮上怒竿,老公的妹妹穿的比我還像新娘。我一直安慰自己扩氢,他們只是感情好耕驰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著录豺,像睡著了一般朦肘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上双饥,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天媒抠,我揣著相機(jī)與錄音,去河邊找鬼咏花。 笑死趴生,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迟螺。 我是一名探鬼主播冲秽,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矩父!你這毒婦竟也來了锉桑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤窍株,失蹤者是張志新(化名)和其女友劉穎民轴,沒想到半個(gè)月后攻柠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡后裸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年瑰钮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片微驶。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浪谴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出因苹,到底是詐尸還是另有隱情苟耻,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布扶檐,位于F島的核電站凶杖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏款筑。R本人自食惡果不足惜智蝠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奈梳。 院中可真熱鬧杈湾,春花似錦、人聲如沸攘须。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阻课。三九已至叫挟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間限煞,已是汗流浹背抹恳。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留署驻,地道東北人奋献。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像旺上,于是被迫代替她去往敵國和親瓶蚂。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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

  • Scrapy宣吱,Python開發(fā)的一個(gè)快速,高層次的屏幕抓取和web抓取框架窃这,用于抓取web站點(diǎn)并從頁面中提取結(jié)構(gòu)化...
    Evtion閱讀 5,832評論 12 18
  • 前言 本系列文章計(jì)劃分三個(gè)章節(jié)進(jìn)行講述,分別是理論篇征候、基礎(chǔ)篇和實(shí)戰(zhàn)篇杭攻。理論篇主要為構(gòu)建分布式爬蟲而儲備的理論知識祟敛,...
    resolvewang閱讀 14,312評論 9 54
  • 引言 在上篇使用Scrapy爬取知乎用戶信息我們編寫了一個(gè)單機(jī)的爬蟲,這篇記錄了使用Scrapy-Redis將其重...
    朱曉飛閱讀 6,676評論 1 24
  • 十多年沒寫文章了兆解,記得第一次寫文章的時(shí)候在中專馆铁,那個(gè)時(shí)候沒辦法每天班上要交幾份文章參加通訊部評選,好笑也很幸運(yùn)...
    倪梁倪閱讀 156評論 0 0
  • 題目一:計(jì)算兩個(gè)班的人數(shù) 題目二:取余運(yùn)算 題目三:求差值 題目四:輸入操作
    大yu魚閱讀 132評論 0 0