1. 程式人生 > >爬蟲框架分析之各語言爬蟲框架

爬蟲框架分析之各語言爬蟲框架

> 看看有哪些爬蟲框架 
#一、前言
目前市場上爬蟲框架有很多,不同語言不同型別的爬蟲框架都有,然而在開發預研的時候對於選擇那種
框架對於很多開發者來說尤為頭疼;

本篇主要總結一下市場上主流的開發語言中有哪些主流的爬蟲框架,以及爬蟲框架的優劣;希望在對你在選擇合適爬蟲框架中有所幫助。
#二、主流語言爬蟲框架列表
##常用爬蟲框架列表
JAVA | PYTHON |    PHP | C# | C/C++
--- | --- | --- | --- | ----
Apache Nutch2  | scrapy | phpspider |    DotnetSpider | open-source-search-engine
webmagic | Crawley |  Beanbun    |NWebCrawler | Cobweb
Heritrix | Portia |   PHPCrawl | SmartSpider |  upton
WebCollector | PySpider | php selenium | Abot   | wombat
crawler4j |    grab | |  xNet | Spidr
Spiderman |    cola | |  AngleSharp |   Larbin
SeimiCrawler | python selenium |     |HtmlAgilityPack   
jsoup |          | |CSQuery     |
java selenium |             
htmlunit |          
#三、主流爬蟲框架簡介
##1.Java爬蟲框架 ###Apache Nutch2 地址: http://nutch.apache.org/ Nutch 是一個開源Java 實現的搜尋引擎。它提供了我們執行自己的搜尋引擎所需的全部工具。包括全文搜尋和Web爬蟲。 Nutch 致力於讓每個人能很容易, 同時花費很少就可以配置世界一流的Web搜尋引擎. 為了完成這一巨集偉的目標, Nutch必須能夠做到: * 每個月取幾十億網頁 * 為這些網頁維護一個索引 * 對索引檔案進行每秒上千次的搜尋 * 對索引檔案進行每秒上千次的搜尋 * 提供高質量的搜尋結果 簡單來說Nutch支援分散式,可以通過配置網站地址、規則、以及採集的深度(通用爬蟲或全網爬蟲)對網站進行採集,並提供了全文檢索功能,可以對採集下來的海量資料進行全文檢索;假如您想完成對站點所有內容進行採集,且不在乎採集和解析精度(不對特定頁面特定欄位內容採集)的需求,建議你使用Apache Nutch,假如您想對站點的指定內容板塊指定欄位採集,建議您使用垂直爬蟲較為靈活。 ###webmgaic(推薦)
地址: http://webmagic.io/ WebMagic是一個簡單靈活的Java爬蟲框架。基於WebMagic,你可以快速開發出一個高效、易維護的爬蟲。 特性: * 簡單的API,可快速上手 * 模組化的結構,可輕鬆擴充套件 * 提供多執行緒和分散式支援 ###Heritrix 地址: http://crawler.archive.org/ Heritrix 是一個由 java 開發的、開源的網路爬蟲,使用者可以使用它來從網上抓取想要的資源。其最出色之處在於它良好的可擴充套件性,方便使用者實現自己的抓取邏輯。 ###WebCollector 地址: https://github.com/CrawlScript/WebCollector WebCollector是一個無須配置、便於二次開發的JAVA爬蟲框架(核心),它提供精簡的的API,只需少量程式碼即可實現一個功能強大的爬蟲。WebCollector-Hadoop是WebCollector的Hadoop版本,支援分散式爬取。 ###crawler4j
地址: https://github.com/yasserg/crawler4j crawler4j是一款基於Java的輕量級單機開源爬蟲框架,最大的一個特點就是簡單。另外也支援多執行緒、支援代理、可以過濾重複URL 基本上從載入jar到工程裡面 通過修改示例的程式碼就可以簡單的實現一個爬蟲的全部功能,而這一切動作加起來都不需要超過半個小時。 ###Spiderman 地址: https://m.gitee.com/l-weiwei/spiderman Spiderman 是一個Java開源Web資料抽取工具。它能夠收集指定的Web頁面並從這些頁面中提取有用的資料。 Spiderman主要是運用了像XPath、正則、表示式引擎等這些技術來實現資料抽取。 ###SeimiCrawler 地址: http://seimi.wanghaomiao.cn/ 一個敏捷的,獨立部署的,支援分散式的Java爬蟲框架 SeimiCrawler是一個強大的,高效敏捷的,支援分散式的爬蟲開發框架,希望能在最大程度上降低新手開發一個可用性高且效能不差的爬蟲系統的門檻,以及提升開發爬蟲系統的開發效率。在SeimiCrawler的世界裡,絕大多數人只需關心去寫抓取的業務邏輯就夠了,其餘的Seimi幫你搞定。設計思想上SeimiCrawler受Python的爬蟲框架Scrapy啟發很大,同時融合了Java語言本身特點與Spring的特性,並希望在國內更方便且普遍的使用更有效率的XPath解析HTML,所以SeimiCrawler預設的HTML解析器是JsoupXpath,預設解析提取HTML資料工作均使用XPath來完成(當然,資料處理亦可以自行選擇其他解析器)。 ###jsoup 地址: https://jsoup.org/ jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。 ##2.Python爬蟲框架 ###scrapy (推薦) 地址: https://scrapy.org/ Scrapy,Python開發的一個快速、高層次的螢幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的資料。Scrapy用途廣泛,可以用於資料探勘、監測和自動化測試。 Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種型別爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支援。 Scrap,是碎片的意思,這個Python的爬蟲框架叫Scrapy。 ###Crawley 地址:http://project.crawley-cloud.com/ 高速爬取對應網站的內容,支援關係和非關係資料庫,資料可以匯出為JSON、XML等 ###Portia 地址:https://scrapinghub.com/portia Portia 是一個用 Python 編寫無需任何程式設計知識,就能可視爬取網站資料的開源工具。無需下載或安裝任何東西,因為,Portia 是執行在您的 Web 瀏覽器中。 Portia 是 scrapyhub 開源的一款視覺化爬蟲規則編寫工具。Portia 提供了視覺化的 Web 頁面,只需通過簡單點選,標註頁面上需提取的相應資料,無需任何程式設計知識即可完成爬取規則的開發。這些規則還可在 Scrapy 中使用,用於抓取頁面。 ###PySpider 地址:http://www.pyspider.cn/ PySpider:一個國人編寫的強大的網路爬蟲系統並帶有強大的WebUI。採用Python語言編寫,分散式架構,支援多種資料庫後端,強大的WebUI支援指令碼編輯器,任務監視器,專案管理器以及結果檢視器。 ###grab 地址:http://www.imscraping.ninja/posts/introducing-grab-framework-python-webscraping/ 網路爬蟲框架(基於pycurl/multicur)。 ###cola 地址:https://github.com/chineking/cola 一個分散式爬蟲框架。專案整體設計有點糟,模組間耦合度較高,不過值得借鑑。 ##3.PHP爬蟲框架 ###phpspider 地址:https://github.com/owner888/phpspider phpspider是一個爬蟲開發框架。使用本框架,你不用瞭解爬蟲的底層技術實現,爬蟲被網站遮蔽、有些網站需要登入或驗證碼識別才能爬取等問題。簡單幾行PHP程式碼,就可以建立自己的爬蟲,利用框架封裝的多程序Worker類庫,程式碼更簡潔,執行效率更高速度更快。 ###Beanbun 地址:http://www.beanbun.org/#/ Beanbun 是用 PHP 編寫的多程序網路爬蟲框架,具有良好的開放性、高可擴充套件性。 * 支援守護程序與普通兩種模式(守護程序模式只支援 Linux 伺服器) * 預設使用 Guzzle 進行爬取 * 支援分散式 * 支援記憶體、Redis 等多種佇列方式 * 支援自定義URI過濾 * 支援廣度優先和深度優先兩種爬取方式 * 遵循 PSR-4 標準 * 爬取網頁分為多步,每步均支援自定義動作(如新增代理、修改 user-agent 等) * 靈活的擴充套件機制,可方便的為框架製作外掛:自定義佇列、自定義爬取方式… ###PHPCrawl 地址:http://phpcrawl.cuab.de/ PHPCrawl是一個PHP開源的Web檢索蜘蛛(爬蟲)類庫。PHPCrawl抓取工具“ Spider ”的網站,並提供一切有關網頁,連結,檔案等資訊。 PHPCrawl povides可以選擇性的指定的爬蟲的行為,比如喜歡網址、內容型別,過濾器、cookie的處理等方式。 ##4.c#爬蟲框架 ###DotnetSpider 地址:http://www.dotnetspider.com/ DotnetSpider這是國人開源的一個跨平臺、高效能、輕量級的爬蟲軟體,採用 C# 開發。目前是.Net開源爬蟲最為優秀的爬蟲之一。 ###NWebCrawler 地址:http://nwebcrawler.codeplex.com/ NWebCrawler是一款開源的C#網路爬蟲程式更多NWebCrawler ###SmartSpider 地址:http://www.softpedia.com/get/Internet/Download-Managers/SmartSpider.shtml SmartSpider爬蟲引擎核心版,全新的設計理念,真正的極簡版本。 ###Abot 地址:https://github.com/sjdirect/abot Abot是一個開源的.net爬蟲,速度快,易於使用和擴充套件。 ###xNet 地址:https://github.com/X-rus/xNet 這個一個俄國牛人寫的開源工具,為啥說他強悍了,因為他將所有Http協議的底層都實現了一遍,這有啥好處?只要你是寫爬蟲的,都會遇到一個讓人抓狂的問題,就是明明知道自己Http請求頭跟瀏覽器一模一樣了,為啥還會獲取不到自己想要的資料。這時你如果使用HttpWebReaquest,你只能除錯到GetRespone,底層的位元組流是除錯不到了。所以必須得有個更深入的底層元件,方便自己除錯。 ###AngleSharp 地址:http://anglesharp.github.io/ 解析HTML利器AngleSharp介紹解析HTML利器AngleSharp介紹AngleSharp是基於.NET(C#)開發的專門為解析xHTML原始碼的DLL元件。 ###HtmlAgilityPack 地址:http://htmlagilitypack.codeplex.com/ HtmlAgilityPack是 .NET 下的一個 HTML 解析類庫。支援用 XPath 來解析 HTML 。名稱空間: HtmlAgilityPack ###CSQuery 地址:https://github.com/jamietre/CsQuery CsQuery 犀利的html程式碼分析庫,像jq一樣用c#處理html ##5.C/C++爬蟲框架 ###open-source-search-engine 地址:https://github.com/gigablast/open-source-search-engine 基於C/C++開發的網路爬蟲和搜尋引擎. ###Cobweb 地址:https://github.com/stewartmckee/cobweb 非常靈活,易於擴充套件的網路爬蟲,可以單點部署使用. ###upton 地址:https://github.com/propublica/upton 一個易於上手的爬蟲框架集合,支援CSS選擇器. ###wombat 地址:https://github.com/felipecsl/wombat 基於Ruby天然的支援DSL的網路爬蟲,易於提取網頁正文資料. ###Spidr 地址:https://github.com/postmodern/spidr 全站資料採集,支援無限的網站連結地址採集. ###Larbin 地址:http://larbin.sourceforge.net/download.html larbin是一種開源的網路爬蟲/網路蜘蛛,由法國的年輕人Sébastien Ailleret獨立開發,用c++語言實現。larbin目的是能夠跟蹤頁面的url進行擴充套件的抓取,最後為搜尋引擎提供廣泛的資料來源。 Larbin只是一個爬蟲,也就是說larbin只抓取網頁,至於如何parse的事情則由使用者自己完成。另外,如何儲存到資料庫以及建立索引的事情 larbin也不提供。 larbin最初的設計也是依據設計簡單但是高度可配置性的原則,因此我們可以看到,一個簡單的larbin的爬蟲可以每天獲取500萬的網頁,實在是非常高效。 利用larbin,我們可以輕易的獲取/確定單個網站的所有聯結,甚至可以映象一個網站;也可以用它建立url 列表群,例如針對所有的網頁進行 url retrive後,進行xml的聯結的獲取。或者是 mp3,或者定製larbin,可以作為搜尋引擎的資訊的來源。 #四.總結 爬蟲框架很多,如果有興趣我們自己也可以寫一些。我們不需要掌握每種主流的爬蟲框架,只需要根據自己擅長編寫語言,深入的掌握一種爬蟲框架即可。大多數爬蟲框架實現起來都大同小異。 如果你是python開發者我推薦你學習目前流行的scrapy,如果你是java開發者我推薦你學習webmagic。