用JAVA寫一個知乎爬蟲

來源:酷知科普網 1.06W

用java來實現一個知乎爬蟲

操作方法

(01)這裡,耗費了不少的業餘時間,專門為爬蟲入門或國中級寫了一個知乎爬蟲。為什麼選擇知乎呢?應為這裡例子可以儘量多的將爬蟲涉及的技術點包含進去,同時又不至於那麼複雜,學習和提升兼顧。下面說明知乎爬蟲的原始碼和涉及主要技術點:(1)程式package組織

用JAVA寫一個知乎爬蟲

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

用JAVA寫一個知乎爬蟲 第2張

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

用JAVA寫一個知乎爬蟲 第3張
用JAVA寫一個知乎爬蟲 第4張

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

用JAVA寫一個知乎爬蟲 第5張

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

用JAVA寫一個知乎爬蟲 第6張

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

用JAVA寫一個知乎爬蟲 第7張

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

用JAVA寫一個知乎爬蟲 第8張

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

(09)4. 一些抓取結果展示

用JAVA寫一個知乎爬蟲 第9張

特別提示

配置引數準確度

熱門標籤