大數(shù)據(jù)采集、預(yù)處理與可視化(第3章)_第1頁(yè)
大數(shù)據(jù)采集、預(yù)處理與可視化(第3章)_第2頁(yè)
大數(shù)據(jù)采集、預(yù)處理與可視化(第3章)_第3頁(yè)
大數(shù)據(jù)采集、預(yù)處理與可視化(第3章)_第4頁(yè)
大數(shù)據(jù)采集、預(yù)處理與可視化(第3章)_第5頁(yè)
已閱讀5頁(yè),還剩80頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《大數(shù)據(jù)采集、預(yù)處理與可視化》XXX大學(xué)XXX學(xué)院主講人:XXX電話:XXX郵箱:XXX@XXX辦公地點(diǎn):XXX第3章大數(shù)據(jù)采集學(xué)習(xí)目標(biāo)了解大數(shù)據(jù)采集的相關(guān)概念、數(shù)據(jù)來(lái)源熟悉數(shù)據(jù)采集方法及采集平臺(tái)熟練掌握網(wǎng)絡(luò)爬蟲(chóng)技術(shù)熟練掌握數(shù)據(jù)抽取技術(shù)能夠綜合應(yīng)用數(shù)據(jù)采集方法,獲取多種類型的數(shù)據(jù)

第3章

