在前面的三講
簡單分布式爬蟲——第一彈:了解分布式爬蟲結(jié)構(gòu)
簡單分布式爬蟲——第二彈:masterSpider的實現(xiàn)
簡單分布式爬蟲——第三彈:nodeSpider的實現(xiàn)
當(dāng)中私杜,我們從頭打造了一個簡單的主從分布式爬蟲运挫,在這里做個簡單的總結(jié)绽榛,為了清晰描述爬蟲流程关霸,借助于如下這張經(jīng)典的爬蟲框架圖:
上圖適用于常規(guī)的爬蟲,也適用于分布式爬蟲喻圃,區(qū)別在于是否有獨立的爬蟲調(diào)度器來協(xié)調(diào)后續(xù)各部分源梭。分布式爬蟲就是將爬蟲調(diào)度器獨立出來由一臺主機實現(xiàn)铺呵,而將具體爬取工作交由從機來完成,主機僅負責(zé)任務(wù)調(diào)度。
在第一講中我們探討過這種主從式爬蟲存在的缺陷:整個爬蟲性能受限于masterSpider婉弹,尤其是當(dāng)nodeSpider數(shù)量增多時睬魂。那么如何應(yīng)對這種缺陷?一個思路是我們最簡化masterSpider的工作量镀赌,將除了url管理之外的其他工作完全交由從機完成汉买,也就是從機需要完成url內(nèi)容獲取、解析以及數(shù)據(jù)保存佩脊。當(dāng)然這種方法并不能大幅提升爬蟲性能蛙粘,如果對爬蟲性能有更高要求就要考慮其他形式的爬蟲框架,不過威彰,對于一般來講出牧,這種框架也足夠應(yīng)對。
另外歇盼,這里的分布式爬蟲只是提供了一個最基本的雛形舔痕,在實際應(yīng)用上還可以加以擴展,比如現(xiàn)在很多網(wǎng)站都采取了反爬技術(shù)豹缀,其中一條就是限制一段時間內(nèi)IP訪問次數(shù)伯复,這種情況下常用的方法就是利用代理IP來爬取。那么我們就可以在這個框架的基礎(chǔ)上增加IP代理爬取邢笙,所有的代理都由masterSpider進行管理啸如,另開一個網(wǎng)絡(luò)隊列管理代理IP,nodeSpider從網(wǎng)絡(luò)隊列一方面獲取url另一方面獲取代理IP氮惯,利用代理來爬取網(wǎng)站叮雳,同時可以將代理IP的可用性反饋給masterSpider,由masterSpider進行代理IP的管理(去除無效代理等)妇汗。
豆瓣圖書api爬蟲是本人的一個練手項目帘不,給定書名利用豆瓣api進行圖書檢索,并保存圖書信息杨箭,由于api限定了每個IP的訪問頻次(100次/小時)寞焙,所以這里用到了代理IP進行爬取。