webcollectorjs的簡單介紹

本文目錄一覽:

C#爬蟲爬蟲的多線程如何實現

開發網絡爬蟲應該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector還是其他的?這裡按照我的經驗隨便扯淡一下:上面說的爬蟲,基本可以分3類:1.分布式爬蟲:Nutch

2.JAVA單機爬蟲:Crawler4j、WebMagic、WebCollector

3. 非JAVA單機爬蟲:scrapy

第一類:分布式爬蟲

爬蟲使用分布式,主要是解決兩個問題:

1)海量URL管理

2)網速

現在比較流行的分布式爬蟲,是Apache的Nutch。但是對於大多數用戶來說,Nutch是這幾類爬蟲里,最不好的選擇,理由如下:

1)Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。也就是說,用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新寫一個分布式爬蟲框架了。

2)Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲快。

3)Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來加載和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套複雜的精抽取系統了。而且Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在“頁面解析”(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text文本)。

4)用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。

5)很多人說Nutch2有gora,可以持久化數據到avro文件、hbase、mysql等。很多人其實理解錯了,這裡說的持久化數據,是指將URL信息(URL管理所需要的數據)存放到avro、hbase、mysql。並不是你要抽取的結構化數據。其實對大多數人來說,URL信息存在哪裡無所謂。

6)Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。如果想用hbase配合nutch(大多數人用nutch2就是為了用hbase),只能使用0.90版本左右的hbase,相應的就要將hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比較有誤導作用,Nutch2的教程有兩個,分別是Nutch1.x和Nutch2.x,這個Nutch2.x官網上寫的是可以支持到hbase 0.94。但是實際上,這個Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。

所以,如果你不是要做搜索引擎,盡量不要選擇Nutch作為爬蟲。有些團隊就喜歡跟風,非要選擇Nutch來開發精抽取的爬蟲,其實是衝著Nutch的名氣(Nutch作者是Doug Cutting),當然最後的結果往往是項目延期完成。

如果你是要做搜索引擎,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構成一套非常強大的搜索引擎了。如果非要用Nutch2的話,建議等到Nutch2.3發布再看。目前的Nutch2是一個非常不穩定的版本。

第二類:JAVA單機爬蟲

這裡把JAVA爬蟲單獨分為一類,是因為JAVA在網絡爬蟲這塊的生態圈是非常完善的。相關的資料也是最全的。這裡可能有爭議,我只是隨便扯淡。

其實開源網絡爬蟲(框架)的開發非常簡單,難問題和複雜的問題都被以前的人解決了(比如DOM樹解析和定位、字符集檢測、海量URL去重),可以說是毫無技術含量。包括Nutch,其實Nutch的技術難點是開發hadoop,本身代碼非常簡單。網絡爬蟲從某種意義來說,類似遍曆本機的文件,查找文件中的信息。沒有任何難度可言。之所以選擇開源爬蟲框架,就是為了省事。比如爬蟲的URL管理、線程池之類的模塊,誰都能做,但是要做穩定也是需要一段時間的調試和修改的。

對於爬蟲的功能來說。用戶比較關心的問題往往是:

1)爬蟲支持多線程么、爬蟲能用代理么、爬蟲會爬取重複數據么、爬蟲能爬取JS生成的信息么?

不支持多線程、不支持代理、不能過濾重複URL的,那都不叫開源爬蟲,那叫循環執行http請求。

能不能爬js生成的信息和爬蟲本身沒有太大關係。爬蟲主要是負責遍歷網站和下載頁面。爬js生成的信息和網頁信息抽取模塊有關,往往需要通過模擬瀏覽器(htmlunit,selenium)來完成。這些模擬瀏覽器,往往需要耗費很多的時間來處理一個頁面。所以一種策略就是,使用這些爬蟲來遍歷網站,遇到需要解析的頁面,就將網頁的相關信息提交給模擬瀏覽器,來完成JS生成信息的抽取。

2)爬蟲可以爬取ajax信息么?

網頁上有一些異步加載的數據,爬取這些數據有兩種方法:使用模擬瀏覽器(問題1中描述過了),或者分析ajax的http請求,自己生成ajax請求的url,獲取返回的數據。如果是自己生成ajax請求,使用開源爬蟲的意義在哪裡?其實是要用開源爬蟲的線程池和URL管理功能(比如斷點爬取)。

