pyspider
開(kāi)源爬蟲(chóng)框架大對比,你喜歡的框架在上面嗎?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 343 次瀏覽 ? 2020-05-07 08:01
介紹
大家好!我們從明天開(kāi)始學(xué)習開(kāi)源爬蟲(chóng)框架Scrapy,如果你看過(guò)《手把手》系列的前兩篇,那么明天的內容就十分容易理解了。細心的讀者或許會(huì )有疑問(wèn),為什么不學(xué)出身名門(mén)的Apache頂尖項目Nutch,或者人氣激增的國外高手開(kāi)發(fā)的Pyspider等框架呢?原因很簡(jiǎn)單,我們來(lái)看一下主流爬蟲(chóng)框架在GitHub上的活躍度:
這些框架都太優(yōu)秀,都有好多用戶(hù),活躍度相對低的并不說(shuō)明技術(shù)低,活躍度相對高的似乎只是多滿(mǎn)足了一些用戶(hù)需求。接下來(lái)我們還是要理智的對主流爬蟲(chóng)框架做一個(gè)對比剖析。
開(kāi)源框架大PK
各路英雄早已到齊了, PK如今開(kāi)始!
Nutch
介紹:
Nutch是一個(gè)開(kāi)源的Java實(shí)現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和網(wǎng)路爬蟲(chóng)。
盡管搜索是上網(wǎng)的基本要求,但是現有的搜索引擎的數量卻在增長(cháng)。并且這很有可能進(jìn)一步演化成為一個(gè)公司壟斷了幾乎所有的網(wǎng)頁(yè)搜索為其攫取商業(yè)利益。這似乎不利于廣大Internet用戶(hù)。
Nutch為我們提供了這樣一個(gè)不同的選擇。相對于這些商用的搜索引擎,Nutch作為開(kāi)放源代碼的搜索引擎將會(huì )愈發(fā)透明,從而更值得你們信賴(lài)?,F在所有主要的搜索引擎都采用私有的排序算法, 而不會(huì )解釋為何一個(gè)網(wǎng)頁(yè)會(huì )排在一個(gè)特定的位置。除此之外, 有的搜索引擎根據網(wǎng)站所付的費用, 而不是依據它們本身的價(jià)值進(jìn)行排序。與它們不同,Nutch沒(méi)有哪些須要隱瞞,也沒(méi)有動(dòng)機去扭曲搜索的結果。Nutch將盡自己最大的努力為用戶(hù)提供最好的搜索結果。
優(yōu)點(diǎn):
Nutch支持分布式抓取,并有Hadoop支持,可以進(jìn)行多機分布抓取,存儲和索引。另外太吸引人的一點(diǎn)在于,它提供了一種插件框架,使得其對各類(lèi)網(wǎng)頁(yè)內容的解析、各種數據的采集、查詢(xún)、集群、過(guò)濾等功能才能便捷的進(jìn)行擴充。正是因為有此框架,使得 Nutch 的插件開(kāi)發(fā)特別容易,第三方的插件也層出不窮,極大的提高了 Nutch 的功能和聲譽(yù)。
缺點(diǎn):
對于大多數用戶(hù)來(lái)說(shuō),一般是想做一個(gè)精確數據爬取的爬蟲(chóng),就像第一篇里爬歌單那種“主題爬蟲(chóng)”。而第二篇介紹的“通用爬蟲(chóng)”適合做搜索引擎,這種需求就比較少。如果借此為標準,那么為搜索引擎而生的Nutch就有著(zhù)天生缺點(diǎn)。Nutch的構架里大部分為搜索引擎而設計的,對精確爬取沒(méi)有非常的考慮。也就是說(shuō),用Nutch做主題爬蟲(chóng),會(huì )浪費好多的時(shí)間在不必要的估算上。而且假如你企圖通過(guò)對Nutch進(jìn)行二次開(kāi)發(fā)來(lái)擴充其訂制能力,基本上就要破壞Nutch的框架,反而不如自己寫(xiě)了。
Pyspider
介紹:
Pyspider是一個(gè)國人編撰的強悍的網(wǎng)路爬蟲(chóng)系統并帶有強悍的WebUI。采用Python語(yǔ)言編撰,分布式構架,支持多種數據庫前端,強大的WebUI支持腳本編輯器,任務(wù)監視器,項目管理器以及結果查看器。
Pyspider的主要功能包括,抓取、更新調度多站點(diǎn)的特定的頁(yè)面;需要對頁(yè)面進(jìn)行結構化信息提??;靈活可擴充開(kāi)源爬蟲(chóng)框架,穩定可監控。滿(mǎn)足了絕大多數Python爬蟲(chóng)的需求 —— 定向抓取,結構化化解析。但是面對結構迥異的各類(lèi)網(wǎng)站,單一的抓取模式并不一定能滿(mǎn)足,靈活的抓取控制是必須的。為了達到這個(gè)目的,單純的配置文件常常不夠靈活,于是,通過(guò)腳本去控制抓取成為了最后的選擇。而去重調度,隊列,抓取,異常處理,監控等功能作為框架,提供給抓取腳本,并保證靈活性。最后加上web的編輯調試環(huán)境,以及web任務(wù)監控,即成為了最終的框架。
優(yōu)點(diǎn):
支持分布式布署。
完全可視化,對用戶(hù)特別友好:WEB 界面編撰調試腳本,起停腳本,監控執行狀態(tài),查看活動(dòng)歷史,獲取結果產(chǎn)出。
簡(jiǎn)單開(kāi)源爬蟲(chóng)框架,五分鐘才能上手。腳本規則簡(jiǎn)單,開(kāi)發(fā)效率高。
支持抓取JavaScript的頁(yè)面。
總之,Pyspider十分強悍,強大到更象一個(gè)產(chǎn)品而不是一個(gè)框架。
缺點(diǎn):
URL去重使用數據庫而不是布隆過(guò)濾器,億級儲存的db io將造成效率大幅減低。
使用上的人性化犧牲了靈活度,定制化能力增加。
Scrapy
介紹:
Scrapy是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的應用框架。 可以應用在包括數據挖掘,信息處理或儲存歷史數據等一系列的程序中。Scrapy 使用 Twisted這個(gè)異步網(wǎng)路庫來(lái)處理網(wǎng)路通信,架構清晰,并且包含了各類(lèi)中間件插口,可以靈活的完成各類(lèi)需求。Scratch,是抓取的意思,這個(gè)Python的爬蟲(chóng)框架叫Scrapy,大概也是這個(gè)意思吧。
優(yōu)點(diǎn):
極其靈活的多樣化爬取。
社區人數多、文檔構建。
URL去重采用布隆過(guò)濾器方案。
可以處理不完整的HTML,Scrapy早已提供了selectors(一個(gè)在lxml的基礎上提供了更中級的插口),可以高效地處理不完整的HTML代碼。
缺點(diǎn):
不支持分布式布署。
原生不支持抓取JavaScript的頁(yè)面。
全命令行操作,對用戶(hù)不友好,需要一定學(xué)習周期。
結論
篇幅有限,就先選擇這三個(gè)最有代表性的框架進(jìn)行PK。他們都有遠超他人的優(yōu)點(diǎn),比如:Nutch天生的搜索引擎解決方案、Pyspider產(chǎn)品級的WebUI、Scrapy最靈活的多樣化爬取。也都各自致命的缺點(diǎn),比如Scrapy不支持分布式布署,Pyspider不夠靈活,Nutch和搜索綁定。究竟該如何選擇呢?
我們的目標是做純粹的爬蟲(chóng),不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可訂制的Scrapy。Scrapy的靈活性幾乎就能使我們完成任何嚴苛的抓取需求,它的“難用”也使我們不知不覺(jué)的研究爬蟲(chóng)技術(shù)?,F在還不是享受Pyspider的時(shí)侯,目前的當務(wù)之急是打好基礎,應該學(xué)習最接近爬蟲(chóng)本質(zhì)的框架,了解它的原理,所以把Pyspider也排除掉。
最終,理性的從個(gè)人的需求角度對比,還是Scrapy勝出!其實(shí)Scrapy還有更多優(yōu)點(diǎn):
HTML, XML源數據選擇及提取的原生支持。
提供了一系列在spider之間共享的可復用的過(guò)濾器(即 Item Loaders),對智能處理爬取數據提供了外置支持。
通過(guò) feed導入 提供了多格式(JSON、CSV、XML),多儲存前端(FTP、S3、本地文件系統)的外置支持。
提供了media pipeline,可以 自動(dòng)下載 爬取到的數據中的圖片(或者其他資源)。
高擴展性。您可以通過(guò)使用 signals ,設計好的API(中間件, extensions, pipelines)來(lái)訂制實(shí)現您的功能。
內置的中間件及擴充為下述功能提供了支持:
cookies and session 處理
HTTP 壓縮
HTTP 認證
HTTP 緩存
user-agent模擬
robots.txt
爬取深度限制
針對非英語(yǔ)語(yǔ)族中不標準或則錯誤的編碼申明, 提供了手動(dòng)檢查以及強壯的編碼支持。
支持依照模板生成爬蟲(chóng)。在加速爬蟲(chóng)創(chuàng )建的同時(shí),保持在小型項目中的代碼更為一致。
針對多爬蟲(chóng)下性能評估、失敗檢查,提供了可擴充的 狀態(tài)搜集工具 。
提供 交互式shell終端 , 為您測試XPath表達式,編寫(xiě)和調試爬蟲(chóng)提供了極大的便捷。
提供 System service, 簡(jiǎn)化在生產(chǎn)環(huán)境的布署及運行。
內置 Telnet終端 ,通過(guò)在Scrapy進(jìn)程中鉤入Python終端,使您可以查看而且調試爬蟲(chóng)。
Logging 為您在爬取過(guò)程中捕捉錯誤提供了便捷。
支持 Sitemaps 爬取。
具有緩存的DNS解析器。
查看全部

