用JAVA寫一個知乎爬蟲
用java來實現一個知乎爬蟲
操作方法
(01)這裏,耗費了不少的業餘時間,專門爲爬蟲入門或初中級寫了一個知乎爬蟲。爲什麼選擇知乎呢?應爲這裏例子可以儘量多的將爬蟲涉及的技術點包含進去,同時又不至於那麼複雜,學習和提升兼顧。下面說明知乎爬蟲的源碼和涉及主要技術點:(1)程序package組織
(02)(2)模擬登入(爬蟲主要技術點1)要爬去需要登入的網站數據,模擬登入是必要可少的一步,而且往往是難點。知乎爬蟲的模擬登入可以做一個很好的案例。要實現一個網站的模擬登入,需要兩大步驟是:(1)對登入的請求過程進行分析,找到登入的關鍵請求和步驟,分析工具可以有IE自帶(快速鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登入的過程。
(03)(3)網頁下載(爬蟲主要技術點2)模擬登入後,便可下載目標網頁html了。知乎爬蟲基於HttpClient寫了一個網絡連接線程池,並且封裝了常用的get和post兩種網頁下載的方法。
(04)(4)自動獲取網頁編碼(爬蟲主要技術點3)自動獲取網頁編碼是確保下載網頁html不出現亂碼的前提。知乎爬蟲中提供方法可以解決絕大部分亂碼下載網頁亂碼問題。
(05)(5)網頁解析和提取(爬蟲主要技術點4)使用Java寫爬蟲,常見的網頁解析和提取方法有兩種:利用開源Jar包Jsoup和正則。一般來說,Jsoup就可以解決問題,極少出現Jsoup不能解析和提取的情況。Jsoup強大功能,使得解析和提取異常簡單。知乎爬蟲採用的就是Jsoup。
(06)(6)正則匹配與提取(爬蟲主要技術點5)雖然知乎爬蟲採用Jsoup來進行網頁解析,但是仍然封裝了正則匹配與提取數據的方法,因爲正則還可以做其他的事情,如在知乎爬蟲中使用正則來進行url地址的過濾和判斷。
(07)(7)數據去重(爬蟲主要技術點6)對於爬蟲,根據場景不同,可以有不同的去重方案。(1)少量數據,比如幾萬或者十幾萬條的情況,使用Map或Set便可;(2)中量數據,比如幾百萬或者上千萬,使用BloomFilter(著名的布隆過濾器)可以解決;(3)大量數據,上億或者幾十億,Redis可以解決。知乎爬蟲給出了BloomFilter的實現,但是採用的Redis進行去重。
(08)(8)設計模式等Java進階編程實踐除了以上爬蟲主要的技術點之外,知乎爬蟲的實現還涉及多種設計模式,主要有鏈模式、單例模式、組合模式等,同時還使用了Java反射。除了學習爬蟲技術,這對學習設計模式和Java反射機制也是一個不錯的案例。
(09)4. 一些抓取結果展示
特別提示
配置參數準確度
-
如何使用vmware workstation 12安裝虛擬機
虛擬機可以在不安裝實際系統的前提下,透過模擬器工具直接在模擬器上安裝虛擬的系統。可以在虛擬系統上使用如何真實系統一樣。小編今天介紹下如何使用vmwareworkstation12安裝虛擬機,linux虛擬機安裝方法步驟。操作方法(01)首先下載vmwareworkstation虛擬機工具。...
-
微信openid獲取教程
用微信支付平臺發放紅包必須上傳用戶的微信openid,想要匯出微信openid可以按以下步驟來做。操作方法(01)進入微信openid匯出平臺,根據下圖1更新列表;2重新載入粉絲資訊;3匯出數據;(02)獲得的微信平臺openid數據如下(03)把openid拷貝到t型臺檔案裏,格式如下。(04)匯入到微信商戶平...
-
如何刷京東單
京東商城下單方法,在京東商城刷單方法操作方法(01)首先開啟京東商城客戶端,在裏面找到自己想要購買的商品,然後點擊開啟商品,選擇購買件數單擊“加入購物車”(02)現在提示已經成功加入購物車,點擊購物車就可以進行付款了,點擊“購物車”(03)選中你要結算的物品,在前面對話框...
-
拆解羅馬仕sense4
之前拆解的充電寶外殼損壞嚴重,18650電池也不怎麼耐用,更重要的是容量也不夠。今年忍痛將sense4拆開用來做米兔定位電話的備用電池。操作方法(01)上次拆解米兔定位電話,爲以後更換更好的電池做好了準備,僅需要斷開舊電池,連接新電池即可。(02)找到這個10000毫安左右的充...