相比於爬蟲框架,知乎小爬蟲,更加適合初學者,尤其是想要了解爬蟲技術細節、實現自己編寫爬蟲需求的初學者。
1. 談爬蟲工程師的價值
大數據時代已到,數據越來越具有價值了,沒有數據寸步難行,有了數據好好利用,可以在諸多領域干很多事,比如很火的互聯網金融。從互聯網上爬來自己想要的數據,是數據的一個重要來源,而且往往是必不可少的來源。所有,目前,爬蟲工程師是一個非常吃香的職位,工資往往都不低,就是要耐得住寂寞了。那爬蟲工程師的價值也就是能穩定的、高效的和實時的帶來數據。這里推薦看兩篇文章:
http://www.hzzx.gov.cn/cshz/content/2014-08/25/content_5417124.htm
http://www.tuicool.com/articles/Fb6fy2f
2. 爬蟲(或互聯網數據采集)怎么入門
爬蟲可以很快的入門,但要做的真正大神,還必須不斷實踐。因為,一旦真正爬數據的時候就會出現各種問題,因為爬蟲本質是一種對抗性的工作,你需要和反爬人員斗智斗勇。不過,這個過程會充滿無窮的樂趣,還會把你錘煉成真正的爬蟲高手。
3. 專門為爬蟲入門而寫的知乎爬蟲
這里,耗費了不少的業余時間,專門為爬蟲入門或初中級寫了一個知乎爬蟲。為什么選擇知乎呢?應為這里例子可以盡量多的將爬蟲涉及的技術點包含進去,同時又不至於那么復雜,學習和提升兼顧。下面說明知乎爬蟲的源碼和涉及主要技術點:
(1)程序package組織

(2)模擬登錄(爬蟲主要技術點1)
要爬去需要登錄的網站數據,模擬登錄是必要可少的一步,而且往往是難點。知乎爬蟲的模擬登錄可以做一個很好的案例。要實現一個網站的模擬登錄,需要兩大步驟是:(1)對登錄的請求過程進行分析,找到登錄的關鍵請求和步驟,分析工具可以有IE自帶(快捷鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登錄的過程。

(3)網頁下載(爬蟲主要技術點2)
模擬登錄后,便可下載目標網頁html了。知乎爬蟲基於HttpClient寫了一個網絡連接線程池,並且封裝了常用的get和post兩種網頁下載的方法。



(4)自動獲取網頁編碼(爬蟲主要技術點3)
自動獲取網頁編碼是確保下載網頁html不出現亂碼的前提。知乎爬蟲中提供方法可以解決絕大部分亂碼下載網頁亂碼問題。

(5)網頁解析和提取(爬蟲主要技術點4)
使用Java寫爬蟲,常見的網頁解析和提取方法有兩種:利用開源Jar包Jsoup和正則。一般來說,Jsoup就可以解決問題,極少出現Jsoup不能解析和提取的情況。Jsoup強大功能,使得解析和提取異常簡單。知乎爬蟲采用的就是Jsoup。

(6)正則匹配與提取(爬蟲主要技術點5)
雖然知乎爬蟲采用Jsoup來進行網頁解析,但是仍然封裝了正則匹配與提取數據的方法,因為正則還可以做其他的事情,如在知乎爬蟲中使用正則來進行url地址的過濾和判斷。

(7)數據去重(爬蟲主要技術點6)
對於爬蟲,根據場景不同,可以有不同的去重方案。(1)少量數據,比如幾萬或者十幾萬條的情況,使用Map或Set便可;(2)中量數據,比如幾百萬或者上千萬,使用BloomFilter(著名的布隆過濾器)可以解決;(3)大量數據,上億或者幾十億,Redis可以解決。知乎爬蟲給出了BloomFilter的實現,但是采用的Redis進行去重。


(8)設計模式等Java高級編程實踐
除了以上爬蟲主要的技術點之外,知乎爬蟲的實現還涉及多種設計模式,主要有鏈模式、單例模式、組合模式等,同時還使用了Java反射。除了學習爬蟲技術,這對學習設計模式和Java反射機制也是一個不錯的案例。
4. 一些抓取結果展示