如果我已經可以生成我所需要的ajax請求(列表),如何用這些爬蟲來對這些請求進行爬取?

爬蟲往往都是設計成廣度遍歷或者深度遍歷的模式,去遍歷靜態或者動態頁面。爬取ajax信息屬於deep web(深網)的範疇,雖然大多數爬蟲都不直接支持。但是也可以通過一些方法來完成。比如WebCollector使用廣度遍歷來遍歷網站。爬蟲的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡單來說,就是將生成的ajax請求作為種子,放入爬蟲。用爬蟲對這些種子,進行深度為1的廣度遍歷(默認就是廣度遍歷)。

3)爬蟲怎麼爬取要登陸的網站?

這些開源爬蟲都支持在爬取時指定cookies,模擬登陸主要是靠cookies。至於cookies怎麼獲取,不是爬蟲管的事情。你可以手動獲取、用http請求模擬登陸或者用模擬瀏覽器自動登陸獲取cookie。

4)爬蟲怎麼抽取網頁的信息?

開源爬蟲一般都會集成網頁抽取工具。主要支持兩種規範:CSS SELECTOR和XPATH。至於哪個好,這裡不評價。

5)爬蟲怎麼保存網頁的信息?

有一些爬蟲,自帶一個模塊負責持久化。比如webmagic,有一個模塊叫pipeline。通過簡單地配置,可以將爬蟲抽取到的信息,持久化到文件、數據庫等。還有一些爬蟲,並沒有直接給用戶提供數據持久化的模塊。比如crawler4j和webcollector。讓用戶自己在網頁處理模塊中添加提交數據庫的操作。至於使用pipeline這種模塊好不好,就和操作數據庫使用ORM好不好這個問題類似,取決於你的業務。

6)爬蟲被網站封了怎麼辦?

爬蟲被網站封了,一般用多代理(隨機代理)就可以解決。但是這些開源爬蟲一般沒有直接支持隨機代理的切換。所以用戶往往都需要自己將獲取的代理,放到一個全局數組中,自己寫一個代理隨機獲取(從數組中)的代碼。

7)網頁可以調用爬蟲么?

爬蟲的調用是在Web的服務端調用的,平時怎麼用就怎麼用,這些爬蟲都可以使用。

8)爬蟲速度怎麼樣?

單機開源爬蟲的速度,基本都可以講本機的網速用到極限。爬蟲的速度慢,往往是因為用戶把線程數開少了、網速慢,或者在數據持久化時,和數據庫的交互速度慢。而這些東西,往往都是用戶的機器和二次開發的代碼決定的。這些開源爬蟲的速度,都很可以。

9)明明代碼寫對了,爬不到數據,是不是爬蟲有問題,換個爬蟲能解決么?

如果代碼寫對了,又爬不到數據,換其他爬蟲也是一樣爬不到。遇到這種情況,要麼是網站把你封了,要麼是你爬的數據是javascript生成的。爬不到數據通過換爬蟲是不能解決的。

10)哪個爬蟲可以判斷網站是否爬完、那個爬蟲可以根據主題進行爬取?

爬蟲無法判斷網站是否爬完,只能儘可能覆蓋。

至於根據主題爬取,爬蟲之後把內容爬下來才知道是什麼主題。所以一般都是整個爬下來,然後再去篩選內容。如果嫌爬的太泛,可以通過限制URL正則等方式,來縮小一下範圍。

11)哪個爬蟲的設計模式和構架比較好?

設計模式純屬扯淡。說軟件設計模式好的,都是軟件開發完,然後總結出幾個設計模式。設計模式對軟件開發沒有指導性作用。用設計模式來設計爬蟲,只會使得爬蟲的設計更加臃腫。

至於構架,開源爬蟲目前主要是細節的數據結構的設計,比如爬取線程池、任務隊列,這些大家都能控制好。爬蟲的業務太簡單,談不上什麼構架。

所以對於JAVA開源爬蟲,我覺得,隨便找一個用的順手的就可以。如果業務複雜,拿哪個爬蟲來,都是要經過複雜的二次開發,才可以滿足需求。

第三類:非JAVA單機爬蟲

在非JAVA語言編寫的爬蟲中,有很多優秀的爬蟲。這裡單獨提取出來作為一類,並不是針對爬蟲本身的質量進行討論,而是針對larbin、scrapy這類爬蟲,對開發成本的影響。