介紹
大家好!我們從明天開(kāi)始學(xué)習開(kāi)源爬蟲(chóng)框架Scrapy,如果你看過(guò)《手把手》系列的前兩篇,那么明天的內容就十分容易理解了。細心的讀者或許會(huì )有疑問(wèn),為什么不學(xué)出身名門(mén)的Apache頂尖項目Nutch,或者人氣激增的國外高手開(kāi)發(fā)的Pyspider等框架呢?原因很簡(jiǎn)單,我們來(lái)看一下主流爬蟲(chóng)框架在GitHub上的活躍度:
這些框架都太優(yōu)秀,都有好多用戶(hù),活躍度相對低的并不說(shuō)明技術(shù)低,活躍度相對高的似乎只是多滿(mǎn)足了一些用戶(hù)需求。接下來(lái)我們還是要理智的對主流爬蟲(chóng)框架做一個(gè)對比剖析。
開(kāi)源框架大PK
各路英雄早已到齊了, PK如今開(kāi)始!
Nutch
介紹:
Nutch是一個(gè)開(kāi)源的Java實(shí)現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和網(wǎng)路爬蟲(chóng)。
盡管搜索是上網(wǎng)的基本要求,但是現有的搜索引擎的數量卻在增長(cháng)。并且這很有可能進(jìn)一步演化成為一個(gè)公司壟斷了幾乎所有的網(wǎng)頁(yè)搜索為其攫取商業(yè)利益。這似乎不利于廣大Internet用戶(hù)。
Nutch為我們提供了這樣一個(gè)不同的選擇。相對于這些商用的搜索引擎,Nutch作為開(kāi)放源代碼的搜索引擎將會(huì )愈發(fā)透明,從而更值得你們信賴(lài)?,F在所有主要的搜索引擎都采用私有的排序算法, 而不會(huì )解釋為何一個(gè)網(wǎng)頁(yè)會(huì )排在一個(gè)特定的位置。除此之外, 有的搜索引擎根據網(wǎng)站所付的費用, 而不是依據它們本身的價(jià)值進(jìn)行排序。與它們不同,Nutch沒(méi)有哪些須要隱瞞,也沒(méi)有動(dòng)機去扭曲搜索的結果。Nutch將盡自己最大的努力為用戶(hù)提供最好的搜索結果。
優(yōu)點(diǎn):
Nutch支持分布式抓取,并有Hadoop支持,可以進(jìn)行多機分布抓取,存儲和索引。另外太吸引人的一點(diǎn)在于,它提供了一種插件框架,使得其對各類(lèi)網(wǎng)頁(yè)內容的解析、各種數據的采集、查詢(xún)、集群、過(guò)濾等功能才能便捷的進(jìn)行擴充。正是因為有此框架,使得 Nutch 的插件開(kāi)發(fā)特別容易,第三方的插件也層出不窮,極大的提高了 Nutch 的功能和聲譽(yù)。
缺點(diǎn):
對于大多數用戶(hù)來(lái)說(shuō),一般是想做一個(gè)精確數據爬取的爬蟲(chóng),就像第一篇里爬歌單那種“主題爬蟲(chóng)”。而第二篇介紹的“通用爬蟲(chóng)”適合做搜索引擎,這種需求就比較少。如果借此為標準,那么為搜索引擎而生的Nutch就有著(zhù)天生缺點(diǎn)。Nutch的構架里大部分為搜索引擎而設計的,對精確爬取沒(méi)有非常的考慮。也就是說(shuō),用Nutch做主題爬蟲(chóng),會(huì )浪費好多的時(shí)間在不必要的估算上。而且假如你企圖通過(guò)對Nutch進(jìn)行二次開(kāi)發(fā)來(lái)擴充其訂制能力,基本上就要破壞Nutch的框架,反而不如自己寫(xiě)了。
Pyspider
介紹:
Pyspider是一個(gè)國人編撰的強悍的網(wǎng)路爬蟲(chóng)系統并帶有強悍的WebUI。采用Python語(yǔ)言編撰,分布式構架,支持多種數據庫前端,強大的WebUI支持腳本編輯器,任務(wù)監視器,項目管理器以及結果查看器。
Pyspider的主要功能包括,抓取、更新調度多站點(diǎn)的特定的頁(yè)面;需要對頁(yè)面進(jìn)行結構化信息提??;靈活可擴充開(kāi)源爬蟲(chóng)框架,穩定可監控。滿(mǎn)足了絕大多數Python爬蟲(chóng)的需求 —— 定向抓取,結構化化解析。但是面對結構迥異的各類(lèi)網(wǎng)站,單一的抓取模式并不一定能滿(mǎn)足,靈活的抓取控制是必須的。為了達到這個(gè)目的,單純的配置文件常常不夠靈活,于是,通過(guò)腳本去控制抓取成為了最后的選擇。而去重調度,隊列,抓取,異常處理,監控等功能作為框架,提供給抓取腳本,并保證靈活性。最后加上web的編輯調試環(huán)境,以及web任務(wù)監控,即成為了最終的框架。
優(yōu)點(diǎn):
支持分布式布署。
完全可視化,對用戶(hù)特別友好:WEB 界面編撰調試腳本,起停腳本,監控執行狀態(tài),查看活動(dòng)歷史,獲取結果產(chǎn)出。
簡(jiǎn)單開(kāi)源爬蟲(chóng)框架,五分鐘才能上手。腳本規則簡(jiǎn)單,開(kāi)發(fā)效率高。
支持抓取JavaScript的頁(yè)面。
總之,Pyspider十分強悍,強大到更象一個(gè)產(chǎn)品而不是一個(gè)框架。
缺點(diǎn):
URL去重使用數據庫而不是布隆過(guò)濾器,億級儲存的db io將造成效率大幅減低。
使用上的人性化犧牲了靈活度,定制化能力增加。
Scrapy
介紹:
Scrapy是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的應用框架。 可以應用在包括數據挖掘,信息處理或儲存歷史數據等一系列的程序中。Scrapy 使用 Twisted這個(gè)異步網(wǎng)路庫來(lái)處理網(wǎng)路通信,架構清晰,并且包含了各類(lèi)中間件插口,可以靈活的完成各類(lèi)需求。Scratch,是抓取的意思,這個(gè)Python的爬蟲(chóng)框架叫Scrapy,大概也是這個(gè)意思吧。
優(yōu)點(diǎn):
極其靈活的多樣化爬取。
社區人數多、文檔構建。
URL去重采用布隆過(guò)濾器方案。
可以處理不完整的HTML,Scrapy早已提供了selectors(一個(gè)在lxml的基礎上提供了更中級的插口),可以高效地處理不完整的HTML代碼。
缺點(diǎn):
不支持分布式布署。
原生不支持抓取JavaScript的頁(yè)面。
全命令行操作,對用戶(hù)不友好,需要一定學(xué)習周期。
結論
篇幅有限,就先選擇這三個(gè)最有代表性的框架進(jìn)行PK。他們都有遠超他人的優(yōu)點(diǎn),比如:Nutch天生的搜索引擎解決方案、Pyspider產(chǎn)品級的WebUI、Scrapy最靈活的多樣化爬取。也都各自致命的缺點(diǎn),比如Scrapy不支持分布式布署,Pyspider不夠靈活,Nutch和搜索綁定。究竟該如何選擇呢?
我們的目標是做純粹的爬蟲(chóng),不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可訂制的Scrapy。Scrapy的靈活性幾乎就能使我們完成任何嚴苛的抓取需求,它的“難用”也使我們不知不覺(jué)的研究爬蟲(chóng)技術(shù)?,F在還不是享受Pyspider的時(shí)侯,目前的當務(wù)之急是打好基礎,應該學(xué)習最接近爬蟲(chóng)本質(zhì)的框架,了解它的原理,所以把Pyspider也排除掉。
最終,理性的從個(gè)人的需求角度對比,還是Scrapy勝出!其實(shí)Scrapy還有更多優(yōu)點(diǎn):
HTML, XML源數據選擇及提取的原生支持。
提供了一系列在spider之間共享的可復用的過(guò)濾器(即 Item Loaders),對智能處理爬取數據提供了外置支持。
通過(guò) feed導入 提供了多格式(JSON、CSV、XML),多儲存前端(FTP、S3、本地文件系統)的外置支持。
提供了media pipeline,可以 自動(dòng)下載 爬取到的數據中的圖片(或者其他資源)。
高擴展性。您可以通過(guò)使用 signals ,設計好的API(中間件, extensions, pipelines)來(lái)訂制實(shí)現您的功能。
內置的中間件及擴充為下述功能提供了支持:
cookies and session 處理
HTTP 壓縮
HTTP 認證
HTTP 緩存
user-agent模擬
robots.txt
爬取深度限制
針對非英語(yǔ)語(yǔ)族中不標準或則錯誤的編碼申明, 提供了手動(dòng)檢查以及強壯的編碼支持。
支持依照模板生成爬蟲(chóng)。在加速爬蟲(chóng)創(chuàng )建的同時(shí),保持在小型項目中的代碼更為一致。
針對多爬蟲(chóng)下性能評估、失敗檢查,提供了可擴充的 狀態(tài)搜集工具 。
提供 交互式shell終端 , 為您測試XPath表達式,編寫(xiě)和調試爬蟲(chóng)提供了極大的便捷。
提供 System service, 簡(jiǎn)化在生產(chǎn)環(huán)境的布署及運行。
內置 Telnet終端 ,通過(guò)在Scrapy進(jìn)程中鉤入Python終端,使您可以查看而且調試爬蟲(chóng)。
Logging 為您在爬取過(guò)程中捕捉錯誤提供了便捷。
支持 Sitemaps 爬取。
具有緩存的DNS解析器。
開(kāi)源爬蟲(chóng)框架大對比,你喜歡的框架在上面嗎?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 343 次瀏覽 ? 2020-05-07 08:01
介紹
大家好!我們從明天開(kāi)始學(xué)習開(kāi)源爬蟲(chóng)框架Scrapy,如果你看過(guò)《手把手》系列的前兩篇,那么明天的內容就十分容易理解了。細心的讀者或許會(huì )有疑問(wèn),為什么不學(xué)出身名門(mén)的Apache頂尖項目Nutch,或者人氣激增的國外高手開(kāi)發(fā)的Pyspider等框架呢?原因很簡(jiǎn)單,我們來(lái)看一下主流爬蟲(chóng)框架在GitHub上的活躍度:
這些框架都太優(yōu)秀,都有好多用戶(hù),活躍度相對低的并不說(shuō)明技術(shù)低,活躍度相對高的似乎只是多滿(mǎn)足了一些用戶(hù)需求。接下來(lái)我們還是要理智的對主流爬蟲(chóng)框架做一個(gè)對比剖析。
開(kāi)源框架大PK
各路英雄早已到齊了, PK如今開(kāi)始!
Nutch
介紹:
Nutch是一個(gè)開(kāi)源的Java實(shí)現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和網(wǎng)路爬蟲(chóng)。
盡管搜索是上網(wǎng)的基本要求,但是現有的搜索引擎的數量卻在增長(cháng)。并且這很有可能進(jìn)一步演化成為一個(gè)公司壟斷了幾乎所有的網(wǎng)頁(yè)搜索為其攫取商業(yè)利益。這似乎不利于廣大Internet用戶(hù)。
Nutch為我們提供了這樣一個(gè)不同的選擇。相對于這些商用的搜索引擎,Nutch作為開(kāi)放源代碼的搜索引擎將會(huì )愈發(fā)透明,從而更值得你們信賴(lài)?,F在所有主要的搜索引擎都采用私有的排序算法, 而不會(huì )解釋為何一個(gè)網(wǎng)頁(yè)會(huì )排在一個(gè)特定的位置。除此之外, 有的搜索引擎根據網(wǎng)站所付的費用, 而不是依據它們本身的價(jià)值進(jìn)行排序。與它們不同,Nutch沒(méi)有哪些須要隱瞞,也沒(méi)有動(dòng)機去扭曲搜索的結果。Nutch將盡自己最大的努力為用戶(hù)提供最好的搜索結果。
優(yōu)點(diǎn):
Nutch支持分布式抓取,并有Hadoop支持,可以進(jìn)行多機分布抓取,存儲和索引。另外太吸引人的一點(diǎn)在于,它提供了一種插件框架,使得其對各類(lèi)網(wǎng)頁(yè)內容的解析、各種數據的采集、查詢(xún)、集群、過(guò)濾等功能才能便捷的進(jìn)行擴充。正是因為有此框架,使得 Nutch 的插件開(kāi)發(fā)特別容易,第三方的插件也層出不窮,極大的提高了 Nutch 的功能和聲譽(yù)。
缺點(diǎn):
對于大多數用戶(hù)來(lái)說(shuō),一般是想做一個(gè)精確數據爬取的爬蟲(chóng),就像第一篇里爬歌單那種“主題爬蟲(chóng)”。而第二篇介紹的“通用爬蟲(chóng)”適合做搜索引擎,這種需求就比較少。如果借此為標準,那么為搜索引擎而生的Nutch就有著(zhù)天生缺點(diǎn)。Nutch的構架里大部分為搜索引擎而設計的,對精確爬取沒(méi)有非常的考慮。也就是說(shuō),用Nutch做主題爬蟲(chóng),會(huì )浪費好多的時(shí)間在不必要的估算上。而且假如你企圖通過(guò)對Nutch進(jìn)行二次開(kāi)發(fā)來(lái)擴充其訂制能力,基本上就要破壞Nutch的框架,反而不如自己寫(xiě)了。
Pyspider
介紹:
Pyspider是一個(gè)國人編撰的強悍的網(wǎng)路爬蟲(chóng)系統并帶有強悍的WebUI。采用Python語(yǔ)言編撰,分布式構架,支持多種數據庫前端,強大的WebUI支持腳本編輯器,任務(wù)監視器,項目管理器以及結果查看器。
Pyspider的主要功能包括,抓取、更新調度多站點(diǎn)的特定的頁(yè)面;需要對頁(yè)面進(jìn)行結構化信息提??;靈活可擴充開(kāi)源爬蟲(chóng)框架,穩定可監控。滿(mǎn)足了絕大多數Python爬蟲(chóng)的需求 —— 定向抓取,結構化化解析。但是面對結構迥異的各類(lèi)網(wǎng)站,單一的抓取模式并不一定能滿(mǎn)足,靈活的抓取控制是必須的。為了達到這個(gè)目的,單純的配置文件常常不夠靈活,于是,通過(guò)腳本去控制抓取成為了最后的選擇。而去重調度,隊列,抓取,異常處理,監控等功能作為框架,提供給抓取腳本,并保證靈活性。最后加上web的編輯調試環(huán)境,以及web任務(wù)監控,即成為了最終的框架。
優(yōu)點(diǎn):
支持分布式布署。
完全可視化,對用戶(hù)特別友好:WEB 界面編撰調試腳本,起停腳本,監控執行狀態(tài),查看活動(dòng)歷史,獲取結果產(chǎn)出。
簡(jiǎn)單開(kāi)源爬蟲(chóng)框架,五分鐘才能上手。腳本規則簡(jiǎn)單,開(kāi)發(fā)效率高。
支持抓取JavaScript的頁(yè)面。
總之,Pyspider十分強悍,強大到更象一個(gè)產(chǎn)品而不是一個(gè)框架。
缺點(diǎn):
URL去重使用數據庫而不是布隆過(guò)濾器,億級儲存的db io將造成效率大幅減低。
使用上的人性化犧牲了靈活度,定制化能力增加。
Scrapy
介紹:
Scrapy是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的應用框架。 可以應用在包括數據挖掘,信息處理或儲存歷史數據等一系列的程序中。Scrapy 使用 Twisted這個(gè)異步網(wǎng)路庫來(lái)處理網(wǎng)路通信,架構清晰,并且包含了各類(lèi)中間件插口,可以靈活的完成各類(lèi)需求。Scratch,是抓取的意思,這個(gè)Python的爬蟲(chóng)框架叫Scrapy,大概也是這個(gè)意思吧。
優(yōu)點(diǎn):
極其靈活的多樣化爬取。
社區人數多、文檔構建。
URL去重采用布隆過(guò)濾器方案。
可以處理不完整的HTML,Scrapy早已提供了selectors(一個(gè)在lxml的基礎上提供了更中級的插口),可以高效地處理不完整的HTML代碼。
缺點(diǎn):
不支持分布式布署。
原生不支持抓取JavaScript的頁(yè)面。
全命令行操作,對用戶(hù)不友好,需要一定學(xué)習周期。
結論
篇幅有限,就先選擇這三個(gè)最有代表性的框架進(jìn)行PK。他們都有遠超他人的優(yōu)點(diǎn),比如:Nutch天生的搜索引擎解決方案、Pyspider產(chǎn)品級的WebUI、Scrapy最靈活的多樣化爬取。也都各自致命的缺點(diǎn),比如Scrapy不支持分布式布署,Pyspider不夠靈活,Nutch和搜索綁定。究竟該如何選擇呢?
我們的目標是做純粹的爬蟲(chóng),不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可訂制的Scrapy。Scrapy的靈活性幾乎就能使我們完成任何嚴苛的抓取需求,它的“難用”也使我們不知不覺(jué)的研究爬蟲(chóng)技術(shù)?,F在還不是享受Pyspider的時(shí)侯,目前的當務(wù)之急是打好基礎,應該學(xué)習最接近爬蟲(chóng)本質(zhì)的框架,了解它的原理,所以把Pyspider也排除掉。
最終,理性的從個(gè)人的需求角度對比,還是Scrapy勝出!其實(shí)Scrapy還有更多優(yōu)點(diǎn):
HTML, XML源數據選擇及提取的原生支持。
提供了一系列在spider之間共享的可復用的過(guò)濾器(即 Item Loaders),對智能處理爬取數據提供了外置支持。
通過(guò) feed導入 提供了多格式(JSON、CSV、XML),多儲存前端(FTP、S3、本地文件系統)的外置支持。
提供了media pipeline,可以 自動(dòng)下載 爬取到的數據中的圖片(或者其他資源)。
高擴展性。您可以通過(guò)使用 signals ,設計好的API(中間件, extensions, pipelines)來(lái)訂制實(shí)現您的功能。
內置的中間件及擴充為下述功能提供了支持:
cookies and session 處理
HTTP 壓縮
HTTP 認證
HTTP 緩存
user-agent模擬
robots.txt
爬取深度限制
針對非英語(yǔ)語(yǔ)族中不標準或則錯誤的編碼申明, 提供了手動(dòng)檢查以及強壯的編碼支持。
支持依照模板生成爬蟲(chóng)。在加速爬蟲(chóng)創(chuàng )建的同時(shí),保持在小型項目中的代碼更為一致。
針對多爬蟲(chóng)下性能評估、失敗檢查,提供了可擴充的 狀態(tài)搜集工具 。
提供 交互式shell終端 , 為您測試XPath表達式,編寫(xiě)和調試爬蟲(chóng)提供了極大的便捷。
提供 System service, 簡(jiǎn)化在生產(chǎn)環(huán)境的布署及運行。
內置 Telnet終端 ,通過(guò)在Scrapy進(jìn)程中鉤入Python終端,使您可以查看而且調試爬蟲(chóng)。
Logging 為您在爬取過(guò)程中捕捉錯誤提供了便捷。
支持 Sitemaps 爬取。
具有緩存的DNS解析器。
查看全部