大數(shù)據(jù)采集3.1大數(shù)據(jù)采集概述3.2網(wǎng)絡(luò)爬蟲(chóng)技術(shù)3.3數(shù)據(jù)抽取技術(shù)3.4案例:網(wǎng)絡(luò)租房信息采集《大數(shù)據(jù)采集、預(yù)處理與可視化》3.1.1大數(shù)據(jù)采集的概念大數(shù)據(jù)采集數(shù)據(jù)采集,又稱為數(shù)據(jù)獲取,是數(shù)據(jù)分析過(guò)程中相當(dāng)重要的一個(gè)環(huán)節(jié),通過(guò)各種技術(shù)手段把外部各種數(shù)據(jù)源產(chǎn)生的數(shù)據(jù)實(shí)時(shí)或非實(shí)時(shí)地采集并加以利用。大數(shù)據(jù)采集是大數(shù)據(jù)產(chǎn)業(yè)的基石,是大數(shù)據(jù)分析和應(yīng)用的前提和必要條件。從數(shù)據(jù)類型來(lái)看,采集的數(shù)據(jù)可分為:結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)。3.1.1大數(shù)據(jù)采集的概念1.結(jié)構(gòu)化數(shù)據(jù)結(jié)構(gòu)化數(shù)據(jù)是指可以使用關(guān)系數(shù)據(jù)庫(kù)表示和存儲(chǔ),可以用二維表來(lái)邏輯表達(dá)實(shí)現(xiàn)的數(shù)據(jù)。數(shù)據(jù)以行為單位,一行數(shù)據(jù)表示一個(gè)實(shí)體的信息,每一行數(shù)據(jù)的屬性是相同的。結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)和排列是很有規(guī)律的,這對(duì)數(shù)據(jù)查詢和修改等操作很有幫助。由于結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)通常固定不變,因此它的擴(kuò)展性不好。典型的結(jié)構(gòu)化數(shù)據(jù)包括信用卡號(hào)碼、日期、電話號(hào)碼等。3.1.1大數(shù)據(jù)采集的概念2.非結(jié)構(gòu)化數(shù)據(jù)非結(jié)構(gòu)化數(shù)據(jù)是數(shù)據(jù)結(jié)構(gòu)不規(guī)則或不完整,沒(méi)有預(yù)定義數(shù)據(jù)模型的數(shù)據(jù)。包括任意格式的傳感器數(shù)據(jù)、辦公文檔、文本、圖片、圖像、音頻和視頻信息等。3.半結(jié)構(gòu)化數(shù)據(jù)半結(jié)構(gòu)化數(shù)據(jù)是介于結(jié)構(gòu)化和非結(jié)構(gòu)化之間的數(shù)據(jù)。它是結(jié)構(gòu)化的數(shù)據(jù),但是結(jié)構(gòu)變化很大,結(jié)構(gòu)與數(shù)據(jù)相交融,也被稱為具有自描述結(jié)構(gòu)的數(shù)據(jù)。在半結(jié)構(gòu)化數(shù)據(jù)中,同一類實(shí)體可以有不同的屬性,即使它們被組合在一起,這些屬性的順序也并不重要。常見(jiàn)的半結(jié)構(gòu)數(shù)據(jù)有XML、HTML和JSON等。3.1.1大數(shù)據(jù)采集的概念大數(shù)據(jù)采集是指從傳感器、智能設(shè)備、企業(yè)在線系統(tǒng)、企業(yè)離線系統(tǒng)、社交網(wǎng)絡(luò)和互聯(lián)網(wǎng)平臺(tái)等獲取數(shù)據(jù)的過(guò)程。大數(shù)據(jù)采集與傳統(tǒng)的數(shù)據(jù)采集不同主要挑戰(zhàn):并發(fā)數(shù)高,可能同時(shí)會(huì)有成千上萬(wàn)的用戶在進(jìn)行訪問(wèn)和操作。采集方法不同,大數(shù)據(jù)采集時(shí)大多使用了大數(shù)據(jù)的處理模式,即MapReduce分布式并行處理模式或是基于內(nèi)存的流式處理模式。3.1.2大數(shù)據(jù)采集的數(shù)據(jù)源傳統(tǒng)商業(yè)數(shù)據(jù)傳統(tǒng)商業(yè)數(shù)據(jù)主要來(lái)源于企業(yè)ERP系統(tǒng)、銷售終端及網(wǎng)上支付系統(tǒng)等業(yè)務(wù)系統(tǒng)的數(shù)據(jù)。傳統(tǒng)商業(yè)主要的大數(shù)據(jù)來(lái)源。日志數(shù)據(jù)日志數(shù)據(jù)一般由數(shù)據(jù)源系統(tǒng)產(chǎn)生,用于記錄數(shù)據(jù)源執(zhí)行的各種操作活動(dòng)。網(wǎng)絡(luò)監(jiān)控中的流量管理金融應(yīng)用中的股票記賬Web服務(wù)器記錄的用戶訪問(wèn)行為...3.1.2大數(shù)據(jù)采集的數(shù)據(jù)源社交網(wǎng)絡(luò)數(shù)據(jù)社交網(wǎng)絡(luò)數(shù)據(jù)是指網(wǎng)絡(luò)空間交互過(guò)程中產(chǎn)生的數(shù)據(jù),具有大量化、多樣化、快速化等特點(diǎn),因此這些數(shù)據(jù)大都復(fù)雜且難以被利用。采集范圍:及微博、論壇、博客、新聞網(wǎng)、電商網(wǎng)站等各種網(wǎng)站資源采集類型:文本、數(shù)據(jù)、URL、圖片、視頻、音頻等多種結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)物聯(lián)網(wǎng)數(shù)據(jù)物聯(lián)網(wǎng)數(shù)據(jù)是指除了人和服務(wù)器之外,在射頻識(shí)別、物品、設(shè)備、傳感器等節(jié)點(diǎn)產(chǎn)生的大量數(shù)據(jù),包括射頻識(shí)別裝置、音頻采集器、視頻采集器、傳感器、全球定位設(shè)備、辦公設(shè)備、家用設(shè)備和生產(chǎn)設(shè)備等產(chǎn)生的數(shù)據(jù)。3.1.3大數(shù)據(jù)采集的方法系統(tǒng)日志采集日志文件:數(shù)據(jù)源系統(tǒng)自動(dòng)生成的記錄文件,并以指定的文件格式記錄事件活動(dòng)。日志文件應(yīng)用于幾乎所有的計(jì)算機(jī)系統(tǒng)中。對(duì)于系統(tǒng)日志文件采集,可以使用海量數(shù)據(jù)采集工具,如Cloudera的Flume、Fluented、Logstash,F(xiàn)acebook的Scribe以及Hadoop的Chukwa等大數(shù)據(jù)采集框架。這些工具均采用分布式架構(gòu),能滿足大數(shù)據(jù)的日志數(shù)據(jù)采集和傳輸需求。3.1.3大數(shù)據(jù)采集的方法網(wǎng)絡(luò)爬蟲(chóng)網(wǎng)絡(luò)爬蟲(chóng)是一種通過(guò)某種策略從網(wǎng)絡(luò)中自動(dòng)獲取有用信息的程序,廣泛應(yīng)用于互聯(lián)網(wǎng)搜索引擎或其他類似網(wǎng)站。它們可自動(dòng)采集能夠訪問(wèn)到的所有頁(yè)面內(nèi)容,以供搜索引擎做進(jìn)一步處理(分揀、整理、索引下載到的頁(yè)面),使得用戶能更快地檢索到需要的內(nèi)容。爬蟲(chóng)的目地在于將目標(biāo)網(wǎng)頁(yè)數(shù)據(jù)下載至本地,以便進(jìn)行后續(xù)的數(shù)據(jù)分析。3.1.3大數(shù)據(jù)采集的方法網(wǎng)絡(luò)爬蟲(chóng)網(wǎng)絡(luò)爬蟲(chóng)通常由種子URL隊(duì)列、待爬取URL隊(duì)列、已爬取URL隊(duì)列、網(wǎng)頁(yè)下載等構(gòu)成。首先,指定入口URL,并將其加入種子URL隊(duì)列中;接著,將種子URL加入待爬取URL隊(duì)列,并從待爬取URL隊(duì)列依次讀取URL,從互聯(lián)網(wǎng)中下載URL所鏈接的網(wǎng)頁(yè);然后,將網(wǎng)頁(yè)的URL保存到已爬取URL隊(duì)列中,將網(wǎng)頁(yè)信息保存到下載網(wǎng)頁(yè)庫(kù)中,從網(wǎng)頁(yè)中抽取出需要爬取的新URL并加入待爬取URL隊(duì)列中。重復(fù)這一過(guò)程,直到待爬取URL隊(duì)列為空。3.1.3大數(shù)據(jù)采集的方法ETLETL即數(shù)據(jù)的抽?。‥xtract)、轉(zhuǎn)換(Transform)、加載(Load),是將企業(yè)內(nèi)部的各種形式和來(lái)源的數(shù)據(jù)經(jīng)過(guò)抽取、清洗、轉(zhuǎn)換之后進(jìn)行格式化的過(guò)程。ETL的目的是整合企業(yè)中分散、零亂、標(biāo)準(zhǔn)不統(tǒng)一的數(shù)據(jù),以便于后續(xù)的分析、處理和運(yùn)用。3.1.3大數(shù)據(jù)采集的方法ETL數(shù)據(jù)抽取階段的主要目的是匯總多種數(shù)據(jù)源并為下一步數(shù)據(jù)轉(zhuǎn)換做準(zhǔn)備。在進(jìn)行數(shù)據(jù)抽取之前需要充分了解各種數(shù)據(jù)源。理解并利用它們的特性,結(jié)合實(shí)際業(yè)務(wù)需求,選擇合適的抽取方式。數(shù)據(jù)轉(zhuǎn)換階段是ETL的核心環(huán)節(jié),也是最復(fù)雜的環(huán)節(jié)。它的主要目的是將抽取到的各種數(shù)據(jù),進(jìn)行數(shù)據(jù)的清洗、格式的轉(zhuǎn)換、缺失值填補(bǔ)、剔除重復(fù)值等操作,最終得到格式統(tǒng)一、高度結(jié)構(gòu)化、數(shù)據(jù)質(zhì)量高、兼容性好的數(shù)據(jù),為后續(xù)的分析決策提供可靠的數(shù)據(jù)支持。數(shù)據(jù)加載階段的主要目的是把數(shù)據(jù)加載至目的地,如數(shù)據(jù)倉(cāng)庫(kù)中。通常是將處理好的數(shù)據(jù)寫(xiě)成特定格式的文件,然后再把文件加載到指定的分區(qū)表中。3.1.4大數(shù)據(jù)采集平臺(tái)FlumeFlume作為Hadoop的組件,是Apache旗下的一款開(kāi)源、高可靠、高擴(kuò)展、易管理、支持客戶擴(kuò)展的數(shù)據(jù)采集系統(tǒng),可以有效地收集、聚合和遷移大量日志數(shù)據(jù)。Flume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù)。同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫(xiě)入到各種數(shù)據(jù)接受方的功能。3.1.4大數(shù)據(jù)采集平臺(tái)FlumeFlume采用了分層架構(gòu),由Agent、Collector和Storage組成。其中,Agent作為Flume最小的獨(dú)立運(yùn)行單位,將數(shù)據(jù)以事件的形式從源頭送至目的地,也是Flume的核心結(jié)構(gòu)。Collector負(fù)責(zé)將多個(gè)Agent的數(shù)據(jù)進(jìn)行匯總,Storage作為存儲(chǔ)系統(tǒng)將收集到的數(shù)據(jù)持久化。每個(gè)Agent相當(dāng)于一個(gè)完整的數(shù)據(jù)收集工具,其內(nèi)部包含以下三個(gè)核心組件:1)Source:采集源,用于對(duì)接數(shù)據(jù)源,以獲取數(shù)據(jù)。2)Channel:Agent內(nèi)部的數(shù)據(jù)傳輸通道,用于從Source傳輸數(shù)據(jù)到Sink。3)Sink:采集數(shù)據(jù)的傳送目的地,用于往下一級(jí)Agent或者最終存儲(chǔ)系統(tǒng)傳遞數(shù)據(jù)。3.1.4大數(shù)據(jù)采集平臺(tái)FluentFluentd是一個(gè)開(kāi)源的通用日志采集和分發(fā)系統(tǒng),可以從多個(gè)數(shù)據(jù)源采集日志,并將日志過(guò)濾和加工后分發(fā)到多種存儲(chǔ)和處理系統(tǒng)中。Fluentd使用JSON文件作為數(shù)據(jù)格式來(lái)統(tǒng)一處理日志數(shù)據(jù)。它采用插件式架構(gòu),具有高可擴(kuò)展性和高可用性,同時(shí)還實(shí)現(xiàn)了高可靠的信息轉(zhuǎn)發(fā)。進(jìn)行數(shù)據(jù)采集時(shí),可以把各種來(lái)源的信息發(fā)送給Fluentd,再由Fluentd根據(jù)配置通過(guò)不同的插件把信息轉(zhuǎn)發(fā)到不同的地方,比如文件、SaaS平臺(tái)、數(shù)據(jù)庫(kù),甚至可以轉(zhuǎn)發(fā)到另一個(gè)Fluentd。3.1.4大數(shù)據(jù)采集平臺(tái)LogstashLogstash是一種具有實(shí)時(shí)流水線功能的開(kāi)源數(shù)據(jù)收集引擎,可以動(dòng)態(tài)地統(tǒng)一收集來(lái)自包括日志、網(wǎng)絡(luò)請(qǐng)求、關(guān)系數(shù)據(jù)庫(kù)、傳感器或物聯(lián)網(wǎng)等不同來(lái)源的數(shù)據(jù),并將數(shù)據(jù)規(guī)范地輸出到具體的目標(biāo),為各種分析和可視化用例清洗所有數(shù)據(jù)。Logstash的數(shù)據(jù)處理過(guò)程如圖所示,主要包括:Inputs、Filters、Outputs三部分,在Inputs和Outputs中還可以使用Codecs對(duì)數(shù)據(jù)格式進(jìn)行處理,以實(shí)現(xiàn)特定的數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)輸出等功能。3.1.4大數(shù)據(jù)采集平臺(tái)LogstashInputs(輸入階段):采集各種類型、大小的來(lái)源數(shù)據(jù);Filters(過(guò)濾器階段):可以將過(guò)濾器和條件語(yǔ)句結(jié)合使用對(duì)事件進(jìn)行處理;Outputs(輸出階段):將事件數(shù)據(jù)發(fā)送到特定的目的地,完成了所有輸出處理,就完成了事件的執(zhí)行;Codecs(解碼器):基于數(shù)據(jù)流的過(guò)濾器,作為輸入和輸出的一部分進(jìn)行操作,可以輕松地將消息的傳輸與序列化過(guò)程分開(kāi)。Elasticsearch是當(dāng)前主流的分布式大數(shù)據(jù)存儲(chǔ)和搜索引擎,可以為用戶提供強(qiáng)大的全文本檢索能力,廣泛應(yīng)用于日志檢索、全站搜索等領(lǐng)域。3.1.4大數(shù)據(jù)采集平臺(tái)ChukwaChukwa是Apache旗下另一個(gè)開(kāi)源的數(shù)據(jù)收集平臺(tái),提供了對(duì)大數(shù)據(jù)量的日志類數(shù)據(jù)進(jìn)行采集、存儲(chǔ)、分析和展示的全套解決方案和框架。Chukwa可以用于監(jiān)控大規(guī)模Hadoop集群的整體運(yùn)行情況,并對(duì)它們的日志進(jìn)行分析。3.1.4大數(shù)據(jù)采集平臺(tái)ChukwaChukwa主要部件包括:Agent、Adapter、Collector等。Agent:為Adapter提供各種服務(wù),包括啟動(dòng)和關(guān)閉Adaptor,將采集的數(shù)據(jù)發(fā)送給Collector,定期記錄Adapter狀態(tài)以便Adapter出現(xiàn)故障后能夠迅速恢復(fù)。Adapter:直接采集數(shù)據(jù)的接口和工具,一個(gè)Agent可以對(duì)多個(gè)Adapter的數(shù)據(jù)采集進(jìn)行管理。Collector:負(fù)責(zé)收集Agent傳送來(lái)的數(shù)據(jù),并定時(shí)寫(xiě)入集群中。Demux:利用MapReduce對(duì)數(shù)據(jù)進(jìn)行分類、排序與去重。