先說python爬蟲,python可以用30行代碼,完成JAVA 50行代碼乾的任務。python寫代碼的確快,但是在調試代碼的階段,python代碼的調試往往會耗費遠遠多於編碼階段省下的時間。使用python開發,要保證程序的正確性和穩定性,就需要寫更多的測試模塊。當然如果爬取規模不大、爬取業務不複雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕鬆完成爬取任務。

對於C++爬蟲來說,學習成本會比較大。而且不能只計算一個人的學習成本,如果軟件需要團隊開發或者交接,那就是很多人的學習成本了。軟件的調試也不是那麼容易。

還有一些ruby、php的爬蟲,這裡不多評價。的確有一些非常小型的數據採集任務,用ruby或者php很方便。但是選擇這些語言的開源爬蟲,一方面要調研一下相關的生態圈,還有就是,這些開源爬蟲可能會出一些你搜不到的BUG(用的人少、資料也少)

java怎麼用webcollector爬取js動態頁面工程

使用WebCollector來爬取百度搜索引擎按照關鍵字搜索的結果頁面,解析規則可能會隨百度搜索的改版而失效。

* 我們希望繼續爬取每條搜索結果指向的網頁,這裡統稱為外鏈。

* 我們希望在訪問外鏈時仍然能夠知道外鏈處於搜索引擎的第幾頁、第幾條,

* 所以將頁號和排序信息放入後續的CrawlDatum中,為了能夠區分外鏈和

* 搜索引擎結果頁面,我們將其pageType設置為outlink,這裡的值完全由 用戶定義,可以設置一個任意的值

* 在經典爬蟲中,每個網頁都有一個refer信息,表示當前網頁的鏈接來源。

* 例如我們首先訪問新浪首頁,然後從新浪首頁中解析出了新的新聞鏈接,

* 則這些網頁的refer值都是新浪首頁。WebCollector不直接保存refer值,

* 但我們可以通過下面的方式,將refer信息保存在metaData中,達到同樣的效果。

* 經典爬蟲中錨文本的存儲也可以通過下面方式實現。

* 在一些需求中,希望得到當前頁面在遍歷樹中的深度,利用metaData很容易實現

* 這個功能,在將CrawlDatum添加到next中時,將其depth設置為當前訪問頁面 的depth+1即可。

開源爬蟲框架各有什麼優缺點?

首先爬蟲框架有三種

分布式爬蟲:Nutch

JAVA單機爬蟲:Crawler4j,WebMagic,WebCollector

非JAVA單機爬蟲:scrapy

第一類:分布式爬蟲

優點:

海量URL管理

網速快

缺點:

Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。

用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非。

Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲。

Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來加載和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套複雜的精抽取系統了。

Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在“頁面解析”(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text)

用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。

Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。

第二類:JAVA單機爬蟲

優點:

支持多線程。

支持代理。

能過濾重複URL的。

負責遍歷網站和下載頁面。爬js生成的信息和網頁信息抽取模塊有關,往往需要通過模擬瀏覽器(htmlunit,selenium)來完成。

缺點:

設計模式對軟件開發沒有指導性作用。用設計模式來設計爬蟲,只會使得爬蟲的設計更加臃腫。

第三類:非JAVA單機爬蟲

優點:

先說python爬蟲,python可以用30行代碼,完成JAVA

50行代碼乾的任務。python寫代碼的確快,但是在調試代碼的階段,python代碼的調試往往會耗費遠遠多於編碼階段省下的時間。

使用python開發,要保證程序的正確性和穩定性,就需要寫更多的測試模塊。當然如果爬取規模不大、爬取業務不複雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕鬆完成爬取任務。

缺點:

bug較多,不穩定。

爬蟲可以爬取ajax信息么?

網頁上有一些異步加載的數據,爬取這些數據有兩種方法:使用模擬瀏覽器(問題1中描述過了),或者分析ajax的http請求,自己生成ajax請求的url,獲取返回的數據。如果是自己生成ajax請求,使用開源爬蟲的意義在哪裡?其實是要用開源爬蟲的線程池和URL管理功能(比如斷點爬取)。

如果我已經可以生成我所需要的ajax請求(列表),如何用這些爬蟲來對這些請求進行爬取?      

爬蟲往往都是設計成廣度遍歷或者深度遍歷的模式,去遍歷靜態或者動態頁面。爬取ajax信息屬於deepweb(深網)的範疇,雖然大多數爬蟲都不直接支持。但是也可以通過一些方法來完成。比如WebCollector使用廣度遍歷來遍歷網站。爬蟲的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡單來說,就是將生成的ajax請求作為種子,放入爬蟲。用爬蟲對這些種子,進行深度為1的廣度遍歷(默認就是廣度遍歷)。

爬蟲怎麼爬取要登陸的網站?

這些開源爬蟲都支持在爬取時指定cookies,模擬登陸主要是靠cookies。至於cookies怎麼獲取,不是爬蟲管的事情。你可以手動獲取、用http請求模擬登陸或者用模擬瀏覽器自動登陸獲取cookie。

爬蟲怎麼抽取網頁的信息?

開源爬蟲一般都會集成網頁抽取工具。主要支持兩種規範:CSSSELECTOR和XPATH。

網頁可以調用爬蟲么?

爬蟲的調用是在Web的服務端調用的,平時怎麼用就怎麼用,這些爬蟲都可以使用。

爬蟲速度怎麼樣?

單機開源爬蟲的速度,基本都可以講本機的網速用到極限。爬蟲的速度慢,往往是因為用戶把線程數開少了、網速慢,或者在數據持久化時,和數據庫的交互速度慢。而這些東西,往往都是用戶的機器和二次開發的代碼決定的。這些開源爬蟲的速度,都很可以。

scrapy爬知乎問題,每次爬到240000多以後就結束了,什麼原因

髮網絡爬蟲應該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector其按照我經驗隨便扯淡:面說爬蟲基本3類:1.布式爬蟲:Nutch

2.JAVA單機爬蟲:Crawler4j、WebMagic、WebCollector

3. 非JAVA單機爬蟲:scrapy

第類:布式爬蟲

爬蟲使用布式主要解決兩問題:

1)海量URL管理

2)網速

現比較流行布式爬蟲ApacheNutch於數用戶說Nutch幾類爬蟲選擇理由:

1)Nutch搜索引擎設計爬蟲數用戶需要做精準數據爬取(精抽取)爬蟲Nutch運行套流程三二搜索引擎設計精抽取沒太意義說用Nutch做數據抽取浪費間必要計算且試圖通Nutch進行二發使適用於精抽取業務基本要破壞Nutch框架Nutch改面目全非修改Nutch能力真自重新寫布式爬蟲框架

2)Nutch依賴hadoop運行hadoop本身消耗間集群機器數量較少爬取速度反單機爬蟲快

3)Nutch雖套插件機制且作亮點宣傳看些源Nutch插件提供精抽取功能發Nutch插件都知道Nutch插件系統蹩腳利用反射機制加載調用插件使程序編寫調試都變異困難更別說面發套複雜精抽取系統且Nutch並沒精抽取提供相應插件掛載點Nutch插件五六掛載點五六掛載點都搜索引擎服務並沒精抽取提供掛載點數Nutch精抽取插件都掛載頁面解析(parser)掛載點掛載點其實解析鏈接(續爬取提供URL)及搜索引擎提供些易抽取網頁信息(網頁meta信息、text文本)

4)用Nutch進行爬蟲二發爬蟲編寫調試所需間往往單機爬蟲所需十倍間止解Nutch源碼習本高何況要讓團隊都讀懂Nutch源碼調試程現除程序本身外各種問題(hadoop問題、hbase問題)

5)說Nutch2gora持久化數據avro文件、hbase、mysql等其實理解錯說持久化數據指URL信息(URL管理所需要數據)存放avro、hbase、mysql並要抽取結構化數據其實數說URL信息存哪所謂

6)Nutch2版本目前並適合發官現穩定Nutch版本nutch2.2.1版本綁定gora-0.3想用hbase配合nutch(數用nutch2用hbase)能使用0.90版本左右hbase相應要hadoop版本降hadoop 0.2左右且nutch2官教程比較誤導作用Nutch2教程兩別Nutch1.xNutch2.xNutch2.x官網寫支持hbase 0.94實際Nutch2.x意思Nutch2.3前、Nutch2.2.1版本版本官SVN斷更新且非穩定(直修改)