介紹
大家好!我們從明天開(kāi)始學(xué)習開(kāi)源爬蟲(chóng)框架Scrapy,如果你看過(guò)《手把手》系列的前兩篇,那么明天的內容就十分容易理解了。細心的讀者或許會(huì )有疑問(wèn),為什么不學(xué)出身名門(mén)的Apache頂尖項目Nutch,或者人氣激增的國外高手開(kāi)發(fā)的Pyspider等框架呢?原因很簡(jiǎn)單,我們來(lái)看一下主流爬蟲(chóng)框架在GitHub上的活躍度:
這些框架都太優(yōu)秀,都有好多用戶(hù),活躍度相對低的并不說(shuō)明技術(shù)低,活躍度相對高的似乎只是多滿(mǎn)足了一些用戶(hù)需求。接下來(lái)我們還是要理智的對主流爬蟲(chóng)框架做一個(gè)對比剖析。
開(kāi)源框架大PK
各路英雄早已到齊了, PK如今開(kāi)始!
Nutch
介紹:
Nutch是一個(gè)開(kāi)源的Java實(shí)現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和網(wǎng)路爬蟲(chóng)。
盡管搜索是上網(wǎng)的基本要求,但是現有的搜索引擎的數量卻在增長(cháng)。并且這很有可能進(jìn)一步演化成為一個(gè)公司壟斷了幾乎所有的網(wǎng)頁(yè)搜索為其攫取商業(yè)利益。這似乎不利于廣大Internet用戶(hù)。
Nutch為我們提供了這樣一個(gè)不同的選擇。相對于這些商用的搜索引擎,Nutch作為開(kāi)放源代碼的搜索引擎將會(huì )愈發(fā)透明,從而更值得你們信賴(lài)?,F在所有主要的搜索引擎都采用私有的排序算法, 而不會(huì )解釋為何一個(gè)網(wǎng)頁(yè)會(huì )排在一個(gè)特定的位置。除此之外, 有的搜索引擎根據網(wǎng)站所付的費用, 而不是依據它們本身的價(jià)值進(jìn)行排序。與它們不同,Nutch沒(méi)有哪些須要隱瞞,也沒(méi)有動(dòng)機去扭曲搜索的結果。Nutch將盡自己最大的努力為用戶(hù)提供最好的搜索結果。
優(yōu)點(diǎn):
Nutch支持分布式抓取,并有Hadoop支持,可以進(jìn)行多機分布抓取,存儲和索引。另外太吸引人的一點(diǎn)在于,它提供了一種插件框架,使得其對各類(lèi)網(wǎng)頁(yè)內容的解析、各種數據的采集、查詢(xún)、集群、過(guò)濾等功能才能便捷的進(jìn)行擴充。正是因為有此框架,使得 Nutch 的插件開(kāi)發(fā)特別容易,第三方的插件也層出不窮,極大的提高了 Nutch 的功能和聲譽(yù)。
缺點(diǎn):
對于大多數用戶(hù)來(lái)說(shuō),一般是想做一個(gè)精確數據爬取的爬蟲(chóng),就像第一篇里爬歌單那種“主題爬蟲(chóng)”。而第二篇介紹的“通用爬蟲(chóng)”適合做搜索引擎,這種需求就比較少。如果借此為標準,那么為搜索引擎而生的Nutch就有著(zhù)天生缺點(diǎn)。Nutch的構架里大部分為搜索引擎而設計的,對精確爬取沒(méi)有非常的考慮。也就是說(shuō),用Nutch做主題爬蟲(chóng),會(huì )浪費好多的時(shí)間在不必要的估算上。而且假如你企圖通過(guò)對Nutch進(jìn)行二次開(kāi)發(fā)來(lái)擴充其訂制能力,基本上就要破壞Nutch的框架,反而不如自己寫(xiě)了。
Pyspider
介紹:
Pyspider是一個(gè)國人編撰的強悍的網(wǎng)路爬蟲(chóng)系統并帶有強悍的WebUI。采用Python語(yǔ)言編撰,分布式構架,支持多種數據庫前端,強大的WebUI支持腳本編輯器,任務(wù)監視器,項目管理器以及結果查看器。
Pyspider的主要功能包括,抓取、更新調度多站點(diǎn)的特定的頁(yè)面;需要對頁(yè)面進(jìn)行結構化信息提??;靈活可擴充開(kāi)源爬蟲(chóng)框架,穩定可監控。滿(mǎn)足了絕大多數Python爬蟲(chóng)的需求 —— 定向抓取,結構化化解析。但是面對結構迥異的各類(lèi)網(wǎng)站,單一的抓取模式并不一定能滿(mǎn)足,靈活的抓取控制是必須的。為了達到這個(gè)目的,單純的配置文件常常不夠靈活,于是,通過(guò)腳本去控制抓取成為了最后的選擇。而去重調度,隊列,抓取,異常處理,監控等功能作為框架,提供給抓取腳本,并保證靈活性。最后加上web的編輯調試環(huán)境,以及web任務(wù)監控,即成為了最終的框架。
優(yōu)點(diǎn):
支持分布式布署。
完全可視化,對用戶(hù)特別友好:WEB 界面編撰調試腳本,起停腳本,監控執行狀態(tài),查看活動(dòng)歷史,獲取結果產(chǎn)出。
簡(jiǎn)單開(kāi)源爬蟲(chóng)框架,五分鐘才能上手。腳本規則簡(jiǎn)單,開(kāi)發(fā)效率高。
支持抓取JavaScript的頁(yè)面。
總之,Pyspider十分強悍,強大到更象一個(gè)產(chǎn)品而不是一個(gè)框架。
缺點(diǎn):
URL去重使用數據庫而不是布隆過(guò)濾器,億級儲存的db io將造成效率大幅減低。
使用上的人性化犧牲了靈活度,定制化能力增加。
Scrapy
介紹:
Scrapy是一個(gè)為了爬取網(wǎng)站數據,提取結構性數據而編撰的應用框架。 可以應用在包括數據挖掘,信息處理或儲存歷史數據等一系列的程序中。Scrapy 使用 Twisted這個(gè)異步網(wǎng)路庫來(lái)處理網(wǎng)路通信,架構清晰,并且包含了各類(lèi)中間件插口,可以靈活的完成各類(lèi)需求。Scratch,是抓取的意思,這個(gè)Python的爬蟲(chóng)框架叫Scrapy,大概也是這個(gè)意思吧。
優(yōu)點(diǎn):
極其靈活的多樣化爬取。
社區人數多、文檔構建。
URL去重采用布隆過(guò)濾器方案。
可以處理不完整的HTML,Scrapy早已提供了selectors(一個(gè)在lxml的基礎上提供了更中級的插口),可以高效地處理不完整的HTML代碼。
缺點(diǎn):
不支持分布式布署。
原生不支持抓取JavaScript的頁(yè)面。
全命令行操作,對用戶(hù)不友好,需要一定學(xué)習周期。
結論
篇幅有限,就先選擇這三個(gè)最有代表性的框架進(jìn)行PK。他們都有遠超他人的優(yōu)點(diǎn),比如:Nutch天生的搜索引擎解決方案、Pyspider產(chǎn)品級的WebUI、Scrapy最靈活的多樣化爬取。也都各自致命的缺點(diǎn),比如Scrapy不支持分布式布署,Pyspider不夠靈活,Nutch和搜索綁定。究竟該如何選擇呢?
我們的目標是做純粹的爬蟲(chóng),不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可訂制的Scrapy。Scrapy的靈活性幾乎就能使我們完成任何嚴苛的抓取需求,它的“難用”也使我們不知不覺(jué)的研究爬蟲(chóng)技術(shù)?,F在還不是享受Pyspider的時(shí)侯,目前的當務(wù)之急是打好基礎,應該學(xué)習最接近爬蟲(chóng)本質(zhì)的框架,了解它的原理,所以把Pyspider也排除掉。
最終,理性的從個(gè)人的需求角度對比,還是Scrapy勝出!其實(shí)Scrapy還有更多優(yōu)點(diǎn):
HTML, XML源數據選擇及提取的原生支持。
提供了一系列在spider之間共享的可復用的過(guò)濾器(即 Item Loaders),對智能處理爬取數據提供了外置支持。
通過(guò) feed導入 提供了多格式(JSON、CSV、XML),多儲存前端(FTP、S3、本地文件系統)的外置支持。
提供了media pipeline,可以 自動(dòng)下載 爬取到的數據中的圖片(或者其他資源)。
高擴展性。您可以通過(guò)使用 signals ,設計好的API(中間件, extensions, pipelines)來(lái)訂制實(shí)現您的功能。
內置的中間件及擴充為下述功能提供了支持:
cookies and session 處理
HTTP 壓縮
HTTP 認證
HTTP 緩存
user-agent模擬
robots.txt
爬取深度限制
針對非英語(yǔ)語(yǔ)族中不標準或則錯誤的編碼申明, 提供了手動(dòng)檢查以及強壯的編碼支持。
支持依照模板生成爬蟲(chóng)。在加速爬蟲(chóng)創(chuàng )建的同時(shí),保持在小型項目中的代碼更為一致。
針對多爬蟲(chóng)下性能評估、失敗檢查,提供了可擴充的 狀態(tài)搜集工具 。
提供 交互式shell終端 , 為您測試XPath表達式,編寫(xiě)和調試爬蟲(chóng)提供了極大的便捷。
提供 System service, 簡(jiǎn)化在生產(chǎn)環(huán)境的布署及運行。
內置 Telnet終端 ,通過(guò)在Scrapy進(jìn)程中鉤入Python終端,使您可以查看而且調試爬蟲(chóng)。
Logging 為您在爬取過(guò)程中捕捉錯誤提供了便捷。
支持 Sitemaps 爬取。
具有緩存的DNS解析器。


