引言
-
獲取:目前都有哪些爬蟲技術?
-
理解:這些爬蟲技術的特色是什么?
-
擴展:快速上手一下cdp4j爬蟲技術。
-
糾錯:解析網頁過程中踩過的坑與填坑之路。
-
應用:實戰爬取網易新聞評論內容。
正文
一、目前的主流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需要開集群,對於想要快速入門爬蟲的我是望而卻步了......
一些資源地址列在這里,說不定以后會學習呢。
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種爬蟲框架,小編做了一個框架優缺點對比圖,如下:
- Jsoup(經典·適合靜態網友)
這個框架堪稱經典,也是我們暑期實訓老師講解的框架。有近乎完整的文檔介紹。
和HtmlUnit同樣,只能get到靜態內容。
不過,這個框架有個有個優點,具有很強大的解析網頁的功能。
- selenium(Google多名大佬參與開發)
感覺很厲害,實際真的很厲害,看官網以及其他人的介紹,說是真正模擬瀏覽器。GitHub1.4w+star,你沒看錯,上萬了。但是我硬是沒配好環境。入門Demo就是沒法運行成功,所以就放棄了。
- cdp4j(方便快捷,但是需要依賴谷歌瀏覽器)
使用前提:
安裝Chrome瀏覽器,即可。
簡單介紹:
HtmlUnit的優點在於,可以方便的爬取靜態網友;缺點在於,只能爬取靜態網頁。
selenium的優點在於,可以爬取渲染后的網頁;缺點在於,需要配環境變量等等。
將二者整合,取長補短,就有了cdp4j。
之所以選用它,是因為真的方便好用,而且官方文檔詳細,Demo程序基本都能跑起來,類名起的見名知意。想當年學軟件工程的時候,一直在納悶,為什么要寫文檔啊,我程序能實現功能不就得了?現如今,看着如此詳實的文檔,留下了激動而又悔恨的淚水......
cdp4j有很多功能:
a. 獲得渲染后的網頁源碼
b. 模擬瀏覽器點擊事件
c. 下載網頁上可以下載的文件
d. 對網頁進行截屏或轉PDF打印
e. 等等
更多詳細信息可以自行去如下三個地址中探索發現:
總結
上述框架各有優缺點,其中cdp4j方便且功能齊全,但個人覺得唯一不足就是需要依賴谷歌瀏覽器。
后文打算使用手工的 :
httpclient +jsoup+selenium實現java爬蟲功能
用 httpclient 抓取,jsoup 解析頁面, 90%的頁面都能搞定, 剩下的就用 selenium ;
參考鏈接:
https://www.jianshu.com/p/dd8b33cc9d28
https://www.jianshu.com/p/4372b2041d58