所要做搜索引擎盡量要選擇Nutch作爬蟲些團隊喜歡跟風非要選擇Nutch發精抽取爬蟲其實衝著Nutch名氣(Nutch作者Doug Cutting)結往往項目延期完

要做搜索引擎Nutch1.x非選擇Nutch1.xsolr或者es配合構套非強搜索引擎非要用Nutch2建議等Nutch2.3發布再看目前Nutch2非穩定版本

第二類:JAVA單機爬蟲

JAVA爬蟲單獨類JAVA網絡爬蟲塊態圈非完善相關資料全能爭議我隨便扯淡

其實源網絡爬蟲(框架)發非簡單難問題複雜問題都前解決(比DOM樹解析定位、字符集檢測、海量URL重)說毫技術含量包括Nutch其實Nutch技術難點發hadoop本身代碼非簡單網絡爬蟲某種意義說類似遍曆本機文件查找文件信息沒任何難度言所選擇源爬蟲框架省事比爬蟲URL管理、線程池類模塊誰都能做要做穩定需要段間調試修改

於爬蟲功能說用戶比較關問題往往:

1)爬蟲支持線程、爬蟲能用代理、爬蟲爬取重複數據、爬蟲能爬取JS信息

支持線程、支持代理、能濾重複URL都叫源爬蟲叫循環執行http請求

能能爬js信息爬蟲本身沒太關係爬蟲主要負責遍歷網站載頁面爬js信息網頁信息抽取模塊關往往需要通模擬瀏覽器(htmlunit,selenium)完些模擬瀏覽器往往需要耗費間處理頁面所種策略使用些爬蟲遍歷網站遇需要解析頁面網頁相關信息提交給模擬瀏覽器完JS信息抽取

2)爬蟲爬取ajax信息

網頁些異步加載數據爬取些數據兩種:使用模擬瀏覽器(問題1描述)或者析ajaxhttp請求自ajax請求url獲取返數據自ajax請求使用源爬蟲意義哪其實要用源爬蟲線程池URL管理功能(比斷點爬取)

我已經我所需要ajax請求(列表)何用些爬蟲些請求進行爬取

爬蟲往往都設計廣度遍歷或者深度遍歷模式遍歷靜態或者態頁面爬取ajax信息屬於deep web(深網)範疇雖數爬蟲都直接支持通些完比WebCollector使用廣度遍歷遍歷網站爬蟲第輪爬取爬取種集合(seeds)所url簡單說ajax請求作种放入爬蟲用爬蟲些種進行深度1廣度遍歷(默認廣度遍歷)

3)爬蟲爬取要登陸網站

些源爬蟲都支持爬取指定cookies模擬登陸主要靠cookies至於cookies獲取爬蟲管事情手獲取、用http請求模擬登陸或者用模擬瀏覽器自登陸獲取cookie

4)爬蟲抽取網頁信息

源爬蟲般都集網頁抽取工具主要支持兩種規範:CSS SELECTORXPATH至於哪評價

5)爬蟲保存網頁信息

些爬蟲自帶模塊負責持久化比webmagic模塊叫pipeline通簡單配置爬蟲抽取信息持久化文件、數據庫等些爬蟲並沒直接給用戶提供數據持久化模塊比crawler4jwebcollector讓用戶自網頁處理模塊添加提交數據庫操作至於使用pipeline種模塊操作數據庫使用ORM問題類似取決於業務

6)爬蟲網站封辦

爬蟲網站封般用代理(隨機代理)解決些源爬蟲般沒直接支持隨機代理切換所用戶往往都需要自獲取代理放全局數組自寫代理隨機獲取(數組)代碼

7)網頁調用爬蟲

爬蟲調用Web服務端調用平用用些爬蟲都使用

8)爬蟲速度

單機源爬蟲速度基本都講本機網速用極限爬蟲速度慢往往用戶線程數少、網速慢或者數據持久化數據庫交互速度慢些東西往往都用戶機器二發代碼決定些源爬蟲速度都

9)明明代碼寫爬數據爬蟲問題換爬蟲能解決

代碼寫爬數據換其爬蟲爬遇種情況要網站封要爬數據javascript爬數據通換爬蟲能解決

10)哪爬蟲判斷網站否爬完、爬蟲根據主題進行爬取

爬蟲判斷網站否爬完能盡能覆蓋

