爬蟲入門實戰,知乎小爬蟲


相比於爬蟲框架,知乎小爬蟲,更加適合初學者,尤其是想要了解爬蟲技術細節、實現自己編寫爬蟲需求的初學者。

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兩種網頁下載的方法。

                                                 連接線程池
                                      Get和post方法封裝
                                               下載網頁

(4)自動獲取網頁編碼(爬蟲主要技術點3

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

                                           正確編碼網頁

(5)網頁解析和提取(爬蟲主要技術點4

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

                                利用Jsoup進行網頁內容解析和提取

(6)正則匹配與提取(爬蟲主要技術點5

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

                                               封裝正則

(7)數據去重(爬蟲主要技術點6

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

                                           bloomfilter去重
                                                redis去重

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

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

4. 一些抓取結果展示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM