大數(shù)據(jù)環(huán)境下,數(shù)據(jù)分析已由業(yè)務(wù)驅(qū)動轉(zhuǎn)變?yōu)閿?shù)據(jù)驅(qū)動,網(wǎng)絡(luò)數(shù)據(jù)資源呈指數(shù)級增長,且散落在不同的數(shù)據(jù)源之中。對大多數(shù)企業(yè)和研究者而言,用“數(shù)據(jù)說話”仿佛成了大數(shù)據(jù)時代的重要武器。網(wǎng)絡(luò)爬蟲作為網(wǎng)絡(luò)數(shù)據(jù)獲取的重要技術(shù),受到了越來越多數(shù)據(jù)需求者的青睞和追捧。
作為網(wǎng)絡(luò)爬蟲的入門采用Java開發(fā)語言,內(nèi)容涵蓋了網(wǎng)絡(luò)爬蟲的原理以及開發(fā)邏輯,Java網(wǎng)絡(luò)爬蟲基礎(chǔ)知識,網(wǎng)絡(luò)抓包介紹,jsoup的介紹與使用,HttpClient的介紹與使用等內(nèi)容。本課程在介紹網(wǎng)絡(luò)爬蟲基本原理的同時,注重具體的代碼實現(xiàn),加深讀者對爬蟲的理解,加強讀者的實戰(zhàn)能力。
網(wǎng)絡(luò)爬蟲技術(shù)最廣泛的應(yīng)用是在搜索引擎中,如百度、Google、Bing等,它完成了搜索過程中的最關(guān)鍵的步驟,即網(wǎng)頁內(nèi)容的抓取。下圖為簡單搜索引擎原理圖。
網(wǎng)絡(luò)爬蟲的作用,我總結(jié)為以下幾點:
輿情分析:企業(yè)或政府利用爬取的數(shù)據(jù),采用數(shù)據(jù)挖掘的相關(guān)方法,發(fā)掘用戶討論的內(nèi)容、實行事件監(jiān)測、輿情引導等。
企業(yè)的用戶分析:企業(yè)利用網(wǎng)絡(luò)爬蟲,采集用戶對其企業(yè)或商品的看法、觀點以及態(tài)度,進而分析用戶的需求、自身產(chǎn)品的優(yōu)劣勢、顧客抱怨等。
科研工作者的必備技術(shù):現(xiàn)有很多研究都以網(wǎng)絡(luò)大數(shù)據(jù)為基礎(chǔ),而采集網(wǎng)絡(luò)大數(shù)據(jù)的必備技術(shù)便是網(wǎng)絡(luò)爬蟲。利用網(wǎng)絡(luò)爬蟲技術(shù)采集的數(shù)據(jù)可用于研究產(chǎn)品個性化推薦、文本挖掘、用戶行為模式挖掘等。
網(wǎng)絡(luò)爬蟲涉及的領(lǐng)域包括:
網(wǎng)絡(luò)爬蟲的基本概念
網(wǎng)絡(luò)爬蟲(WebCrawler),又稱為網(wǎng)絡(luò)蜘蛛(WebSpider)或Web信息采集器,是一種按照一定規(guī)則,自動抓取或下載網(wǎng)絡(luò)信息的計算機程序或自動化腳本,是目前搜索引擎的重要組成部分。
狹義上理解:利用標準的HTTP協(xié)議,根據(jù)網(wǎng)絡(luò)超鏈接(如https://www.baidu.com/)和Web文檔檢索的方法(如深度優(yōu)先)遍歷萬維網(wǎng)信息空間的軟件程序。
功能上理解:確定待爬的URL隊列,獲取每個URL對應(yīng)的網(wǎng)頁內(nèi)容(如HTML/JSON),解析網(wǎng)頁內(nèi)容,并存儲對應(yīng)的數(shù)據(jù)。
網(wǎng)絡(luò)爬蟲的分類
網(wǎng)絡(luò)爬蟲按照系統(tǒng)架構(gòu)和實現(xiàn)技術(shù),大致可以分為以下幾種類型:通用網(wǎng)絡(luò)爬蟲(GeneralPurposeWebCrawler)、聚焦網(wǎng)絡(luò)爬蟲(FocusedWebCrawler)、增量式網(wǎng)絡(luò)爬蟲(IncrementalWebCrawler)、深層網(wǎng)絡(luò)爬蟲(DeepWebCrawler)。實際的網(wǎng)絡(luò)爬蟲系統(tǒng)通常是幾種爬蟲技術(shù)相結(jié)合實現(xiàn)的。
通用網(wǎng)絡(luò)爬蟲:爬行對象從一些種子URL擴充到整個Web,主要為門戶站點搜索引擎和大型Web服務(wù)提供商采集數(shù)據(jù)。
通用網(wǎng)絡(luò)爬蟲的爬取范圍和數(shù)量巨大,對于爬行速度和存儲空間要求較高,對于爬行頁面的順序要求較低,通常采用并行工作方式,有較強的應(yīng)用價值。
聚焦網(wǎng)絡(luò)爬蟲,又稱為主題網(wǎng)絡(luò)爬蟲:是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)的頁面。
和通用爬蟲相比,聚焦爬蟲只需要爬行與主題相關(guān)的頁面,極大地節(jié)省了硬件和網(wǎng)絡(luò)資源,保存的頁面也由于數(shù)量少而更新快,可以很好地滿足一些特定人群對特定領(lǐng)域信息的需求。
通常在設(shè)計聚焦網(wǎng)絡(luò)爬蟲時,需要加入鏈接和內(nèi)容篩選模塊。一個常見的案例是基于關(guān)鍵字獲取符合用戶需求的數(shù)據(jù),如下圖所示:
增量網(wǎng)絡(luò)爬蟲:對已下載網(wǎng)頁采取增量式更新和只爬行新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁的爬蟲,它能夠在一定程度上保證所爬行的頁面是盡可能新的頁面,歷史已經(jīng)采集過的頁面不重復采集。
增量網(wǎng)絡(luò)爬蟲避免了重復采集數(shù)據(jù),可以減小時間和空間上的耗費。通常在設(shè)計網(wǎng)絡(luò)爬蟲時,需要在數(shù)據(jù)庫中,加入時間戳,基于時間戳上的先后,判斷程序是否繼續(xù)執(zhí)行。
DeepWeb爬蟲:指大部分內(nèi)容不能通過靜態(tài)鏈接獲取,只有用戶提交一些表單信息才能獲取的Web頁面。例如,需要模擬登陸的網(wǎng)絡(luò)爬蟲便屬于這類網(wǎng)絡(luò)爬蟲。另外,還有一些需要用戶提交關(guān)鍵詞才能獲取的內(nèi)容,如京東淘寶提交關(guān)鍵字、價格區(qū)間獲取產(chǎn)品的相關(guān)信息。
網(wǎng)絡(luò)爬蟲的流程
網(wǎng)絡(luò)爬蟲基本流程可用下圖描述:
具體流程為:
需求者選取一部分種子URL(或初始URL),將其放入待爬取的隊列中。如在Java網(wǎng)絡(luò)爬蟲中,可以放入linkedList或List中。
判斷URL隊列是否為空,如果為空則結(jié)束程序的執(zhí)行,否則執(zhí)行第三步驟。
從待爬取的URL隊列中取出待爬的一個URL,獲取URL對應(yīng)的網(wǎng)頁內(nèi)容。在此步驟需要使用響應(yīng)的狀態(tài)碼(如200,403等)判斷是否獲取數(shù)據(jù),如響應(yīng)成功則執(zhí)行解析操作;如響應(yīng)不成功,則將其重新放入待爬取隊列(注意這里需要移除無效URL)。
針對已經(jīng)響應(yīng)成功后獲取到的數(shù)據(jù),執(zhí)行頁面解析操作。此步驟根據(jù)用戶需求獲取網(wǎng)頁內(nèi)容里的部分數(shù)據(jù),如汽車論壇帖子的標題、發(fā)表的時間等。
針對3步驟已解析的數(shù)據(jù),將其進行存儲。
網(wǎng)絡(luò)爬蟲的爬行策略
一般的網(wǎng)絡(luò)爬蟲的爬行策略分為兩種:深度優(yōu)先搜索(Depth-FirstSearch)策略、廣度優(yōu)先搜索(Breadth-FirstSearch)策略。
深度優(yōu)先搜索策略:從根節(jié)點的URL開始,根據(jù)優(yōu)先級向下遍歷該根節(jié)點對應(yīng)的子節(jié)點。當訪問到某一子節(jié)點URL時,以該子節(jié)點為入口,繼續(xù)向下層遍歷,直到?jīng)]有新的子節(jié)點可以繼續(xù)訪問為止。接著使用回溯的方法,找到?jīng)]有被訪問到的節(jié)點,以類似的方式進行搜索。下圖給出了理解深度優(yōu)先搜索的一個簡單案例:
廣度優(yōu)先搜索策略:也稱為寬度優(yōu)先,是另外一種非常有效的搜索技術(shù),這種方法按照層進行遍歷頁面。下圖可幫助理解廣度優(yōu)先搜索的遍歷方式:
基于廣度優(yōu)先的爬蟲是最簡單的爬取網(wǎng)站頁面的方法,也是目前使用較為廣泛的方法。
學習建議
網(wǎng)絡(luò)爬蟲是入門某一門編程語言的實戰(zhàn)技術(shù):很多學習編程語言(如Java)的同學,采用的方式只看書或在網(wǎng)絡(luò)上看一些視頻,而這將導致的后果就是面對一個具體項目時,不知道如何上手,尤其對新手而言。或者,一段時間后,就將之前的書本內(nèi)容或視頻內(nèi)容遺忘了。
為此,我建議這些學習者可采用網(wǎng)絡(luò)爬蟲技術(shù)入門某一門編程語言。因為爬蟲技術(shù)是個綜合性很強的技術(shù),涉及到編程語言的很多方面。小編特別選用了Java作為開發(fā)語言,將帶大家深入了解Java網(wǎng)絡(luò)爬蟲背后的核心技術(shù)。學完該課程,相信您也已很好地入門Java編程語言。
對于零基礎(chǔ)入門Java網(wǎng)絡(luò)爬蟲的同學,在學習過程中請注意以下幾點:
理解爬蟲的基本原理。
學習Java網(wǎng)絡(luò)爬蟲涉及的基礎(chǔ)知識:基礎(chǔ)不牢,地動山搖,學習和掌握網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識很重要。
吃透基本的爬蟲代碼,并在此基礎(chǔ)上進行改寫。
不斷實戰(zhàn),發(fā)現(xiàn)爬蟲中涉及的新問題,并解決問題。
以上就是長沙達內(nèi)教育java培訓機構(gòu)小編介紹的“Java網(wǎng)絡(luò)爬蟲基礎(chǔ)入門”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關(guān)注長沙達內(nèi)教育java培訓機構(gòu)官網(wǎng),每天會有精彩內(nèi)容分享與你。