至於根據主題爬取爬蟲內容爬才知道主題所般都整爬再篩選內容嫌爬太泛通限制URL則等式縮範圍

11)哪爬蟲設計模式構架比較

設計模式純屬扯淡說軟件設計模式都軟件發完總結幾設計模式設計模式軟件發沒指導性作用用設計模式設計爬蟲使爬蟲設計更加臃腫

至於構架源爬蟲目前主要細節數據結構設計比爬取線程池、任務隊列些家都能控制爬蟲業務太簡單談構架

所於JAVA源爬蟲我覺隨便找用順手業務複雜拿哪爬蟲都要經複雜二發才滿足需求

第三類:非JAVA單機爬蟲

非JAVA語言編寫爬蟲優秀爬蟲單獨提取作類並針爬蟲本身質量進行討論針larbin、scrapy類爬蟲發本影響

先說python爬蟲python用30行代碼完JAVA 50行代碼干任務python寫代碼確快調試代碼階段python代碼調試往往耗費遠遠於編碼階段省間使用python發要保證程序確性穩定性需要寫更測試模塊爬取規模、爬取業務複雜使用scrapy種爬蟲蠻錯輕鬆完爬取任務

於C++爬蟲說習本比較且能計算習本軟件需要團隊發或者交接習本軟件調試容易

些ruby、php爬蟲評價確些非型數據採集任務用ruby或者php便選擇些語言源爬蟲面要調研相關態圈些源爬蟲能些搜BUG(用少、資料少)

爬蟲框架都有什麼?

主流爬蟲框架通常由以下部分組成:

1.種子URL庫:URL用於定位互聯網中的各類資源,如最常見的網頁鏈接,還有常見的文件資源、流媒體資源等。種子URL庫作為網絡爬蟲的入口,標識出爬蟲應該從何處開始運行,指明了數據來源。

2.數據下載器:針對不同的數據種類,需要不同的下載方式。主流爬蟲框架通暢提供多種數據下載器,用來下載不同的資源,如靜態網頁下載器、動態網頁下載器、FTP下載器等。

3.過濾器:對於已經爬取的URL,智能的爬蟲需要對其進行過濾,以提高爬蟲的整體效率。常用的過濾器有基於集合的過濾器、基於布隆過濾的過濾器等。

4.流程調度器:合理的調度爬取流程,也可以提高爬蟲的整體效率。在流程調度器中,通常提供深度優先爬取、廣度優先爬取、訂製爬取等爬取策略。同時提供單線程、多線程等多種爬取方式。

開源爬蟲框架各有什麼優缺點

開發網絡爬蟲應該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector還是其他的?這裡按照我的經驗隨便扯淡一下:上面說的爬蟲,基本可以分3類:1.分布式爬蟲:Nutch

2.JAVA單機爬蟲:Crawler4j、WebMagic、WebCollector

3. 非JAVA單機爬蟲:scrapy

第一類:分布式爬蟲

爬蟲使用分布式,主要是解決兩個問題:

1)海量URL管理

2)網速

現在比較流行的分布式爬蟲,是Apache的Nutch。但是對於大多數用戶來說,Nutch是這幾類爬蟲里,最不好的選擇,理由如下:

1)Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。也就是說,用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新寫一個分布式爬蟲框架了。

2)Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲快。

3)Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來加載和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套複雜的精抽取系統了。而且Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在“頁面解析”(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text文本)。

4)用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。

5)很多人說Nutch2有gora,可以持久化數據到avro文件、hbase、mysql等。很多人其實理解錯了,這裡說的持久化數據,是指將URL信息(URL管理所需要的數據)存放到avro、hbase、mysql。並不是你要抽取的結構化數據。其實對大多數人來說,URL信息存在哪裡無所謂。

6)Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。如果想用hbase配合nutch(大多數人用nutch2就是為了用hbase),只能使用0.90版本左右的hbase,相應的就要將hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比較有誤導作用,Nutch2的教程有兩個,分別是Nutch1.x和Nutch2.x,這個Nutch2.x官網上寫的是可以支持到hbase 0.94。但是實際上,這個Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。

所以,如果你不是要做搜索引擎,盡量不要選擇Nutch作為爬蟲。有些團隊就喜歡跟風,非要選擇Nutch來開發精抽取的爬蟲,其實是衝著Nutch的名氣(Nutch作者是Doug Cutting),當然最後的結果往往是項目延期完成。

