開(kāi)源爬蟲(chóng)框架各有哪些優(yōu)缺點(diǎn)
優(yōu)采云 發(fā)布時(shí)間: 2020-05-04 08:06首先爬蟲(chóng)框架有三種
分布式爬蟲(chóng):Nutch
JAVA單機爬蟲(chóng):Crawler4j,WebMagic,WebCollector
非JAVA單機爬蟲(chóng):scrapy
海量URL管理
網(wǎng)速快
Nutch是為搜索引擎設計的爬蟲(chóng),大多數用戶(hù)是須要一個(gè)做精準數據爬?。ň槿。┑呐老x(chóng)。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒(méi)有很大的意義。
用Nutch做數據抽取,會(huì )浪費好多的時(shí)間在不必要的估算上。而且假如你企圖通過(guò)對Nutch進(jìn)行二次開(kāi)發(fā),來(lái)促使它適用于精抽取的業(yè)務(wù),基本上就要破壞Nutch的框架,把Nutch改的面目全非。
Nutch依賴(lài)hadoop運行,hadoop本身會(huì )消耗好多的時(shí)間。如果集群機器數目較少,爬取速率反倒不如單機爬蟲(chóng)。
Nutch似乎有一套插件機制,而且作為亮點(diǎn)宣傳??梢钥匆?jiàn)一些開(kāi)源的Nutch插件,提供精抽取的功能。但是開(kāi)發(fā)過(guò)Nutch插件的人都曉得,Nutch的插件系統有多拙劣。利用反射的機制來(lái)加載和調用插件,使得程序的編撰和調試都顯得異常困難,更別說(shuō)在里面開(kāi)發(fā)一套復雜的精抽取系統了。
Nutch并沒(méi)有為精抽取提供相應的插件掛載點(diǎn)。Nutch的插件有只有五六個(gè)掛載點(diǎn),而這五六個(gè)掛載點(diǎn)都是為了搜索引擎服務(wù)的開(kāi)源爬蟲(chóng)框架,并沒(méi)有為精抽取提供掛載點(diǎn)。大多數Nutch的精抽取插件,都是掛載在“頁(yè)面解析”(parser)這個(gè)掛載點(diǎn)的,這個(gè)掛載點(diǎn)雖然是為了解析鏈接(為后續爬取提供URL),以及為搜索引擎提供一些易抽取的網(wǎng)頁(yè)信息(網(wǎng)頁(yè)的meta信息、text)
用Nutch進(jìn)行爬蟲(chóng)的二次開(kāi)發(fā),爬蟲(chóng)的編撰和調試所需的時(shí)間,往往是單機爬蟲(chóng)所需的十倍時(shí)間不止。了解Nutch源碼的學(xué)習成本很高,何況是要使一個(gè)團隊的人都看懂Nutch源碼。調試過(guò)程中會(huì )出現除程序本身之外的各類(lèi)問(wèn)題(hadoop的問(wèn)題、hbase的問(wèn)題)。
Nutch2的版本目前并不適宜開(kāi)發(fā)。官方如今穩定的Nutch版本是nutch2.2.1,但是這個(gè)版本綁定了gora-0.3。Nutch2.3之前、Nutch2.2.1以后的一個(gè)版本,這個(gè)版本在官方的SVN中不斷更新。而且十分不穩定(一e799bee5baa6e997aee7ad94e78988e69d8331333363396465直在更改)。
支持多線(xiàn)程。
支持代理。
能過(guò)濾重復URL的。
負責遍歷網(wǎng)站和下載頁(yè)面。爬js生成的信息和網(wǎng)頁(yè)信息抽取模塊有關(guān),往往須要通過(guò)模擬瀏覽器(htmlunit,selenium)來(lái)完成。
先說(shuō)python爬蟲(chóng),python可以用30行代碼,完成JAVA
50行代碼干的任務(wù)。python寫(xiě)代碼的確快開(kāi)源爬蟲(chóng)框架,但是在調試代碼的階段,python代碼的調試常常會(huì )花費遠遠少于編碼階段市下的時(shí)間。
使用python開(kāi)發(fā),要保證程序的正確性和穩定性,就須要寫(xiě)更多的測試模塊。當然若果爬取規模不大、爬取業(yè)務(wù)不復雜,使用scrapy這些爬蟲(chóng)也是挺不錯的,可以輕松完成爬取任務(wù)。
bug較多,不穩定。
網(wǎng)頁(yè)上有一些異步加載的數據,爬取這種數據有兩種方式:使用模擬瀏覽器(問(wèn)題1中描述過(guò)了),或者剖析ajax的http請求,自己生成ajax懇求的url,獲取返回的數據。如果是自己生成ajax懇求,使用開(kāi)源爬蟲(chóng)的意義在那里?其實(shí)是要用開(kāi)源爬蟲(chóng)的線(xiàn)程池和URL管理功能(比如斷點(diǎn)爬?。?。
爬蟲(chóng)常常都是設計成廣度遍歷或則深度遍歷的模式,去遍歷靜態(tài)或則動(dòng)態(tài)頁(yè)面。爬取ajax信息屬于deepweb(深網(wǎng))的范疇,雖然大多數爬蟲(chóng)都不直接支持。但是也可以通過(guò)一些方式來(lái)完成。比如WebCollector使用廣度遍歷來(lái)遍歷網(wǎng)站。爬蟲(chóng)的第一輪爬取就是爬取*敏*感*詞*集合(seeds)中的所有url。簡(jiǎn)單來(lái)說(shuō),就是將生成的ajax懇求作為*敏*感*詞*,放入爬蟲(chóng)。用爬蟲(chóng)對那些*敏*感*詞*,進(jìn)行深度為1的廣度遍歷(默認就是廣度遍歷)。
這些開(kāi)源爬蟲(chóng)都支持在爬取時(shí)指定cookies,模擬登錄主要是靠cookies。至于cookies如何獲取,不是爬蟲(chóng)管的事情。你可以自動(dòng)獲取、用http請求模擬登錄或則用模擬瀏覽器手動(dòng)登入獲取cookie。
開(kāi)源爬蟲(chóng)通常還會(huì )集成網(wǎng)頁(yè)抽取工具。主要支持兩種規范:CSSSELECTOR和XPATH。
爬蟲(chóng)的調用是在Web的服務(wù)端調用的,平時(shí)如何用就如何用,這些爬蟲(chóng)都可以使用。
單機開(kāi)源爬蟲(chóng)的速率,基本都可以講本機的網(wǎng)速用到極限。爬蟲(chóng)的速率慢,往往是由于用戶(hù)把線(xiàn)程數開(kāi)少了、網(wǎng)速慢,或者在數據持久化時(shí),和數據庫的交互速率慢。而這種東西,往往都是用戶(hù)的機器和二次開(kāi)發(fā)的代碼決定的。這些開(kāi)源爬蟲(chóng)的速率,都太可以。