第3章

大數(shù)據(jù)采集3.2網(wǎng)絡(luò)爬蟲(chóng)技術(shù)3.1大數(shù)據(jù)采集概述3.3數(shù)據(jù)抽取技術(shù)3.4案例:網(wǎng)絡(luò)租房信息采集《大數(shù)據(jù)采集、預(yù)處理與可視化》3.2.1網(wǎng)絡(luò)爬蟲(chóng)概述網(wǎng)絡(luò)爬蟲(chóng)一般分為數(shù)據(jù)采集、處理、存儲(chǔ)三個(gè)部分。網(wǎng)絡(luò)爬蟲(chóng)一般從一個(gè)或者多個(gè)初始URL開(kāi)始下載網(wǎng)頁(yè)內(nèi)容,然后通過(guò)搜索或是內(nèi)容匹配等手段獲取網(wǎng)頁(yè)中感興趣的內(nèi)容。同時(shí)不斷從當(dāng)前頁(yè)面提取新的URL,根據(jù)網(wǎng)絡(luò)爬蟲(chóng)策略,按一定的順序放入待爬取URL隊(duì)列中。以上過(guò)程循環(huán)執(zhí)行,直到滿足系統(tǒng)相應(yīng)的停止條件,然后對(duì)這些被抓取的數(shù)據(jù)進(jìn)行清洗、整理并建立索引,存入數(shù)據(jù)庫(kù)或文件中。最后,根據(jù)查詢需要,從數(shù)據(jù)庫(kù)或文件中提取相應(yīng)的數(shù)據(jù),以文本或圖表的方式顯示出來(lái)。3.1.4大數(shù)據(jù)采集平臺(tái)網(wǎng)絡(luò)爬蟲(chóng)的應(yīng)用(1)爬取網(wǎng)站上的圖片,以便集中進(jìn)行瀏覽。(2)爬取相關(guān)金融信息,并進(jìn)行投資分析。(3)將多個(gè)新聞網(wǎng)站中的新聞信息爬取下來(lái),集中進(jìn)行閱讀。(4)利用爬蟲(chóng)將對(duì)應(yīng)網(wǎng)頁(yè)上的信息爬取下來(lái),自動(dòng)過(guò)濾掉網(wǎng)頁(yè)中的廣告,方便對(duì)信息的閱讀與使用。(5)利用爬蟲(chóng),可以設(shè)置相應(yīng)的規(guī)則,自動(dòng)地從互聯(lián)網(wǎng)中采集目標(biāo)用戶公開(kāi)的信息,方便個(gè)性化服務(wù)使用。(6)爬取網(wǎng)站的用戶活躍度、發(fā)言數(shù)、熱門(mén)文章等信息,進(jìn)行相關(guān)分析。3.2.2常用網(wǎng)絡(luò)爬蟲(chóng)方法通用網(wǎng)絡(luò)爬蟲(chóng)通用網(wǎng)絡(luò)爬蟲(chóng)又稱全網(wǎng)爬蟲(chóng)(ScalableWebCrawler),爬取對(duì)象從一些種子URL擴(kuò)充到整個(gè)Web,主要為門(mén)戶站點(diǎn)搜索引擎和大型Web服務(wù)提供商數(shù)據(jù)采集服務(wù)。網(wǎng)絡(luò)爬蟲(chóng)按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),大致可以分為:通用網(wǎng)絡(luò)爬蟲(chóng)、聚焦網(wǎng)絡(luò)爬蟲(chóng)、增量式網(wǎng)絡(luò)爬蟲(chóng)、深層網(wǎng)爬蟲(chóng)。在實(shí)際的應(yīng)用中,網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)通常是由以上幾種爬蟲(chóng)技術(shù)相結(jié)合而實(shí)現(xiàn)的。3.2.2常用網(wǎng)絡(luò)爬蟲(chóng)方法主題網(wǎng)絡(luò)爬蟲(chóng)主題網(wǎng)絡(luò)爬蟲(chóng),又稱聚焦網(wǎng)絡(luò)爬蟲(chóng)(FocusedWebCrawler),是指選擇性地爬取那些與預(yù)先定義好的主題相關(guān)頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)。和通用網(wǎng)絡(luò)爬蟲(chóng)相比,主題網(wǎng)絡(luò)爬蟲(chóng)只需要爬取與主題相關(guān)的頁(yè)面,極大地節(jié)省了硬件和網(wǎng)絡(luò)資源,保存的頁(yè)面數(shù)量少但更新快,可以較好地滿足一些特定人群對(duì)特定領(lǐng)域信息的需求。主題網(wǎng)絡(luò)爬蟲(chóng)在通用網(wǎng)絡(luò)爬蟲(chóng)的基礎(chǔ)上,還需要根據(jù)一定的網(wǎng)頁(yè)分析算法過(guò)濾掉與主題無(wú)關(guān)的URL,保留有用的URL并將其放入等待爬取的URL隊(duì)列。3.2.2常用網(wǎng)絡(luò)爬蟲(chóng)方法增量式網(wǎng)絡(luò)爬蟲(chóng)增量式網(wǎng)絡(luò)爬蟲(chóng)是指對(duì)已下載網(wǎng)頁(yè)采取增量式更新,即只爬取新產(chǎn)生的或者已經(jīng)發(fā)生變化的網(wǎng)頁(yè)的網(wǎng)絡(luò)爬蟲(chóng),并不重新下載沒(méi)有發(fā)生變化的頁(yè)面。增量式網(wǎng)絡(luò)爬蟲(chóng)可以有效減少數(shù)據(jù)下載量,及時(shí)更新已爬取的頁(yè)面,減小時(shí)間和空間上的消耗,但是增加了爬取算法的復(fù)雜度和實(shí)現(xiàn)難度。3.2.2常用網(wǎng)絡(luò)爬蟲(chóng)方法深層網(wǎng)爬蟲(chóng)WWW按其分布狀況可以分為“表層網(wǎng)”(SurfaceWeb)和“深層網(wǎng)”(DeepWeb)。表層網(wǎng)是指?jìng)鹘y(tǒng)網(wǎng)頁(yè)搜索引擎可以索引的Web,是以URL可以到達(dá)的靜態(tài)網(wǎng)頁(yè)為主構(gòu)成的Web。深層網(wǎng)又稱深網(wǎng)或隱藏網(wǎng)(HiddenWeb),是指互聯(lián)網(wǎng)上那些不能被傳統(tǒng)搜索引擎索引的非表層網(wǎng)頁(yè)內(nèi)容。常規(guī)的網(wǎng)絡(luò)爬蟲(chóng)在運(yùn)行中很難發(fā)現(xiàn)隱藏在普通網(wǎng)頁(yè)中的信息和規(guī)律,缺乏一定的主動(dòng)性和智能性。比如,需要輸入用戶名和密碼的頁(yè)面或者包含頁(yè)碼導(dǎo)航的頁(yè)面均無(wú)法爬取。針對(duì)常規(guī)網(wǎng)絡(luò)爬蟲(chóng)的不足,深層網(wǎng)爬蟲(chóng)對(duì)其結(jié)構(gòu)加以改進(jìn),增加了表單分析和頁(yè)面狀態(tài)保持兩種功能。深層網(wǎng)爬蟲(chóng)通過(guò)分析網(wǎng)頁(yè)的結(jié)構(gòu)將其分為普通網(wǎng)頁(yè)和存在更多信息的深層網(wǎng)頁(yè),針對(duì)深層網(wǎng)頁(yè)構(gòu)造合適的表單參數(shù)并提交,從而得到更多的頁(yè)面信息。3.2.2常用網(wǎng)絡(luò)爬蟲(chóng)方法深層網(wǎng)爬蟲(chóng)深層網(wǎng)爬蟲(chóng)體系結(jié)構(gòu)包含爬行控制器、解析器、表單分析器、表單處理器、響應(yīng)分析器、LVS控制器以及兩個(gè)爬蟲(chóng)內(nèi)部數(shù)據(jù)結(jié)構(gòu)(URL列表、LVS表)等。深層網(wǎng)爬蟲(chóng)在頁(yè)面下載完成后并不立即遍歷所有的URL,而是使用一定的算法將URL進(jìn)行分類,對(duì)于不同的類別采取不同的方法計(jì)算查詢參數(shù),并將參數(shù)再次提交到服務(wù)器。如果提交的查詢參數(shù)正確,將會(huì)得到隱藏的頁(yè)面和URL。3.2.2常用網(wǎng)絡(luò)爬蟲(chóng)方法深層網(wǎng)爬蟲(chóng)例如:需要輸入用戶名和密碼的頁(yè)面或者包含頁(yè)碼導(dǎo)航的頁(yè)面3.2.3網(wǎng)頁(yè)數(shù)據(jù)采集的實(shí)現(xiàn)urllib庫(kù)urllib庫(kù)是Python內(nèi)置的HTTP請(qǐng)求庫(kù),可以模擬瀏覽器的行為,向指定的服務(wù)器發(fā)送HTTP請(qǐng)求,并可以保存服務(wù)器返回的數(shù)據(jù)。Urllib庫(kù)包含四大模塊:urllib.request:最基本的HTTP請(qǐng)求模塊,可以用它來(lái)模擬發(fā)送HTTP請(qǐng)求。urllib.error:異常處理模塊,包含一些urllib.request產(chǎn)生的錯(cuò)誤。urllib.parse:URL解析模塊,提供了許多URL處理方法。urllib.robotparser:robots.txt解析模塊。用來(lái)解析網(wǎng)站的robots.txt文本文件。它提供了一個(gè)單獨(dú)的RobotFileParser類,通過(guò)該類提供的can_fetch()方法可以測(cè)試爬蟲(chóng)是否能夠爬取該網(wǎng)站的頁(yè)面。3.2.3網(wǎng)頁(yè)數(shù)據(jù)采集的實(shí)現(xiàn)urllib庫(kù)使用urllib.request.urlopen()這一接口函數(shù)可以很輕松地打開(kāi)一個(gè)網(wǎng)站,讀取并輸出網(wǎng)頁(yè)信息。urllib.request.urlopen()函數(shù)的格式:urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)url:表示待爬取的目標(biāo)URL。data:用于指明發(fā)往服務(wù)器的請(qǐng)求中額外的參數(shù)信息,默認(rèn)為None,此時(shí)以GET方式發(fā)送請(qǐng)求;當(dāng)用戶給出data參數(shù)時(shí),改為POST方式發(fā)送請(qǐng)求。timeout:設(shè)置網(wǎng)站的訪問(wèn)超時(shí)時(shí)間。cafile、capath、cadefault:用于實(shí)現(xiàn)可信任CA證書(shū)的HTTP請(qǐng)求。context:實(shí)現(xiàn)SSL加密傳輸。3.2.3網(wǎng)頁(yè)數(shù)據(jù)采集的實(shí)現(xiàn)urllib庫(kù)【例3-1】使用urllib快速爬取一個(gè)網(wǎng)頁(yè)并打印網(wǎng)頁(yè)內(nèi)容1234importurllib.requestresponse=urllib.request.urlopen('')html=response.read().decode('UTF-8')print(html)#導(dǎo)入request#調(diào)用urllib.request庫(kù)的urlopen()方法,并傳入U(xiǎn)RL#使用read()方法讀取獲取到的網(wǎng)頁(yè)內(nèi)容#輸出網(wǎng)頁(yè)內(nèi)容3.2.3網(wǎng)頁(yè)數(shù)據(jù)采集的實(shí)現(xiàn)Requests庫(kù)Requests庫(kù)是一個(gè)Python的第三方庫(kù),可以通過(guò)調(diào)用它來(lái)幫助人們實(shí)現(xiàn)自動(dòng)爬取HTML網(wǎng)頁(yè)頁(yè)面以及模擬人類訪問(wèn)服務(wù)器自動(dòng)提交網(wǎng)絡(luò)請(qǐng)求。它比urllib更加方便簡(jiǎn)潔,可以節(jié)約開(kāi)發(fā)者大量的工作,完全滿足HTTP測(cè)試需求。方法說(shuō)明requests.requests()構(gòu)造一個(gè)請(qǐng)求,支撐以下各方法的基礎(chǔ)方法requests.get()獲取HTML網(wǎng)頁(yè)的主要方法,對(duì)應(yīng)HTTP的GETrequests.head()獲取HTML網(wǎng)頁(yè)頭的信息方法,對(duì)應(yīng)HTTP的HEADrequests.post()向HTML網(wǎng)頁(yè)提交POST請(qǐng)求方法,對(duì)應(yīng)HTTP的POSTrequest.put()向HTML網(wǎng)頁(yè)提交PUT請(qǐng)求的方法,對(duì)應(yīng)HTTP的PUTrequests.patch()向HTML網(wǎng)頁(yè)提交局部修改的請(qǐng)求,對(duì)應(yīng)于HTTP的PATCHrequests.delete()向HTML頁(yè)面提交刪除請(qǐng)求,對(duì)應(yīng)HTTP的DELETE3.2.3網(wǎng)頁(yè)數(shù)據(jù)采集的實(shí)現(xiàn)Requests庫(kù)【例】以GET請(qǐng)求方式為例,輸出多種請(qǐng)求12345678importrequestsresponse=requests.get('')print('狀態(tài)碼:',response.status_code)print('url:',response.url)print('header:',response.headers)print('cookie:',response.cookies)print('text:',response.text)print('content:',response.content)#導(dǎo)入模塊#對(duì)需要爬取的網(wǎng)頁(yè)發(fā)送請(qǐng)求#輸出狀態(tài)碼#輸出請(qǐng)求#輸出頭部信息#輸出cookie信息#以文本形式輸出網(wǎng)頁(yè)源碼#以字節(jié)流形式輸出網(wǎng)頁(yè)源碼3.2.3網(wǎng)頁(yè)數(shù)據(jù)采集的實(shí)現(xiàn)BeautifulSoup庫(kù)BeautifulSoup是一個(gè)可以從HTML或XML文檔提取數(shù)據(jù)的Python庫(kù),是Python內(nèi)置的網(wǎng)頁(yè)分析工具,用來(lái)快速轉(zhuǎn)換被爬取的網(wǎng)頁(yè)。BeautifulSoup能夠提供一些簡(jiǎn)單的方法以及類Python語(yǔ)法來(lái)查找、定位、修改一棵轉(zhuǎn)換后的DOM(DocumentObjectModel,文檔對(duì)象模型)樹(shù),自動(dòng)將輸入文檔轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為UTF-8編碼。3.2.3網(wǎng)頁(yè)數(shù)據(jù)采集的實(shí)現(xiàn)BeautifulSoup庫(kù)BeautifulSoup支持的解析器包括Python標(biāo)準(zhǔn)庫(kù)、lxml和html5lib。在創(chuàng)建BeautifulSoup對(duì)象時(shí),如果沒(méi)有明確地指定解析器,BeautifulSoup對(duì)象一般會(huì)根據(jù)當(dāng)前系統(tǒng)安裝的庫(kù)自動(dòng)選擇解析器。解析器的選擇順序?yàn)椋簂xml、html5lib、Python標(biāo)準(zhǔn)庫(kù)。lxml解析器較為強(qiáng)大,速度更快,因此推薦使用lxml解析器。解析器使用方法使用要求Python標(biāo)準(zhǔn)庫(kù)BeautifulSoup(markup,’html.parser’)安裝bs4庫(kù)lxmlHTML解析器BeautifulSoup(markup,’lxml’)pipinstalllxmllxmlXML解析器BeautifulSoup(markup,’xml’)pipinstalllxmlhtml5libBeautifulSoup(markup,’html5lib’)pipinstallhtml5lib3.2.3網(wǎng)頁(yè)數(shù)據(jù)采集的實(shí)現(xiàn)BeautifulSoup庫(kù)【例】使用BeautifulSoup爬取網(wǎng)頁(yè)數(shù)據(jù)123456importrequestsfrombs4importBeautifulSoupurl='/get'r=requests.get(url)soup=BeautifulSoup(r.text,'html.parser')print(soup.prettify())

