java爬蟲(一)主流爬蟲框架的基本介紹


引言

  1. 獲取:目前都有哪些爬蟲技術?

  2. 理解:這些爬蟲技術的特色是什么?

  3. 擴展:快速上手一下cdp4j爬蟲技術。

  4. 糾錯:解析網頁過程中踩過的坑與填坑之路。

  5. 應用:實戰爬取網易新聞評論內容。

正文

一、目前的主流java爬蟲框架包括

 

 

 

Python中有Scrapy、Pyspider;

Java中有Nutch,WebMagic,WebCollector,heritrix3,Crawler4j

這些框架有哪些優缺點?

(1)、Scrapy:

 

 
 

      Scrapy,Python開發的一個快速、高層次的屏幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的數據。Scrapy用途廣泛,可以用於數據挖掘、監測和自動化測試.

     Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。

     Scrap,是碎片的意思,這個Python的爬蟲框架叫Scrapy。

優點:

1.極其靈活的定制化爬取。

2.社區人數比較多、文檔比較完善。

3.URL去重采用布隆過濾器方案。

4.可以處理不完整的HTML,Scrapy已經提供了selectors(一個在lxml的基礎上提供了更高級的接口),

    可以高效地處理不完整的HTML代碼。

缺點:

1.對新學員不友好,需要一定新手期

(2)、Pyspider:

 
 

         pyspider 是一個用python實現的功能強大的網絡爬蟲系統,能在瀏覽器界面上進行腳本的編寫,功能的調度和爬取結果的實時查看,后端使用常用的數據庫進行爬取結果的存儲,還能定時設置任務與任務優先級等。

優點:

1.支持分布式部署。

2.完全可視化,對用戶非常友好:WEB 界面編寫調試腳本,起停腳本,監控執行狀態,查看活動歷史,獲取結果產出。

3.簡單,五分鍾就能上手。腳本規則簡單,開發效率高。支持抓取JavaScript的頁面。

總之,Pyspider非常強大,強大到更像一個產品而不是一個框架。

缺點:

1.URL去重使用數據庫而不是布隆過濾器,億級存儲的db io將導致效率急劇降低。

 2.使用上的人性化犧牲了靈活度,定制化能力降低。

(3)Apache Nutch(高大上)

 

 
 

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

Nutch這個框架運行需要Hadoop,Hadoop需要開集群,對於想要快速入門爬蟲的我是望而卻步了......

一些資源地址列在這里,說不定以后會學習呢。

Apache頂級項目列表

Nutch官網

Nutch官方教程

1.Nutch支持分布式抓取,並有Hadoop支持,可以進行多機分布抓取,存儲和索引。另外很吸引人的一點在於,它提供了一種插件框架,使得其對各種網頁內容的解析、各種數據的采集、查詢、集群、過濾等功能能夠方便的進行擴展,正是由於有此框架,使得 Nutch 的插件開發非常容易,第三方的插件也層出不窮,極大的增強了 Nutch 的功能和聲譽。

缺點

1.Nutch的爬蟲定制能力比較弱

 

 

(4)、WebMagic

 

 
 

WebMagic是一個簡單靈活的Java爬蟲框架。基於WebMagic,你可以快速開發出一個高效、易維護的爬蟲。 

優點: 

 1.簡單的API,可快速上手 

 2.模塊化的結構,可輕松擴展 

 3.提供多線程和分布式支持

缺點:

 1.不支持JS頁面抓取

(5)、WebCollector

 
 

       WebCollector是一個無須配置、便於二次開發的JAVA爬蟲框架(內核),它提供精簡的的API,只需少量代碼即可實現一個功能強大的爬蟲。WebCollector-Hadoop是WebCollector的Hadoop版本,支持分布式爬取。

 優點:

  1.基於文本密度的網頁正文自動抽取

  2.支持斷點重爬

  3.支持代理

缺點:

  1.不支持分布式,只能單機

   2.無URL優先級調度

  3.活躍度不高

 

(6)、Heritrix3

 
 

      Heritrix 是一個由 java 開發的、開源的網絡爬蟲,用戶可以使用它來從網上抓取想要的資源

優點

Heritrix的爬蟲定制參數多

缺點

1.單實例的爬蟲,之間不能進行合作。

2.在有限的機器資源的情況下,卻要復雜的操作。

3.只有官方支持,僅僅在Linux上進行了測試。

4.每個爬蟲是單獨進行工作的,沒有對更新進行修訂。

5.在硬件和系統失敗時,恢復能力很差。

6.很少的時間用來優化性能。

7.相對於Nutch,Heritrix僅僅只是一個爬蟲工具,沒有提供搜索引擎。如果要對抓取的站點排序必須要實現類似於Pagerank的復雜算法。

(7)、Crawler4j

 

 
 

Crawler4j是一款基於Java的輕量級單機開源爬蟲框架

優點

1.多線程采集

2.內置了Url 過濾機制,采用的是BerkeleyDB 進行url的過濾。

3.可擴展為支持結構化提取網頁字段,可作為垂直采集用

缺點

1.不支持動態網頁抓取,例如網頁的ajax部分

2.不支持分布式采集,可以考慮將其作為分布式爬蟲的一部分,客戶端采集部分

為了更加直觀這7種爬蟲框架,小編做了一個框架優缺點對比圖,如下:

 

 

  1. Jsoup(經典·適合靜態網友)

這個框架堪稱經典,也是我們暑期實訓老師講解的框架。有近乎完整的文檔介紹。

和HtmlUnit同樣,只能get到靜態內容。

不過,這個框架有個有個優點,具有很強大的解析網頁的功能。

Jsoup中文教程


  1. selenium(Google多名大佬參與開發)

感覺很厲害,實際真的很厲害,看官網以及其他人的介紹,說是真正模擬瀏覽器。GitHub1.4w+star,你沒看錯,上萬了。但是我硬是沒配好環境。入門Demo就是沒法運行成功,所以就放棄了。

selenium 官方GitHub


  1. cdp4j(方便快捷,但是需要依賴谷歌瀏覽器)

使用前提:

安裝Chrome瀏覽器,即可。

簡單介紹:

HtmlUnit的優點在於,可以方便的爬取靜態網友;缺點在於,只能爬取靜態網頁。

selenium的優點在於,可以爬取渲染后的網頁;缺點在於,需要配環境變量等等。

將二者整合,取長補短,就有了cdp4j。

之所以選用它,是因為真的方便好用,而且官方文檔詳細,Demo程序基本都能跑起來,類名起的見名知意。想當年學軟件工程的時候,一直在納悶,為什么要寫文檔啊,我程序能實現功能不就得了?現如今,看着如此詳實的文檔,留下了激動而又悔恨的淚水......

cdp4j有很多功能:

a. 獲得渲染后的網頁源碼

b. 模擬瀏覽器點擊事件

c. 下載網頁上可以下載的文件

d. 對網頁進行截屏或轉PDF打印

e. 等等

更多詳細信息可以自行去如下三個地址中探索發現:

[cdp4j官網地址]

[Github倉庫]

[Demo列表]



 

 總結

上述框架各有優缺點,其中cdp4j方便且功能齊全,但個人覺得唯一不足就是需要依賴谷歌瀏覽器。

后文打算使用手工的 :

httpclient +jsoup+selenium實現java爬蟲功能

用 httpclient 抓取,jsoup 解析頁面, 90%的頁面都能搞定, 剩下的就用 selenium ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

參考鏈接:

https://www.jianshu.com/p/dd8b33cc9d28
https://www.jianshu.com/p/4372b2041d58


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM