當前位置:成語大全網 - 古籍善本 - 如何用Java寫壹個爬蟲

如何用Java寫壹個爬蟲

下面講解壹下知乎爬蟲的源代碼以及涉及的主要技術點:

(1)程序包組織

(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(著名的Bloom Filter)解決;(3)很多數據,幾億或者幾十億,都可以用Redis解決。知乎爬蟲給出了BloomFilter的實現,但是使用Redis消除重復。

(8)設計模式等高級Java編程實踐。

除了以上爬蟲的主要技術點,知乎爬蟲的實現還涉及到多種設計模式,主要有鏈式模式、單體模式、組合模式等,還使用了Java反射。除了學習爬蟲技術,這也是學習設計模式和Java反射機制的好案例。

4.顯示壹些抓取結果