#導(dǎo)入模塊

#創(chuàng)建BeautifulSoup對(duì)象#格式化輸出3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具目前的網(wǎng)絡(luò)爬蟲(chóng)種類繁多,既包括Googlebot、百度蜘蛛這種分布式多線程的商業(yè)爬蟲(chóng)工具,也包括像ApacheNutch、CUNWget這類開(kāi)源爬蟲(chóng)工具,還包括如八爪魚(yú)采集器、火車采集器這類使用簡(jiǎn)單方便的爬蟲(chóng)工具。這些工具可以在很短的時(shí)間內(nèi),輕松地從各種不同的網(wǎng)站或者網(wǎng)頁(yè)中獲取大量的規(guī)范化數(shù)據(jù),幫助用戶實(shí)現(xiàn)數(shù)據(jù)的采集、編輯、規(guī)范化等操作,擺脫對(duì)人工搜索及數(shù)據(jù)收集的依賴,從而降低獲取信息的成本,提高工作效率。3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具GooglebotGooglebot是谷歌的網(wǎng)頁(yè)爬取工具,俗稱Googlebot爬蟲(chóng)。它使用計(jì)算機(jī)集群技術(shù),能夠發(fā)現(xiàn)新網(wǎng)頁(yè)和更新的網(wǎng)頁(yè),并將這些網(wǎng)頁(yè)添加到谷歌索引中。Googlebot利用各種算法來(lái)計(jì)算需要獲取哪些網(wǎng)站、獲取網(wǎng)站的頻率以及從每個(gè)網(wǎng)站上獲取網(wǎng)頁(yè)的數(shù)量。在進(jìn)行網(wǎng)頁(yè)爬取時(shí),Googlebot會(huì)先查看以前爬取過(guò)程中所生成的一系列網(wǎng)頁(yè)地址,包括網(wǎng)站站長(zhǎng)提供的站點(diǎn)地圖數(shù)據(jù)。3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具Googlebot谷歌將Googlebot分布在多臺(tái)計(jì)算機(jī)上,以便提高性能并隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大而擴(kuò)大。此外,為了降低帶寬占用,谷歌會(huì)在計(jì)算機(jī)上運(yùn)行多個(gè)爬取工具:Googlebot:爬取網(wǎng)頁(yè)中的文字內(nèi)容,爬取的內(nèi)容保存于Google網(wǎng)頁(yè)搜索和新聞搜索的數(shù)據(jù)庫(kù)中。Googlebot-mobile:爬取網(wǎng)頁(yè)中的文字內(nèi)容,用于手機(jī)用戶搜索。Googlebot-Image:爬取網(wǎng)頁(yè)的圖片內(nèi)容,存入Google圖片搜索數(shù)據(jù)庫(kù)。Mediapartners-Google:爬取網(wǎng)頁(yè)中的文字內(nèi)容,用于GoogleAdsense(由谷歌公司推出的針對(duì)網(wǎng)站主的一個(gè)互聯(lián)網(wǎng)廣告服務(wù))關(guān)鍵詞分析。只有投放了GoogleAdsense的網(wǎng)頁(yè)才會(huì)被Mediapartners-Google探測(cè)器爬取。Adsbot-Google:爬取網(wǎng)頁(yè)中的文字內(nèi)容,用于為GoogleAdWords提供參考。只有GoogleAdWords的目標(biāo)網(wǎng)頁(yè)才會(huì)被Adsbot-Google探測(cè)器爬取。3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具百度蜘蛛百度蜘蛛(Baiduspider)是百度搜索引擎的一個(gè)自動(dòng)化程序,主要功能是收集整理互聯(lián)網(wǎng)上的網(wǎng)頁(yè)、圖片、視頻等內(nèi)容并反饋給用戶。百度蜘蛛是一款功能強(qiáng)大的搜索結(jié)果提取器,基于BeautifulSoup4和requests。百度蜘蛛使用深度優(yōu)先策略和權(quán)重優(yōu)先策略爬取頁(yè)面。(1)深度優(yōu)先策略的目的是為了爬取高質(zhì)量的網(wǎng)頁(yè)。(2)權(quán)重優(yōu)先策略是指對(duì)反向鏈接較多的頁(yè)面的優(yōu)先爬取。3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具百度蜘蛛百度蜘蛛的爬蟲(chóng)算法定義了爬蟲(chóng)范圍、篩選重復(fù)頁(yè)面等爬蟲(chóng)策略。采用不同的算法,爬蟲(chóng)的目的不同,爬蟲(chóng)的運(yùn)行效率也不同,爬取結(jié)果也會(huì)有所差異。Baiduspider主要用于百度網(wǎng)頁(yè)爬蟲(chóng)和移動(dòng)爬蟲(chóng);Baiduspider-image用于百度圖片爬蟲(chóng);Baiduspider-video用于百度視頻爬蟲(chóng);Baiduspider-news用于百度新聞爬蟲(chóng)Baiduspider-favo用于百度搜藏爬蟲(chóng);Baiduspider-cpro用于百度聯(lián)盟爬蟲(chóng);Baiduspider-ads用于百度商務(wù)爬蟲(chóng)。3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具ApacheNutchApacheNutch是一個(gè)包含Web爬蟲(chóng)和全文搜索功能的開(kāi)源搜索引擎。相對(duì)于商用的搜索引擎,它的工作流程更加公開(kāi)透明,擁有很強(qiáng)的可定制性,并且支持分布式爬蟲(chóng)應(yīng)用。Nutch爬蟲(chóng)的大致過(guò)程如下。根據(jù)WebDatabase生成一個(gè)待爬取網(wǎng)頁(yè)的URL集合,即預(yù)取列表。產(chǎn)生01爬取02根據(jù)預(yù)取列表進(jìn)行網(wǎng)頁(yè)爬取,如果下載線程有很多個(gè),那么就生成很多個(gè)預(yù)取列表,爬蟲(chóng)根據(jù)爬取回來(lái)的網(wǎng)頁(yè)更新WebDB,根據(jù)更新后的WebDB生成新的預(yù)取列表。更新03循環(huán)上述爬取流程,直到預(yù)取列表全部遍歷完畢。3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具火車采集器火車采集器擁有內(nèi)容采集和數(shù)據(jù)導(dǎo)入等功能,并且可以將采集的任何網(wǎng)頁(yè)數(shù)據(jù)發(fā)送到遠(yuǎn)程服務(wù)器?;疖嚥杉鞲鶕?jù)自定義規(guī)則爬取數(shù)據(jù)?;疖嚥杉鞑杉瘮?shù)據(jù)時(shí)分為采集數(shù)據(jù)與發(fā)布數(shù)據(jù)兩個(gè)步驟:(1)采集數(shù)據(jù)。包括確定采集網(wǎng)址和采集內(nèi)容。在這個(gè)過(guò)程中,用戶可以自定義采集規(guī)則來(lái)獲取需要的數(shù)據(jù)。(2)發(fā)布數(shù)據(jù)。就是將數(shù)據(jù)發(fā)布到自己的論壇,也是實(shí)現(xiàn)數(shù)據(jù)占為已有的過(guò)程。3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具火車采集器3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具八爪魚(yú)采集器八爪魚(yú)采集器以完全自主研發(fā)的分布式云計(jì)算平臺(tái)為核心,是一款免費(fèi)使用、操作簡(jiǎn)單、功能強(qiáng)大、高效采集的網(wǎng)頁(yè)數(shù)據(jù)采集工具,可以非常容易地從任何網(wǎng)頁(yè)中準(zhǔn)確采集所需要的數(shù)據(jù),生成自定義的、規(guī)范的數(shù)據(jù)格式。3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具八爪魚(yú)采集器使用示例八爪魚(yú)采集器可以從其官網(wǎng)進(jìn)行下載。下載安裝后,啟動(dòng)該軟件,主界面如下。下載鏈接:/download/windows3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具八爪魚(yú)采集器使用示例利用八爪魚(yú)采集器采集“大眾點(diǎn)評(píng)”商家數(shù)據(jù)。大眾點(diǎn)評(píng)榜單網(wǎng)址:/shoplist/search/15_10_0_score/輸入采集地址3.2.4常用網(wǎng)絡(luò)爬蟲(chóng)工具利用八爪魚(yú)采集器采集“大眾點(diǎn)評(píng)”商家數(shù)據(jù)。輸入采集地址創(chuàng)建采集列表此外,八爪魚(yú)采集器還提供了智能分析功能,能夠?qū)崿F(xiàn)對(duì)采集數(shù)據(jù)的統(tǒng)計(jì)分析、預(yù)測(cè)分析。3.2.5案例:電影評(píng)論爬取實(shí)現(xiàn)效果:主要爬取豆瓣網(wǎng)上《霸王別姬》相關(guān)評(píng)論的用戶名、推薦指數(shù)、投票數(shù)以及用戶評(píng)論等信息,并把這些信息以csv格式保存到本地計(jì)算機(jī)上。3.2.5案例:電影評(píng)論爬取加載需要引用的相關(guān)模塊及包(為便于操作和實(shí)時(shí)交互,可以在Anaconda3中的JupyterNotebook中完成該實(shí)例)12345importrequestsfromlxmlimportetreeimporttimeimportrandomimportcsv#導(dǎo)入requests,用來(lái)爬取網(wǎng)頁(yè)的HTML源代碼#導(dǎo)入etree,用來(lái)解析HTML文檔對(duì)象#導(dǎo)入time模塊#導(dǎo)入隨機(jī)數(shù)庫(kù)#導(dǎo)入csv,用于將數(shù)據(jù)寫(xiě)入到csv文件中3.2.5案例:電影評(píng)論爬取爬取評(píng)論之前需要先對(duì)頁(yè)面進(jìn)行解析,如圖所示,可以使用開(kāi)發(fā)者工具查看網(wǎng)頁(yè)源碼,并找到所需字段的相應(yīng)位置。3.2.5案例:電影評(píng)論爬取定義一個(gè)spider_comment爬蟲(chóng)函數(shù),負(fù)責(zé)爬取頁(yè)面并進(jìn)行解析。由于評(píng)論頁(yè)面是分頁(yè)顯示的,該函數(shù)需要先對(duì)一個(gè)頁(yè)面的評(píng)論進(jìn)行爬取。1234567defspider_comment(url):headers={'USER-AGENT':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/537.36'}response=requests.get(url,headers=headers)html=response.text

html=etree.HTML(html)

#定義頁(yè)面爬取函數(shù)#指定請(qǐng)求頭,進(jìn)行UA偽裝#發(fā)起一個(gè)帶請(qǐng)求頭的HTTP請(qǐng)求#獲取response中的數(shù)據(jù)信息#調(diào)用HTML類進(jìn)行初始化,構(gòu)造XPath解析對(duì)象3.2.5案例:電影評(píng)論爬取8910111213

authods=html.xpath('//div[@class="comment-item"]/div[2]/h3/span[2]/a/text()')stars=html.xpath('//div[@class="comment-item"]/div[2]/h3/span[2]/span[2]/@title')agrees=html.xpath('//div[@class="comment-item"]/div[2]/h3/span[1]/span/text()')contents=html.xpath('//div[@class="comment-item"]/div[2]/p/span/text()')data=zip(authods,stars,agrees,contents)returnhtml,data#獲取用戶名#獲取推薦指數(shù)#獲取投票數(shù)#獲取用戶評(píng)論#將數(shù)據(jù)打包成元組

3.2.5案例:電影評(píng)論爬取定義函數(shù),對(duì)頁(yè)面源代碼進(jìn)行解析,獲取下一頁(yè)鏈接。1234567defparse4link(html,base_url):link=Nonehtml_elem=etree.HTML(html)url=html_elem.xpath('//div[@id="paginator"]/a[@class="next"]/@href')ifurl:link=base_url+url[0]returnlink3.2.5案例:電影評(píng)論爬取再定義一個(gè)batch_spider_comments()函數(shù)來(lái)批量爬取手機(jī)評(píng)論數(shù)據(jù),實(shí)現(xiàn)對(duì)網(wǎng)頁(yè)的翻頁(yè)。12345678910defbatch_spider_comments():print('開(kāi)始爬取')base_url='/subject/1291546/comments'link=base_urlwhilelink:print('正在爬取'+str(link)+'……')html,data=spider_comment(link)link=parse4link(html,base_url)save2file(fd,data)