如果你是要做搜索引擎,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構成一套非常強大的搜索引擎了。如果非要用Nutch2的話,建議等到Nutch2.3發布再看。目前的Nutch2是一個非常不穩定的版本。

第二類:JAVA單機爬蟲

這裡把JAVA爬蟲單獨分為一類,是因為JAVA在網絡爬蟲這塊的生態圈是非常完善的。相關的資料也是最全的。這裡可能有爭議,我只是隨便扯淡。

其實開源網絡爬蟲(框架)的開發非常簡單,難問題和複雜的問題都被以前的人解決了(比如DOM樹解析和定位、字符集檢測、海量URL去重),可以說是毫無技術含量。包括Nutch,其實Nutch的技術難點是開發hadoop,本身代碼非常簡單。網絡爬蟲從某種意義來說,類似遍曆本機的文件,查找文件中的信息。沒有任何難度可言。之所以選擇開源爬蟲框架,就是為了省事。比如爬蟲的URL管理、線程池之類的模塊,誰都能做,但是要做穩定也是需要一段時間的調試和修改的。

對於爬蟲的功能來說。用戶比較關心的問題往往是:

1)爬蟲支持多線程么、爬蟲能用代理么、爬蟲會爬取重複數據么、爬蟲能爬取JS生成的信息么?

不支持多線程、不支持代理、不能過濾重複URL的,那都不叫開源爬蟲,那叫循環執行http請求。

能不能爬js生成的信息和爬蟲本身沒有太大關係。爬蟲主要是負責遍歷網站和下載頁面。爬js生成的信息和網頁信息抽取模塊有關,往往需要通過模擬瀏覽器(htmlunit,selenium)來完成。這些模擬瀏覽器,往往需要耗費很多的時間來處理一個頁面。所以一種策略就是,使用這些爬蟲來遍歷網站,遇到需要解析的頁面,就將網頁的相關信息提交給模擬瀏覽器,來完成JS生成信息的抽取。

2)爬蟲可以爬取ajax信息么?

網頁上有一些異步加載的數據,爬取這些數據有兩種方法:使用模擬瀏覽器(問題1中描述過了),或者分析ajax的http請求,自己生成ajax請求的url,獲取返回的數據。如果是自己生成ajax請求,使用開源爬蟲的意義在哪裡?其實是要用開源爬蟲的線程池和URL管理功能(比如斷點爬取)。

如果我已經可以生成我所需要的ajax請求(列表),如何用這些爬蟲來對這些請求進行爬取?

爬蟲往往都是設計成廣度遍歷或者深度遍歷的模式,去遍歷靜態或者動態頁面。爬取ajax信息屬於deep web(深網)的範疇,雖然大多數爬蟲都不直接支持。但是也可以通過一些方法來完成。比如WebCollector使用廣度遍歷來遍歷網站。爬蟲的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡單來說,就是將生成的ajax請求作為種子,放入爬蟲。用爬蟲對這些種子,進行深度為1的廣度遍歷(默認就是廣度遍歷)。

3)爬蟲怎麼爬取要登陸的網站?

這些開源爬蟲都支持在爬取時指定cookies,模擬登陸主要是靠cookies。至於cookies怎麼獲取,不是爬蟲管的事情。你可以手動獲取、用http請求模擬登陸或者用模擬瀏覽器自動登陸獲取cookie。

4)爬蟲怎麼抽取網頁的信息?

開源爬蟲一般都會集成網頁抽取工具。主要支持兩種規範:CSS SELECTOR和XPATH。至於哪個好,這裡不評價。

5)爬蟲怎麼保存網頁的信息?

有一些爬蟲,自帶一個模塊負責持久化。比如webmagic,有一個模塊叫pipeline。通過簡單地配置,可以將爬蟲抽取到的信息,持久化到文件、數據庫等。還有一些爬蟲,並沒有直接給用戶提供數據持久化的模塊。比如crawler4j和webcollector。讓用戶自己在網頁處理模塊中添加提交數據庫的操作。至於使用pipeline這種模塊好不好,就和操作數據庫使用ORM好不好這個問題類似,取決於你的業務。

6)爬蟲被網站封了怎麼辦?

