手把手教你寫網(wǎng)絡(luò)爬蟲(3):開源爬蟲框架對比
本系列:
Project | Language | Star | Watch | Fork |
Nutch | Java | 1111 | 195 | 808 |
webmagic | Java | 4216 | 618 | 2306 |
WebCollector | Java | 1222 | 255 | 958 |
heritrix3 | Java | 773 | 141 | 428 |
crawler4j | Java | 1831 | 242 | 1136 |
Pyspider | Python | 8581 | 687 | 2273 |
Scrapy | Python | 19642 | 1405 | 5261 |
看到了嗎?星星數(shù)***的Scrapy比其他所有的加起來都要多,我仿佛聽到他這樣說:
優(yōu)點(diǎn):
- 極其靈活的定制化爬取。
- 社區(qū)人數(shù)多、文檔完善。
- URL去重采用布隆過濾器方案。
- 可以處理不完整的HTML,Scrapy已經(jīng)提供了selectors(一個在lxml的基礎(chǔ)上提供了更高級的接口),可以高效地處理不完整的HTML代碼。
缺點(diǎn):
- 不支持分布式部署。
- 原生不支持抓取JavaScript的頁面。
- 全命令行操作,對用戶不友好,需要一定學(xué)習(xí)周期。
結(jié)論
篇幅有限,就先選擇這三個最有代表性的框架進(jìn)行PK。他們都有遠(yuǎn)超別人的優(yōu)點(diǎn),比如:Nutch天生的搜索引擎解決方案、Pyspider產(chǎn)品級的WebUI、Scrapy最靈活的定制化爬取。也都各自致命的缺點(diǎn),比如Scrapy不支持分布式部署,Pyspider不夠靈活,Nutch和搜索綁定。究竟該怎么選擇呢?
我們的目標(biāo)是做純粹的爬蟲,不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可定制的Scrapy。Scrapy的靈活性幾乎能夠讓我們完成任何苛刻的抓取需求,它的“難用”也讓我們不知不覺的研究爬蟲技術(shù)?,F(xiàn)在還不是享受Pyspider的時(shí)候,目前的當(dāng)務(wù)之急是打好基礎(chǔ),應(yīng)該學(xué)習(xí)最接近爬蟲本質(zhì)的框架,了解它的原理,所以把Pyspider也排除掉。
最終,理性的從個人的需求角度對比,還是Scrapy勝出!其實(shí)Scrapy還有更多優(yōu)點(diǎn):
- HTML, XML源數(shù)據(jù)選擇及提取的原生支持。
- 提供了一系列在spider之間共享的可復(fù)用的過濾器(即 Item Loaders),對智能處理爬取數(shù)據(jù)提供了內(nèi)置支持。
- 通過 feed導(dǎo)出 提供了多格式(JSON、CSV、XML),多存儲后端(FTP、S3、本地文件系統(tǒng))的內(nèi)置支持。
- 提供了media pipeline,可以 自動下載 爬取到的數(shù)據(jù)中的圖片(或者其他資源)。
- 高擴(kuò)展性。您可以通過使用 signals ,設(shè)計(jì)好的API(中間件, extensions, pipelines)來定制實(shí)現(xiàn)您的功能。
- 內(nèi)置的中間件及擴(kuò)展為下列功能提供了支持:
- cookies and session 處理
- HTTP 壓縮
- HTTP 認(rèn)證
- HTTP 緩存
- user-agent模擬
- robots.txt
- 爬取深度限制
- 針對非英語語系中不標(biāo)準(zhǔn)或者錯誤的編碼聲明, 提供了自動檢測以及健壯的編碼支持。
- 支持根據(jù)模板生成爬蟲。在加速爬蟲創(chuàng)建的同時(shí),保持在大型項(xiàng)目中的代碼更為一致。
- 針對多爬蟲下性能評估、失敗檢測,提供了可擴(kuò)展的 狀態(tài)收集工具 。
- 提供 交互式shell終端 , 為您測試XPath表達(dá)式,編寫和調(diào)試爬蟲提供了極大的方便。
- 提供 System service, 簡化在生產(chǎn)環(huán)境的部署及運(yùn)行。
- 內(nèi)置 Telnet終端 ,通過在Scrapy進(jìn)程中鉤入Python終端,使您可以查看并且調(diào)試爬蟲。
- Logging 為您在爬取過程中捕捉錯誤提供了方便。
- 支持 Sitemaps 爬取。
- 具有緩存的DNS解析器。
下一步
吹了半天的Scrapy,時(shí)間也到了,如果大家能夠喜歡上它,學(xué)習(xí)的效率一定會成倍提升!下次我會為大家?guī)頋M滿的干貨,并完成更具挑戰(zhàn)性的爬蟲任務(wù),我們下期再見!
原文鏈接:http://www.cnblogs.com/tuohai666/p/8861422.html