time.sleep(random.random())#批量抓取評(píng)論數(shù)據(jù)#指定請(qǐng)求頭,進(jìn)行UA偽裝#獲取網(wǎng)址#初始化當(dāng)前網(wǎng)址#對(duì)每個(gè)頁(yè)面進(jìn)行遍歷#頁(yè)面爬取#獲取下一頁(yè)鏈接#數(shù)據(jù)存儲(chǔ)#模擬用戶瀏覽,設(shè)置爬蟲(chóng)間隔,防止因?yàn)榕廊√l繁而導(dǎo)致IP被封3.2.5案例:電影評(píng)論爬取通過(guò)自定義的函數(shù)來(lái)存儲(chǔ)爬取的數(shù)據(jù)。123456comment_file_path='douban_comment.csv'defsave2file(data):fd=open(comment_file_path,'w',encoding='utf-8',newline='')writer=csv.writer(fd)foritemindata:writer.writerow(item)#設(shè)置存儲(chǔ)評(píng)論數(shù)據(jù)的文件路徑#定義存儲(chǔ)數(shù)據(jù)的函數(shù)#以寫(xiě)入的方式打開(kāi)文件,newline的作用是防止添加數(shù)據(jù)時(shí)插入空行

#寫(xiě)入數(shù)據(jù)最后,編寫(xiě)一個(gè)主程序,用于調(diào)用batch_spider_comments()函數(shù),實(shí)現(xiàn)對(duì)電影《霸王別姬》評(píng)論的爬取。

