java網絡爬蟲學習記錄(一)概述

在學習爬蟲之前首先得了解爬蟲,爬蟲是什麼,爬蟲就是一種按照一定的規則,自動地抓取萬維網信息的程序
或者腳本。
注:下面的內容轉自教程中老師的筆記

一、網絡爬蟲原理

1.1 等同於瀏覽器訪問網頁的原理
    (1)真人行爲驅動
    (2)瀏覽器自動執行人爲的動作,即將動作自動程序化。
1.2 網絡爬蟲就是將瀏覽器訪問網頁的過程,再次抽像成程序。

二、網絡爬蟲分類

2.1 按鏈接的訪問層次的先後來分
  寬度優先和深度優先。
    寬度優先:即在下載網頁鏈接時,是以一層一層的鏈接來爬取。
    深度優化:以先訪每層中第一個未訪問節點爲先,依次下行迭代循環。
    寬度和廣度混和方式:nutch就是典行的支持這種方式。depth=3,topN=50

2.2 按爬蟲應用來分
    漫爬型爬蟲:百度、谷歌爬蟲,沒有目標,以鏈接爲中心去爬,不限制站點的數據,
數據存儲直接爲單個網頁的文本,不進行格式化方面的抽取,一般只做正文、接要、主題詞等的抽取,
方便索引和搜索。
垂直型爬蟲:內容聚焦,比如說淘寶爬蟲、微博爬蟲、電商爬蟲,而且往往數據直接格式化爲結構化數據。

三、網絡爬蟲的一般作法

3.1 基於Socket通信編寫爬蟲
    最底層的實現形式,也是執行最高效,但開發效率較低的一種方式。
    socket並不是什麼通信協義,只是爲了方便tcp/ip層的上層訪問tip/ip層而做一層封裝。
相當於http方問socket,而後socket轉化爲tcp/ip包。
3.2 基於HttpURLConnection類編寫爬蟲
    Java se的net包中的核心類,主要用於http的相關操作。

3.3 基於apache的HttpClient包編寫爬蟲
    核心也是基於java se的net包擴展而來,專爲java的網絡通信編程而開發的第三方包,也是apahce。

3.4 基於phantomjs之類的無頭(無界面)瀏覽器
    (1)它是瀏覽器核心,並非瀏覽器。換言之,它是沒有界面UI的瀏覽器。無頭,即無界面。
(2)它提供的js api,故它可以方便直接的被各種程序語言調用。

3.5 基於Selenium或是WebDriver之類的有頭(有界面)瀏覽器
    (1)它能直接操作本地的瀏覽器,與真人操作不同的是,它的操作都是程序觸發,省去了人爲操作的步驟。

四、系統設計

4.1 模塊劃分:提交任務的UI接口層、任務調度層、網絡爬取層、數據解析層、數據持久化層

4.2 重難點:亂碼解決、多線程設計、爬取的各參數的靈活配置、反爬代理

五、具體技術點

5.1 http協議相關+java se+httpclient+jsoup(httpparser)+database

5.2 http協議相關,指在爬蟲過程中對最爲主流的http網址的內容的抓包及參數分析,
HttpHeader,指在http請求過程中,協帶的各項header信息,如refer,host,encoding,返回的type等。
Get請求,即爲在瀏覽器中看到的網址後邊的參數部分,
Post請求,即爲數據提交的時候對數據保護和擴大數據提交量的一種數據的提交方式。
更關鍵的是要保持住客戶端與服務器的連接狀態。

5.3 Java Se:java基礎,包括:高級對象使用,IO,多線程,網絡通信,偶爾涉及到GUI編程。

5.4 HttpClient: 是開源的Apache的著名的java net編程第三方包,
可以免去很多Http操作的細節操作,其核心爲HttpUrlConnection的封裝。

5.5 Jsoup:網頁解析,是近來較受歡迎的html解析器,比htmlparser更簡單、易用、高效,
尤其是其選擇器的應用,太過強大,很有吸引用,使人不得選擇jsoup去解析httpclient得到的網頁內容。

5.5 database操作:關係型的mysql,sqlserver。非關係型:mongodb,ssdb,hbase,elasticsearch。

六、總結

做爬蟲系統和做別的系統很像,系統設計很關鍵,即層之間的銜接,要儘量高內聚、低耦合。
好的系統幾乎不可能一蹴而就,往往需要無數次重構與優化,
這也是爲什麼像nutch、hadoop、lucene等如此優秀的開源項目的更新如此頻繁,
偉大的產生,都源於對細節的孜孜不倦的追求,
希望國內的IT界也能出一些如上所述的優秀開源項目。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章