Java 爬虫系列丨(一)爬虫介绍
1. 簡介
1.1 背景
隨著互聯網的迅速發展,網絡資源越來越豐富,信息需求者如何從網絡中抽取信息變得至關重要。目前,有效的獲取網絡數據資源的重要方式,便是網絡爬蟲技術。簡單的理解,比如您對百度貼吧的一個帖子內容特別感興趣,而帖子的回復卻有1000多頁,這時采用逐條復制的方法便不可行。而采用網絡爬蟲便可以很輕松地采集到該帖子下的所有內容。
網絡爬蟲技術最廣泛的應用是在搜索引擎中,如百度、Google、Bing 等,它完成了搜索過程中的最關鍵的步驟,即網頁內容的抓取。下圖為簡單搜索引擎原理圖。
1.2 什么是網絡爬蟲
網絡爬蟲(Web Crawler),又稱為網絡蜘蛛(Web Spider)或 Web 信息采集器,是一種按照一定規則,自動抓取或下載網絡信息的計算機程序或自動化腳本。
狹義上理解:
利用標準的 HTTP 協議,根據網絡超鏈接(如https://www.baidu.com/)和 Web 文檔檢索的方法(如深度優先)遍歷萬維網信息空間的軟件程序。
功能上理解:
確定待爬的 URL 隊列,獲取每個 URL 對應的網頁內容(如 HTML/JSON),解析網頁內容,并存儲對應的數據。
本質:
網絡爬蟲實際上是通過模擬瀏覽器的方式獲取服務器數據。
1.3 網路爬蟲的作用
可以實現搜索引擎
我們學會了爬蟲編寫之后,就可以利用爬蟲自動地采集互聯網中的信息,采集回來后進行相應的存儲或處理,在需要檢索某些信息的時候,只需在采集回來的信息中進行檢索,即實現了私人的搜索引擎。
大數據時代,可以讓我們獲取更多的數據源
在進行大數據分析或者進行數據挖掘的時候,需要有數據源進行分析。我們可以從某些提供數據統計的網站獲得,也可以從某些文獻或內部資料中獲得,但是這些獲得數據的方式,有時很難滿足我們對數據的需求,而手動從互聯網中去尋找這些數據,則耗費的精力過大。此時就可以利用爬蟲技術,自動地從互聯網中獲取我們感興趣的數據內容,并將這些數據內容爬取回來,作為我們的數據源,再進行更深層次的數據分析,并獲得更多有價值的信息。如研究產品個性化推薦、文本挖掘、用戶行為模式挖掘等。
可以更好地進行搜索引擎優化(SEO)
對于很多SEO從業者來說,為了更好的完成工作,那么就必須要對搜索引擎的工作原理非常清楚,同時也需要掌握搜索引擎爬蟲的工作原理。而學習爬蟲,可以更深層次地理解搜索引擎爬蟲的工作原理,這樣在進行搜索引擎優化時,才能知己知彼,百戰不殆。
1.4 網絡爬蟲的分類
1.4.1 通用網絡爬蟲
通用網絡爬蟲(General Purpose Web Crawler)是指爬行對象從一些種子 URL 擴充到整個 Web,主要為門戶站點搜索引擎和大型 Web 服務提供商采集數據。通用網絡爬蟲的爬取范圍和數量巨大,對于爬行速度和存儲空間要求較高,對于爬行頁面的順序要求較低,通常采用并行工作方式,有較強的應用價值。
1.4.2 聚焦網絡爬蟲
聚焦網絡爬蟲(Focused Web Crawler)又稱為主題網絡爬蟲:是指選擇性地爬行那些與預先定義好的主題相關的頁面。和通用爬蟲相比,聚焦爬蟲只需要爬行與主題相關的頁面,極大地節省了硬件和網絡資源,保存的頁面也由于數量少而更新快,可以很好地滿足一些特定人群對特定領域信息的需求。通常在設計聚焦網絡爬蟲時,需要加入鏈接和內容篩選模塊。
一個常見的案例是基于關鍵字獲取符合用戶需求的數據,如下圖所示:
1.4.3 增量網絡爬蟲
增量網絡爬蟲(Incremental Web Crawler)對已下載網頁采取增量式更新和只爬行新產生的或者已經發生變化網頁的爬蟲,它能夠在一定程度上保證所爬行的頁面是盡可能新的頁面,歷史已經采集過的頁面不重復采集。增量網絡爬蟲避免了重復采集數據,可以減小時間和空間上的耗費。通常在設計網絡爬蟲時,需要在數據庫中,加入時間戳,基于時間戳上的先后,判斷程序是否繼續執行。
常見的案例有:論壇帖子評論數據的采集(如下圖所示論壇的帖子,它包含400多頁,每次啟動爬蟲時,只需爬取最近幾天用戶所發的帖子);天氣數據的采集;新聞數據的采集;股票數據的采集等。
1.4.4 深層網絡爬蟲
深層網絡爬蟲(Deep Web Crawler)指大部分內容不能通過靜態鏈接獲取,只有用戶提交一些表單信息才能獲取的 Web 頁面。例如,需要模擬登陸的網絡爬蟲便屬于這類網絡爬蟲。
另外,還有一些需要用戶提交關鍵詞才能獲取的內容,如京東淘寶提交關鍵字、價格區間獲取產品的相關信息。
2. 流程
網絡爬蟲基本流程可用下圖描述:
具體流程為:
需求者選取一部分種子 URL(或初始 URL),將其放入待爬取的隊列中。如在 Java 網絡爬蟲中,可以放入 LinkedList 或 List 中。
判斷 URL 隊列是否為空,如果為空則結束程序的執行,否則執行第三步驟。
從待爬取的 URL 隊列中取出待爬的一個 URL,獲取 URL 對應的網頁內容。在此步驟需要使用響應的狀態碼(如200,403等)判斷是否獲取數據,如響應成功則執行解析操作;如響應不成功,則將其重新放入待爬取隊列(注意這里需要移除無效 URL)。
針對已經響應成功后獲取到的數據,執行頁面解析操作。此步驟根據用戶需求獲取網頁內容里的部分數據,如汽車論壇帖子的標題、發表的時間等。
針對3步驟已解析的數據,將其進行存儲。
3. 策略
一般的網絡爬蟲的爬行策略分為兩種:深度優先搜索(Depth-First Search)策略、廣度優先搜索(Breadth-First Search)策略。
3.1 深度優先搜索策略
從根節點的 URL 開始,根據優先級向下遍歷該根節點對應的子節點。當訪問到某一子節點 URL 時,以該子節點為入口,繼續向下層遍歷,直到沒有新的子節點可以繼續訪問為止。接著使用回溯的方法,找到沒有被訪問到的節點,以類似的方式進行搜索。下圖給出了理解深度優先搜索的一個簡單案例:
3.2 廣度優先搜索策略
也稱為寬度優先,是另外一種非常有效的搜索技術,這種方法按照層進行遍歷頁面。下圖可幫助理解廣度優先搜索的遍歷方式:
基于廣度優先的爬蟲是最簡單的爬取網站頁面的方法,也是目前使用較為廣泛的方法。
總結
以上是生活随笔為你收集整理的Java 爬虫系列丨(一)爬虫介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测试管理
- 下一篇: java美元兑换,(Java实现) 美元