第3章

大數(shù)據(jù)采集3.3數(shù)據(jù)抽取技術(shù)3.2網(wǎng)絡(luò)爬蟲(chóng)技術(shù)3.1大數(shù)據(jù)采集概述3.4案例:網(wǎng)絡(luò)租房信息采集《大數(shù)據(jù)采集、預(yù)處理與可視化》3.3.1數(shù)據(jù)抽取概述數(shù)據(jù)抽取的含義數(shù)據(jù)抽取是指從數(shù)據(jù)源中抽取對(duì)用戶有用或感興趣的數(shù)據(jù)的過(guò)程。一般用于從源文件和源數(shù)據(jù)庫(kù)中獲取相關(guān)數(shù)據(jù),是大數(shù)據(jù)工作開(kāi)展的前提。從關(guān)系數(shù)據(jù)庫(kù)中抽取數(shù)據(jù)一般有全量抽取與增量抽取兩種方式。(1)全量抽取。類似于數(shù)據(jù)遷移或數(shù)據(jù)復(fù)制,它將數(shù)據(jù)源中的表或視圖數(shù)據(jù)原封不動(dòng)地從數(shù)據(jù)庫(kù)中抽取出來(lái),并轉(zhuǎn)換成ETL工具可以識(shí)別的格式。(2)增量抽取。只抽取自上一次抽取以來(lái),數(shù)據(jù)庫(kù)要抽取的表中新增或修改的數(shù)據(jù)。在ETL使用過(guò)程中,相比于全量抽取,增量抽取的應(yīng)用范圍更廣。如何捕獲變化的數(shù)據(jù)是增量抽取的關(guān)鍵。3.3.1數(shù)據(jù)抽取概述數(shù)據(jù)抽取的含義在數(shù)據(jù)抽取中,尤其是增量數(shù)據(jù)抽取中,常用的捕獲變化數(shù)據(jù)的方法包括觸發(fā)器、時(shí)間戳、全表對(duì)比、日志對(duì)比等。(1)觸發(fā)器在抽取表上建立需要的觸發(fā)器,一般需要建立插入、修改和刪除三個(gè)觸發(fā)器。每當(dāng)表中的數(shù)據(jù)發(fā)生變化時(shí),相應(yīng)的觸發(fā)器會(huì)將變化寫(xiě)入一個(gè)臨時(shí)表。抽取線程從臨時(shí)表中抽取數(shù)據(jù)時(shí),臨時(shí)表中抽取過(guò)的數(shù)據(jù)將被標(biāo)記或刪除。(2)時(shí)間戳在源表上增加一個(gè)時(shí)間戳字段,當(dāng)系統(tǒng)修改表數(shù)據(jù)時(shí),同時(shí)修改時(shí)間戳字段的值。當(dāng)進(jìn)行數(shù)據(jù)抽取的時(shí)候,通過(guò)時(shí)間戳來(lái)抽取增量數(shù)據(jù)。3.3.1數(shù)據(jù)抽取概述數(shù)據(jù)抽取流程1、理解數(shù)據(jù)和數(shù)據(jù)的來(lái)源。2、整理、檢查和清洗數(shù)據(jù)。3、