爬蟲被網站封了,一般用多代理(隨機代理)就可以解決。但是這些開源爬蟲一般沒有直接支持隨機代理的切換。所以用戶往往都需要自己將獲取的代理,放到一個全局數組中,自己寫一個代理隨機獲取(從數組中)的代碼。

7)網頁可以調用爬蟲么?

爬蟲的調用是在Web的服務端調用的,平時怎麼用就怎麼用,這些爬蟲都可以使用。

8)爬蟲速度怎麼樣?

單機開源爬蟲的速度,基本都可以講本機的網速用到極限。爬蟲的速度慢,往往是因為用戶把線程數開少了、網速慢,或者在數據持久化時,和數據庫的交互速度慢。而這些東西,往往都是用戶的機器和二次開發的代碼決定的。這些開源爬蟲的速度,都很可以。

9)明明代碼寫對了,爬不到數據,是不是爬蟲有問題,換個爬蟲能解決么?

如果代碼寫對了,又爬不到數據,換其他爬蟲也是一樣爬不到。遇到這種情況,要麼是網站把你封了,要麼是你爬的數據是javascript生成的。爬不到數據通過換爬蟲是不能解決的。

10)哪個爬蟲可以判斷網站是否爬完、那個爬蟲可以根據主題進行爬取?

爬蟲無法判斷網站是否爬完,只能儘可能覆蓋。

至於根據主題爬取,爬蟲之後把內容爬下來才知道是什麼主題。所以一般都是整個爬下來,然後再去篩選內容。如果嫌爬的太泛,可以通過限制URL正則等方式,來縮小一下範圍。

11)哪個爬蟲的設計模式和構架比較好?

設計模式純屬扯淡。說軟件設計模式好的,都是軟件開發完,然後總結出幾個設計模式。設計模式對軟件開發沒有指導性作用。用設計模式來設計爬蟲,只會使得爬蟲的設計更加臃腫。

至於構架,開源爬蟲目前主要是細節的數據結構的設計,比如爬取線程池、任務隊列,這些大家都能控制好。爬蟲的業務太簡單,談不上什麼構架。

所以對於JAVA開源爬蟲,我覺得,隨便找一個用的順手的就可以。如果業務複雜,拿哪個爬蟲來,都是要經過複雜的二次開發,才可以滿足需求。

第三類:非JAVA單機爬蟲

在非JAVA語言編寫的爬蟲中,有很多優秀的爬蟲。這裡單獨提取出來作為一類,並不是針對爬蟲本身的質量進行討論,而是針對larbin、scrapy這類爬蟲,對開發成本的影響。

先說python爬蟲,python可以用30行代碼,完成JAVA 50行代碼乾的任務。python寫代碼的確快,但是在調試代碼的階段,python代碼的調試往往會耗費遠遠多於編碼階段省下的時間。使用python開發,要保證程序的正確性和穩定性,就需要寫更多的測試模塊。當然如果爬取規模不大、爬取業務不複雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕鬆完成爬取任務。

對於C++爬蟲來說,學習成本會比較大。而且不能只計算一個人的學習成本,如果軟件需要團隊開發或者交接,那就是很多人的學習成本了。軟件的調試也不是那麼容易。

還有一些ruby、php的爬蟲,這裡不多評價。的確有一些非常小型的數據採集任務,用ruby或者php很方便。但是選擇這些語言的開源爬蟲,一方面要調研一下相關的生態圈,還有就是,這些開源爬蟲可能會出一些你搜不到的BUG(用的人少、資料也少)

End.

原創文章,作者:NMGI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148551.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NMGI的頭像NMGI
上一篇 2024-11-03 15:16
下一篇 2024-11-03 15:16

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • 製作一個簡單的管理系統的成本及實現

    想要製作一個簡單的管理系統,需要進行技術選型、開發、測試等過程,那麼這個過程會花費多少錢呢?我們將從多個方面來闡述製作一個簡單的管理系統的成本及實現。 一、技術選型 當我們開始思考…

    編程 2025-04-27
  • 2的32次方-1:一個看似簡單卻又複雜的數字

    對於計算機領域的人來說,2的32次方-1(也就是十進制下的4294967295)這個數字並不陌生。它經常被用來表示IPv4地址或者無符號32位整數的最大值。但實際上,這個數字卻包含…

    編程 2025-04-27

發表回復

登錄後才能評論