將清洗好的數(shù)據(jù)集成,并建立抽取模型。開(kāi)展數(shù)據(jù)抽取與數(shù)據(jù)轉(zhuǎn)換工作。4、將轉(zhuǎn)換后的結(jié)果進(jìn)行臨時(shí)存放。5、確認(rèn)數(shù)據(jù),并將數(shù)據(jù)最終應(yīng)用于數(shù)據(jù)挖掘中。此外,在實(shí)際開(kāi)發(fā)流程中,常常需要把數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)加載看作一個(gè)整體進(jìn)行流程設(shè)計(jì)。3.3.2Kettle介紹與安裝Kettle軟件簡(jiǎn)介Kettle是一款開(kāi)源的ETL工具,在數(shù)據(jù)倉(cāng)庫(kù)中可以使用Kettle來(lái)抽取網(wǎng)頁(yè)或數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)。Kettle具有開(kāi)源免費(fèi)、可維護(hù)性好、便于調(diào)試、開(kāi)發(fā)簡(jiǎn)單等優(yōu)點(diǎn)。Kettle的功能部構(gòu)成如下(1)SPOON:用戶通過(guò)圖形界面來(lái)設(shè)計(jì)ETL轉(zhuǎn)換過(guò)程。(2)PAN:PAN是一個(gè)后臺(tái)執(zhí)行的程序,以命令行方式執(zhí)行轉(zhuǎn)換,沒(méi)有圖形界面。PAN允許用戶使用時(shí)間調(diào)度器,批量運(yùn)行由SPOON設(shè)計(jì)的ETL轉(zhuǎn)換。(3)CHEF:允許用戶創(chuàng)建Job任務(wù)。Job任務(wù)通過(guò)設(shè)置的轉(zhuǎn)換、任務(wù)和腳本等,進(jìn)行自動(dòng)化更新數(shù)據(jù)倉(cāng)庫(kù)等復(fù)雜操作。(4)KITCHEN:允許用戶批量使用由CHEF設(shè)計(jì)的任務(wù)3.3.2Kettle介紹與安裝Kettle的安裝Kettle是一款Java語(yǔ)言編寫(xiě)的開(kāi)源ETL工具,需要在Java運(yùn)行環(huán)境下才能正常使用。由于Kettle本身不具有數(shù)據(jù)存儲(chǔ)系統(tǒng),所以需配合MySQL才能更好地存儲(chǔ)相關(guān)資源與數(shù)據(jù)。因?yàn)镵ettle工具是綠色軟件,無(wú)需安裝,所以在官網(wǎng)下載完壓縮包后,使用解壓軟件將Kettle工具解壓到計(jì)算機(jī)文件夾中即可。3.3.3文本數(shù)據(jù)抽取文本文件在Windows中一般是指記事本文件,本節(jié)主要討論使用Kettle將文本文件中的數(shù)據(jù)抽取到Excel文檔中。

新建“轉(zhuǎn)換”任務(wù)

創(chuàng)建文本文件輸入3.3.3文本數(shù)據(jù)抽取新建本地txt文件——>添加文本文本文件——>獲取對(duì)應(yīng)字段——>新建節(jié)點(diǎn)連接3.3.3網(wǎng)頁(yè)數(shù)據(jù)抽取使用Kettle將網(wǎng)頁(yè)中的XML數(shù)據(jù)抽取并在Kettle中顯示。拖拽相關(guān)模塊到工作區(qū)域,并建立鏈接。3.3.4網(wǎng)頁(yè)數(shù)據(jù)抽取設(shè)置“生成記錄”選項(xiàng),生成記錄數(shù)據(jù)。設(shè)置“HTTPclient各項(xiàng)配置。3.3.4網(wǎng)頁(yè)數(shù)據(jù)抽取設(shè)置GetdataformXML,用于讀取網(wǎng)頁(yè)數(shù)據(jù)中的節(jié)點(diǎn)內(nèi)容。設(shè)置字段選擇。3.3.4網(wǎng)頁(yè)數(shù)據(jù)抽取保存文件并執(zhí)行程序,最后在“執(zhí)行結(jié)果”欄中的“步驟度量”中查看執(zhí)行狀況。

第3章

大數(shù)據(jù)采集3.1案例:網(wǎng)絡(luò)租房信息采集3.2網(wǎng)絡(luò)爬蟲(chóng)技術(shù)3.3數(shù)據(jù)抽取技術(shù)3.1大數(shù)據(jù)采集概述《大數(shù)據(jù)采集、預(yù)處理與可視化》3.4案例:網(wǎng)絡(luò)租房信息采集本案例通過(guò)Python編寫(xiě)的網(wǎng)絡(luò)爬蟲(chóng)程序獲取租房相關(guān)信息并保存至本地,主要流程分為爬取網(wǎng)頁(yè)、解析數(shù)據(jù)、保存數(shù)據(jù)三個(gè)步驟。(1)通過(guò)獲取目標(biāo)網(wǎng)站URL地址返回HTML文本內(nèi)容;(2)根據(jù)匹配規(guī)則篩選需要的數(shù)據(jù);(3)將數(shù)據(jù)存入TXT文本文件。3.4.1網(wǎng)絡(luò)爬蟲(chóng)采集數(shù)據(jù)打開(kāi)鏈家官網(wǎng),定位到朝陽(yáng)區(qū)租房頁(yè)面,按F12鍵打開(kāi)開(kāi)發(fā)者模式,在“元素(Elements)”選項(xiàng)卡中查看網(wǎng)頁(yè)源代碼即可找到需要的房屋信息數(shù)據(jù)3.4.1網(wǎng)絡(luò)爬蟲(chóng)采集數(shù)據(jù)根據(jù)查找到的房屋信息對(duì)應(yīng)的源代碼進(jìn)行數(shù)據(jù)解析,為從網(wǎng)頁(yè)中爬取信息做準(zhǔn)備。1234567findLink=pile(r'<aclass="twoline"href="(.*?)"target="_blank">',re.S)findStreet=pile(r'</a>-<ahref=".*target="_blank">(.*?)</a>-',re.S)findArea=pile(r'title="(.*?)">',re.S)findSize=pile(r'<i>/</i>(.*?)<i>/</i>',re.S)findPrice=pile(r'<em>(.*?)</em>',re.S)findOrientation=pile(r'<i>/</i>(.*?)<i>/</i>',re.S)findLayout=pile(r'<i>/</i>.*<i>/</i>(.*?)<span',re.S)#通過(guò)正則匹配解析數(shù)據(jù),此處為租房鏈接#街道信息#小區(qū)#面積#價(jià)格#朝向#戶型3.4.1網(wǎng)絡(luò)爬蟲(chóng)采集數(shù)據(jù)從網(wǎng)頁(yè)中獲取有價(jià)值的信息,并保存為數(shù)組。首先,為了爬取更多的租房信息,通過(guò)構(gòu)造請(qǐng)求鏈接,實(shí)現(xiàn)翻頁(yè)功能;然后,使用構(gòu)造的鏈接依次爬取頁(yè)面內(nèi)容,該功能在askURL()中實(shí)現(xiàn),再通過(guò)BeautifulSoup()對(duì)頁(yè)面內(nèi)容進(jìn)行解析;接著,使用上述內(nèi)容中構(gòu)造的re正則表達(dá)式,通過(guò)re.findall()查找指定的字符串;最后,將爬取到的信息存入數(shù)組。12345678defgetData(baseurl):print("爬取中...")datalist=[]foriinrange(1,5):#設(shè)置翻頁(yè)數(shù)

time.sleep(3)url=baseurl+str(i)html=askURL(url)soup=BeautifulSoup(html,"html.parser")#獲取頁(yè)面內(nèi)容#解析當(dāng)前頁(yè)面數(shù)據(jù)3.4.1網(wǎng)絡(luò)爬蟲(chóng)采集數(shù)據(jù)910111213141516171819foriteminsoup.find_all('div',class_="content__list--item--main"):

try:data=[]item=str(item)link=''+re.findall(findLink,item)[0]

data.append(link)street=re.findall(findStreet,item)[0]data.append(street)area=re.findall(findArea,item)[0]data.append(area)size=re.findall(findSize,item)[0]#查找符合要求的字符串,形成列表#通過(guò)re庫(kù),使用正則表達(dá)式查找指定的字符串3.4.1網(wǎng)絡(luò)爬蟲(chóng)采集數(shù)據(jù)192021222324252627282930data.append(size.strip())price=re.findall(findPrice,item)[0]data.append(price)orientation=re.findall(findOrientation,item)[0]

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論