《大數(shù)據(jù)技術(shù)導(dǎo)論》課件-項(xiàng)目四_第1頁
《大數(shù)據(jù)技術(shù)導(dǎo)論》課件-項(xiàng)目四_第2頁
《大數(shù)據(jù)技術(shù)導(dǎo)論》課件-項(xiàng)目四_第3頁
《大數(shù)據(jù)技術(shù)導(dǎo)論》課件-項(xiàng)目四_第4頁
《大數(shù)據(jù)技術(shù)導(dǎo)論》課件-項(xiàng)目四_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本項(xiàng)目學(xué)習(xí)內(nèi)容包括:1.大數(shù)據(jù)采集和傳統(tǒng)數(shù)據(jù)采集的差別2.大數(shù)據(jù)采集的幾種方式和常用工具3.windows系統(tǒng)下Python的安裝和環(huán)境變量設(shè)置4.如何用Python編寫爬蟲程序從網(wǎng)站爬取房價(jià)數(shù)據(jù),進(jìn)行數(shù)據(jù)采集本項(xiàng)目學(xué)習(xí)主要內(nèi)容本項(xiàng)目思維導(dǎo)圖

數(shù)據(jù)采集,又稱數(shù)據(jù)獲取,是指從真實(shí)世界中獲取原始數(shù)據(jù)的過程。

在社會(huì)初期,數(shù)據(jù)的產(chǎn)生是伴隨著我們的生產(chǎn)經(jīng)營活動(dòng),數(shù)據(jù)量非常少,且沒有專門的數(shù)據(jù)存儲(chǔ)工具,數(shù)據(jù)存儲(chǔ)多用紙質(zhì)記錄。隨著社會(huì)的發(fā)展,數(shù)據(jù)產(chǎn)生量逐漸增多,同時(shí)我們也產(chǎn)生了一定的數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)分析需求,需要用一個(gè)專門的工具去把數(shù)據(jù)存儲(chǔ)起來,在我們需要時(shí)可以拿出來進(jìn)行分析,這就產(chǎn)生了數(shù)據(jù)庫。由于當(dāng)時(shí)數(shù)據(jù)來源單一,一般為業(yè)務(wù)數(shù)據(jù)和行業(yè)數(shù)據(jù),數(shù)量還是比較小,且數(shù)據(jù)結(jié)構(gòu)固定,采集到的數(shù)據(jù)一般用關(guān)系數(shù)據(jù)庫進(jìn)行存儲(chǔ)例如MySQL、Oracle、SQLSever。

大數(shù)據(jù)時(shí)代,隨著各種傳感器和智能設(shè)備的應(yīng)用,數(shù)據(jù)的產(chǎn)生是主動(dòng)的,每分每秒都在產(chǎn)生數(shù)據(jù)。數(shù)據(jù)來源眾多,比如RFID數(shù)據(jù)、傳感器數(shù)據(jù)、用戶行為數(shù)據(jù)、社交網(wǎng)絡(luò)交互數(shù)據(jù)及移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)等。數(shù)據(jù)采集的數(shù)據(jù)量劇增,大量非結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的產(chǎn)生,單一數(shù)據(jù)庫并不能滿足存儲(chǔ)需求,采集到的數(shù)據(jù)需要采用分布式數(shù)據(jù)庫對數(shù)據(jù)進(jìn)行存儲(chǔ)。對于大數(shù)據(jù)的采集,傳統(tǒng)的數(shù)據(jù)采集方式已經(jīng)不能滿足需求。任務(wù)4-1初識(shí)數(shù)據(jù)采集4.1.1傳統(tǒng)數(shù)據(jù)采集和大數(shù)據(jù)采集簡介大數(shù)據(jù)采集和傳統(tǒng)數(shù)據(jù)采集的區(qū)別如下。任務(wù)4-1初識(shí)數(shù)據(jù)采集

因此,我們在傳統(tǒng)數(shù)據(jù)采集方式上進(jìn)行改變構(gòu)建大數(shù)據(jù)采集方式,我們對數(shù)據(jù)源和數(shù)據(jù)類型進(jìn)行重新劃分,爭對不同的數(shù)據(jù)源,采用不同的采集技術(shù)進(jìn)行數(shù)據(jù)采集。大數(shù)據(jù)數(shù)據(jù)源眾多總體可以分為分為4大類,企業(yè)系統(tǒng)、機(jī)器系統(tǒng)、互聯(lián)網(wǎng)系統(tǒng)和社交系統(tǒng)。

在企業(yè)系統(tǒng)中我們主要采集業(yè)務(wù)數(shù)據(jù),業(yè)務(wù)數(shù)據(jù)牽涉到企業(yè)的核心利益一般具有隱私性,需要企業(yè)授權(quán)才能進(jìn)行數(shù)據(jù)采集。在機(jī)器系統(tǒng)中主要采集行業(yè)數(shù)據(jù)和線下行為數(shù)據(jù)。在互聯(lián)網(wǎng)系統(tǒng)中主要采集業(yè)務(wù)數(shù)據(jù)和用戶線上行為數(shù)據(jù)。在社交系統(tǒng)中主要采集用戶內(nèi)容數(shù)據(jù)和用戶的線上行為數(shù)據(jù)。任務(wù)4-1初識(shí)數(shù)據(jù)采集

不同類型的數(shù)據(jù),采集方式是不同的。下面介紹幾種主流大數(shù)據(jù)采集方式。1.業(yè)務(wù)數(shù)據(jù)采集

企業(yè)每時(shí)每刻都會(huì)產(chǎn)生業(yè)務(wù)數(shù)據(jù)。業(yè)務(wù)數(shù)據(jù)采集模式根據(jù)數(shù)據(jù)處理分析的實(shí)時(shí)性要求,可以分為實(shí)時(shí)采集和離線采集。實(shí)時(shí)采集要求實(shí)時(shí)性非常高,一般需要采用Kafka等實(shí)時(shí)數(shù)據(jù)采集工具。采集的數(shù)據(jù)經(jīng)過實(shí)時(shí)提取、清洗、轉(zhuǎn)換處理,有價(jià)值的數(shù)據(jù)被保存在數(shù)據(jù)庫中,無價(jià)值數(shù)據(jù)則丟棄。離線采集實(shí)時(shí)性要求不高,對應(yīng)于傳統(tǒng)數(shù)據(jù)倉庫的數(shù)據(jù)采集模式,數(shù)據(jù)定時(shí)經(jīng)過離線批量提取、清洗、轉(zhuǎn)換操作,進(jìn)入數(shù)據(jù)庫保存。任務(wù)4-1初識(shí)數(shù)據(jù)采集4.1.2大數(shù)據(jù)采集方式2.日志數(shù)據(jù)采集

隨著信息化浪潮的不斷前進(jìn),越來越多的企業(yè)構(gòu)建自己的互聯(lián)網(wǎng)業(yè)務(wù)平臺(tái),這些平臺(tái)每天都會(huì)產(chǎn)生大量的日志數(shù)據(jù)。對于這些日志數(shù)據(jù),我們可以把它們收集起來進(jìn)行數(shù)據(jù)分析處理,挖掘日志數(shù)據(jù)中的潛在價(jià)值。為公司決策和公司后臺(tái)服務(wù)器平臺(tái)性能評估提高可靠的數(shù)據(jù)保證。根據(jù)日志數(shù)據(jù)處理實(shí)時(shí)性要求,日志數(shù)據(jù)采集也分為實(shí)時(shí)采集和離線采集。目前常用的開源日志采集工具有Flume、Scribe等。任務(wù)4-1初識(shí)數(shù)據(jù)采集

3.網(wǎng)絡(luò)數(shù)據(jù)采集網(wǎng)絡(luò)數(shù)據(jù)采集是通過網(wǎng)絡(luò)爬蟲和一些網(wǎng)站平臺(tái)提供的公共API(如Twitter和新浪微博API)等方式從網(wǎng)站上獲取數(shù)據(jù)。通過網(wǎng)絡(luò)爬蟲和公共API可以將網(wǎng)頁中的非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)的提取出來。并將其進(jìn)行提取、清洗、轉(zhuǎn)換處理形成結(jié)構(gòu)化的數(shù)據(jù),存儲(chǔ)在本地?cái)?shù)據(jù)存儲(chǔ)系統(tǒng)中。目前常用的網(wǎng)頁爬蟲框架有ApacheNutch、Crawler4j、Scrapy等。任務(wù)4-1初識(shí)數(shù)據(jù)采集4.感知設(shè)備數(shù)據(jù)采集

感知設(shè)備數(shù)據(jù)采集是指通過傳感器、攝像頭和其他智能終端自動(dòng)采集信號(hào)、圖片或錄像來獲取數(shù)據(jù)。在物聯(lián)網(wǎng)盛行的今天,大量的各種各樣的傳感器存在于我們的日常生活中,每時(shí)每刻都采集并傳輸大量監(jiān)測數(shù)據(jù)。任務(wù)4-1初識(shí)數(shù)據(jù)采集

常見的大數(shù)據(jù)采集工具眾多,這里我們介紹兩種主流數(shù)據(jù)采集工具Flume和Kafka。1.FlumeFlume是Apache旗下的的一款高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸工具。Flume最早由Cloudera提出,用于日志收集。Flume是基于JRuby構(gòu)建,運(yùn)行時(shí)需要依賴Java環(huán)境。Flume的核心是Agent,F(xiàn)lume就是由1個(gè)或多個(gè)Agent組成。通過Agent可以把數(shù)據(jù)從源頭收集到目的地。Agent本身是一個(gè)Java進(jìn)程,包含三個(gè)組件采集源、下沉地和數(shù)據(jù)傳輸通道。任務(wù)4-1初識(shí)數(shù)據(jù)采集4.1.3大數(shù)據(jù)采集工具1)采集源

采集源又稱為Source,用于跟數(shù)據(jù)源對接,以獲取數(shù)據(jù)。2)下沉地

下沉地又稱為Sink,Sink是采集數(shù)據(jù)的傳送目的,用于往下一級Agent傳遞數(shù)據(jù)或者往最終存儲(chǔ)系統(tǒng)傳遞數(shù)據(jù)。3)數(shù)據(jù)傳輸通道數(shù)據(jù)傳輸通道又稱為Channel,是Agent內(nèi)部的數(shù)據(jù)傳輸通道,用于從Source將數(shù)據(jù)傳遞到Sink。Flume內(nèi)部數(shù)據(jù)傳輸?shù)淖罨締卧莈vent。數(shù)據(jù)的傳輸?shù)倪^程中,event將傳輸?shù)臄?shù)據(jù)進(jìn)行封裝,然后帶著數(shù)據(jù)從Source到Channel再到Sink。任務(wù)4-1初識(shí)數(shù)據(jù)采集

Flume的架構(gòu)靈活多變,根據(jù)Agent的數(shù)量和連接方式,F(xiàn)lume擁有不同的架構(gòu)。任務(wù)4-1初識(shí)數(shù)據(jù)采集串聯(lián)并聯(lián)多SinkAgent架構(gòu)任務(wù)4-1初識(shí)數(shù)據(jù)采集2.KafkaKafka是Apache旗下的一個(gè)開源流數(shù)據(jù)處理平臺(tái)。Kafka是最初由Linkedin公司開發(fā),并于2010年貢獻(xiàn)給了Apache基金會(huì)并成為頂級開源項(xiàng)目。Kafka是一種具有高性能、持久化、多副本備份、橫向擴(kuò)展能力的分布式發(fā)布訂閱消息系統(tǒng),Kafka內(nèi)部是一個(gè)分布式消息隊(duì)列,運(yùn)行基于生產(chǎn)者消費(fèi)者模式,生產(chǎn)者往隊(duì)列里寫消息,消費(fèi)者從隊(duì)列里取消息進(jìn)行業(yè)務(wù)邏輯。任務(wù)4-1初識(shí)數(shù)據(jù)采集下面先介紹一下Kafka的相關(guān)概念。1)服務(wù)器節(jié)點(diǎn)服務(wù)器節(jié)點(diǎn)稱為Broker,Kafka集群包含一個(gè)或多個(gè)服務(wù)器節(jié)點(diǎn)。2)消息主題

每條發(fā)布到Kafka集群的消息都有一個(gè)主題,這個(gè)主題被稱為Topic。3)分區(qū)一個(gè)Topic中的數(shù)據(jù)會(huì)被分割為一個(gè)或多個(gè)分區(qū)(Partition)。每個(gè)Topic至少有一個(gè)Partition。4)生產(chǎn)者生產(chǎn)者(Producer)即數(shù)據(jù)的發(fā)布者,負(fù)責(zé)發(fā)布消息到Kafka的Broker中。5)Consumer消費(fèi)者(Consumer)即數(shù)據(jù)的接收者,負(fù)責(zé)從Kafka的Broker中讀取數(shù)據(jù)。6)消費(fèi)者組每個(gè)Consumer屬于一個(gè)特定的消費(fèi)者組(ConsumerGroup)。創(chuàng)建Consumer時(shí)可為每個(gè)Consumer指定組名,若不指定組名則該Consumer屬于默認(rèn)的組。任務(wù)4-1初識(shí)數(shù)據(jù)采集

一個(gè)典型的Kafka集群架構(gòu)如下。集群中包含多個(gè)Producer,多個(gè)Broker和多個(gè)ConsumerGroup,以及一個(gè)Zookeeper集群。Zookeeper負(fù)責(zé)對整個(gè)Kafka集群進(jìn)行配置管理。任務(wù)4-1初識(shí)數(shù)據(jù)采集Kafka的Producer工作原理如下。(1)Producer先從Zookeeper節(jié)點(diǎn)找到Topic下Partition的Leader。(2)Producer將消息發(fā)送給該LeaderPartition。(3)LeaderPartition將消息寫入本地。(4)FollowerPartition從Leader復(fù)制消息,寫入本地log后向Leader發(fā)送ACK。(5)LeaderPartition收到所有的FollowerPartitionACK后,向Producer發(fā)送ACK。任務(wù)4-1初識(shí)數(shù)據(jù)采集Kafka消費(fèi)采用拉取模型,由消費(fèi)者自己記錄消費(fèi)狀態(tài),每個(gè)消費(fèi)者互相獨(dú)立地順序讀取每個(gè)分區(qū)的消息。同一個(gè)消費(fèi)組的消費(fèi)者不能同時(shí)消費(fèi)一個(gè)Partition,不同消費(fèi)組的消費(fèi)者可以同時(shí)消費(fèi)一個(gè)Partition。Kafka的消費(fèi)者工作原理如下。

(1)當(dāng)消費(fèi)者需要訂閱Topic數(shù)據(jù)時(shí),Kafka集群會(huì)向消費(fèi)者提供當(dāng)前Topic的偏移,并保存在Zookeeper中。

(2)消費(fèi)者定期進(jìn)行消費(fèi)請求,如果生產(chǎn)者有消息發(fā)過來,Kafka集群會(huì)馬上發(fā)送給消費(fèi)。

(3)消費(fèi)者消費(fèi)了消息之后,發(fā)送一個(gè)確認(rèn)消息給Kafka集群,Kafka會(huì)更新該消費(fèi)者的偏移,并更新Zookeeper。隨后消費(fèi)者進(jìn)行下一個(gè)信息的消費(fèi)。任務(wù)4-1初識(shí)數(shù)據(jù)采集

從數(shù)據(jù)源采集的原始數(shù)據(jù)一般都是“臟”的,所謂“臟”就是值數(shù)據(jù)不正常,會(huì)影響后續(xù)數(shù)據(jù)存儲(chǔ)和處理過程,甚至數(shù)據(jù)分析的準(zhǔn)確性。比如數(shù)據(jù)缺失、數(shù)據(jù)值異常、數(shù)據(jù)格式不合要求等,這時(shí)候就需要我們對原始數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理操作,保證數(shù)據(jù)采集的數(shù)據(jù)質(zhì)量,以便后續(xù)步驟的順利進(jìn)行。

一般數(shù)據(jù)預(yù)處理主要分為以下幾個(gè)方面數(shù)據(jù)清洗,數(shù)據(jù)轉(zhuǎn)換,數(shù)據(jù)集成,數(shù)據(jù)規(guī)約。1.數(shù)據(jù)清洗

數(shù)據(jù)清洗主要是對缺失數(shù)據(jù)和異常值數(shù)據(jù)處理等。缺失數(shù)據(jù)就是數(shù)據(jù)值為空,比如爬取數(shù)據(jù)時(shí),發(fā)現(xiàn)有多個(gè)記錄中的某一列為空,這就是缺失數(shù)據(jù)。對缺失數(shù)據(jù)最簡單的處理方式是丟棄該條記錄,但是如果缺失值較多時(shí),丟棄數(shù)據(jù)量很大,這樣處理并不好。那我們就必須要填補(bǔ)缺失數(shù)據(jù),這里介紹幾種缺失數(shù)據(jù)的填補(bǔ)方式。任務(wù)4-1初識(shí)數(shù)據(jù)采集4.1.4數(shù)據(jù)預(yù)處理

(1)利用默認(rèn)值填補(bǔ)缺失值,自己定義一個(gè)缺省默認(rèn)值5000,若發(fā)現(xiàn)缺失數(shù)據(jù),則用5000填補(bǔ)。

(2)利用均值填補(bǔ)缺失值,計(jì)算所有用戶的平均月均消費(fèi)額,并利用該值填補(bǔ)。

(3)利用最可能出現(xiàn)的值進(jìn)行填補(bǔ),這個(gè)就需要構(gòu)建機(jī)器學(xué)習(xí)算法模型做預(yù)測,利用預(yù)測的值進(jìn)行填補(bǔ)。

異常值數(shù)據(jù)就是數(shù)據(jù)值為處于非正常狀態(tài),比如1個(gè)人的年齡為負(fù)值,或者某個(gè)數(shù)據(jù)值超出整個(gè)平均值很多。這個(gè)時(shí)候需要我們對異常數(shù)據(jù)進(jìn)行更改糾正,或者丟棄。任務(wù)4-1初識(shí)數(shù)據(jù)采集2.數(shù)據(jù)集成如果數(shù)據(jù)采集的源數(shù)據(jù)來自多個(gè)不同的數(shù)據(jù)源,這時(shí)就需要把采集的源數(shù)據(jù)合并在一起并形成一個(gè)統(tǒng)一數(shù)據(jù)集合,放到一個(gè)數(shù)據(jù)庫進(jìn)行存儲(chǔ),這就是數(shù)據(jù)集成。在進(jìn)行數(shù)據(jù)集成時(shí)可能會(huì)出現(xiàn)如下問題。

(1)異名同義

兩個(gè)數(shù)據(jù)源某個(gè)屬性名字不一樣但所代表的實(shí)體一樣。

(2)數(shù)據(jù)冗余

比如同一屬性在多個(gè)數(shù)據(jù)源都有出現(xiàn),數(shù)據(jù)集成合并時(shí)候該屬性會(huì)多次出現(xiàn),但屬于重復(fù)出現(xiàn),實(shí)際只需要出現(xiàn)一次。還比如某些統(tǒng)計(jì)信息(平均值,最大值,最小值等),可以根據(jù)具體值算出來的,不需要進(jìn)行單獨(dú)存儲(chǔ)。

(3)數(shù)據(jù)表示不一樣

比如各個(gè)數(shù)據(jù)源字符編碼不一樣有的用GBk,有的用utf8,還比如重量的單位,有的用千克,有的用英鎊,這時(shí)候數(shù)據(jù)集成需要統(tǒng)一數(shù)據(jù)表示。任務(wù)4-1初識(shí)數(shù)據(jù)采集3.數(shù)據(jù)轉(zhuǎn)換

數(shù)據(jù)變換就是數(shù)據(jù)轉(zhuǎn)化成適當(dāng)?shù)男问?,來滿足后續(xù)數(shù)據(jù)處理或數(shù)據(jù)分析的需要。比如數(shù)據(jù)的歸一化處理,數(shù)據(jù)的平滑處理和連續(xù)屬性值離散化處理等,數(shù)據(jù)轉(zhuǎn)換多用于機(jī)器學(xué)習(xí)前期的數(shù)據(jù)處理中。4.數(shù)據(jù)規(guī)約

如果我們數(shù)據(jù)采集的數(shù)據(jù)量非常大,數(shù)據(jù)歸約可以用來得到原始數(shù)據(jù)集的精減表示,它比原始數(shù)據(jù)集小得多,但仍然接近于保持原數(shù)據(jù)的完整性,數(shù)據(jù)分析結(jié)果與歸約前結(jié)果幾乎相同。數(shù)據(jù)規(guī)約方式主要有數(shù)據(jù)維數(shù)的消減,數(shù)據(jù)壓縮等等。任務(wù)4-1初識(shí)數(shù)據(jù)采集

網(wǎng)絡(luò)爬蟲是一個(gè)模擬人類請求網(wǎng)站行為的程序或腳本。網(wǎng)絡(luò)爬蟲可以自動(dòng)請求網(wǎng)頁并使用一定的規(guī)則把我們所需要的有價(jià)并值的數(shù)據(jù)抓取下來。網(wǎng)絡(luò)爬蟲的英文即WebSpider。Web是互聯(lián)網(wǎng),Spider是蜘蛛。如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么網(wǎng)絡(luò)爬蟲就是在網(wǎng)上爬來爬去的蜘蛛。網(wǎng)絡(luò)爬蟲的工作方式就是通過網(wǎng)頁的鏈接地址來尋找網(wǎng)頁,從網(wǎng)站某一個(gè)頁面開始抓取網(wǎng)頁數(shù)據(jù),完畢后再網(wǎng)頁中尋找下一個(gè)鏈接地址,然后通過下一個(gè)鏈接地址尋找下一個(gè)網(wǎng)頁繼續(xù)抓取數(shù)據(jù),往復(fù)循環(huán)下去,直到該網(wǎng)站所有的網(wǎng)頁數(shù)據(jù)都抓取完完畢為止。任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集4.2.1初識(shí)爬蟲

那么,為什么會(huì)出現(xiàn)爬蟲?爬蟲給我們帶來哪些好處?

在大數(shù)據(jù)時(shí)代,我們知道數(shù)據(jù)是海量的,數(shù)據(jù)分析處理都是基于全量數(shù)據(jù)而非抽樣數(shù)據(jù)。數(shù)據(jù)分析處理的結(jié)果準(zhǔn)確性有很大一部分因素取決于數(shù)據(jù)量是否足夠大。因此我們需要盡可能多的數(shù)據(jù)來進(jìn)行數(shù)據(jù)分析,這樣準(zhǔn)確度才比較高。但是這么巨量的數(shù)據(jù)從哪里來呢?

我們知道數(shù)據(jù)是具有隱私性的,在大數(shù)據(jù)時(shí)代,數(shù)據(jù)具有很高價(jià)值,是“軟黃金”,數(shù)據(jù)可以交易。而大量的數(shù)據(jù)往往掌握在少部分公司手中,他們不會(huì)輕易暴露公開出來。我們只能用大量金錢去等價(jià)交易買過來,很顯然這是不劃算的,何況個(gè)人很多時(shí)候根本拿不出那么多錢來買。那是不是就沒有辦法了呢?答案是no,我們還有一條路。在互聯(lián)網(wǎng)高度發(fā)達(dá)的今天,網(wǎng)絡(luò)上充斥著大量的數(shù)據(jù)信息,如果我們采用某種方式,從網(wǎng)絡(luò)上把數(shù)據(jù)采集下來,這樣就可以以極低的成本獲取大量數(shù)據(jù)。任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集

如何從網(wǎng)絡(luò)上采集數(shù)據(jù)呢?假設(shè)我們要收集網(wǎng)上某個(gè)城市近三年的全部天氣數(shù)據(jù)。數(shù)據(jù)以月為單位總共分為12*3=36頁,每一頁為一個(gè)月的數(shù)據(jù)(假設(shè)一個(gè)月30天就有30條數(shù)據(jù))。對于這樣的需求,最簡單的數(shù)據(jù)采集方式就是人工去打開某城市的天氣網(wǎng)站,找到需要的天氣數(shù)據(jù),然后一條條復(fù)制下來粘帖到excel表格保存。由于數(shù)據(jù)總共有36頁,我們就要點(diǎn)擊36次翻頁按鈕來切換網(wǎng)頁。這是非常繁瑣。如果其中的原始數(shù)據(jù)有錯(cuò)誤,我們還必須要對數(shù)據(jù)進(jìn)行糾正。這樣數(shù)據(jù)采集速度慢,很容易出錯(cuò),人力成本也高。何況這只是采集一個(gè)城市的數(shù)據(jù),如果采集100個(gè)城市的呢?任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集

我們知道這種數(shù)據(jù)采集工作的重復(fù)性非常高。對于如此高重復(fù)性的工作,我們?yōu)楹尾豢砂阉唤o計(jì)算機(jī)來做呢?這樣即提升了數(shù)據(jù)采集效率,也節(jié)約了成本。我們可以編寫一段程序讓程序來執(zhí)行網(wǎng)上數(shù)據(jù)采集工作,同時(shí)還能對采集的數(shù)據(jù)進(jìn)行初步處理,過濾異常數(shù)據(jù)。這就是網(wǎng)絡(luò)爬蟲。利用網(wǎng)絡(luò)爬蟲技術(shù)我們只需要一臺(tái)計(jì)算機(jī)和一條網(wǎng)線就能快讀的把數(shù)據(jù)從網(wǎng)上采集下來。這樣即提升了數(shù)據(jù)采集效率,也節(jié)約了成本。同時(shí)我們還可以利用該爬蟲去爬取其他城市天氣數(shù)據(jù),一天24小時(shí)不中斷爬取數(shù)據(jù),這是人工數(shù)據(jù)采集所不具備的。

網(wǎng)絡(luò)爬蟲的出現(xiàn)使得企業(yè)和個(gè)人能夠低成本快速的從網(wǎng)上爬取所需要的數(shù)據(jù)。但是對網(wǎng)絡(luò)爬蟲的評價(jià),有人說好有人說不好,好不好關(guān)鍵是看我們怎么用?我們要合法、合理、合規(guī)的使用,不能利用爬蟲技術(shù)對危害社會(huì)。比如就有很多“黃?!崩门老x技術(shù)在各大航空公司網(wǎng)站搶購廉價(jià)機(jī)票,然后以幾倍價(jià)錢出售,并賺取高額利潤。任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集

經(jīng)過4.2.1節(jié)的學(xué)習(xí),我們知道爬蟲其實(shí)就是一段程序或一個(gè)腳本用于爬取網(wǎng)絡(luò)數(shù)據(jù)。常用來編寫爬蟲的語言有Java、Python、Go、PHP、R語言等。至于C/C++語言,運(yùn)行速度是最快的,但是開發(fā)周期太長,學(xué)習(xí)難度也大,一般很少有人用來做爬蟲,多用于底層開發(fā)。本書選用Python語言編寫爬蟲案例,對于未接觸過爬蟲或者初入編程門檻的讀者來說,Python編寫爬蟲上手比較快。下表歸納了幾種爬蟲語言各自的優(yōu)劣。任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集4.2.2爬蟲編程語言及爬蟲分類幾種爬蟲語言的優(yōu)劣語言優(yōu)勢劣勢Python代碼簡潔,容易上手,開發(fā)效率高,多線程機(jī)制,有現(xiàn)成的爬蟲框架對不規(guī)范HTML爬取能力差,需要自己編碼處理Java爬蟲生態(tài)圈很完善,多線程機(jī)制過于笨重,代碼量比較大,數(shù)據(jù)重構(gòu)成本高PHP世界上最好的語言,語法簡單,功能模塊齊全無多線程機(jī)制,并發(fā)不好,異步實(shí)現(xiàn)難Go語法簡單,運(yùn)行速度快,多線程機(jī)制普及度不夠高R語言操作簡單,適合小規(guī)模數(shù)據(jù)爬取功能較弱,不適合大規(guī)模數(shù)據(jù)爬取C/C++運(yùn)行速度最快,性能最高開發(fā)周期長,學(xué)習(xí)難度大,一般用于底層功能實(shí)現(xiàn)

一般來說,爬蟲可以分為以下幾種類別,分別是通用爬蟲、聚焦爬蟲、增量爬蟲和深度爬蟲。1.通用爬蟲

通用網(wǎng)絡(luò)爬蟲的爬取目標(biāo)是全網(wǎng)資源,目標(biāo)數(shù)據(jù)龐大。主要為門戶站點(diǎn)搜索引擎和大型Web服務(wù)提供商采集數(shù)據(jù)。通用網(wǎng)絡(luò)爬蟲的結(jié)構(gòu)大致可以分為頁面爬行模塊、頁面分析模塊、鏈接過濾模塊、頁面數(shù)據(jù)庫、URL隊(duì)列、初始URL集合幾個(gè)部分。通用爬蟲的基本流程如下圖所示。任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集

具體執(zhí)行流程分為下列幾個(gè)步驟。(1)選取互聯(lián)網(wǎng)里一部分網(wǎng)頁,將其鏈接地址作為種子URL,將種子URL放入待抓取URL隊(duì)列中等待爬蟲來讀取。(2)爬蟲從待抓取URL隊(duì)列依次讀取URL。(3)將讀取的URL進(jìn)行DNS解析,把鏈接地址中的域名轉(zhuǎn)換為服務(wù)器對應(yīng)的IP地址。(4)將將經(jīng)過DNS解析的URL發(fā)送給網(wǎng)頁下載器。(5)網(wǎng)頁下載器根據(jù)得到的URL進(jìn)行網(wǎng)頁頁面內(nèi)容的下載。(6)網(wǎng)頁的頁面內(nèi)容下載完畢后,對于下載到本地的網(wǎng)頁,一方面將其存儲(chǔ)到頁面庫中,建立索引方便后期處理。同時(shí)將下載網(wǎng)頁的URL放入已抓取URL隊(duì)列中,以避免重復(fù)抓取。(7)對已經(jīng)下載的網(wǎng)頁,從中抽取出網(wǎng)頁內(nèi)所包含的所有鏈接信息即URL。(8)在已抓取URL隊(duì)列查詢這些鏈接是否被抓取過。(9)如果沒有,則將這個(gè)URL放入待抓取URL隊(duì)列末尾,在之后繼續(xù)對該URL對應(yīng)的網(wǎng)頁進(jìn)行內(nèi)容抓取。(10)重復(fù)2-9步直到待抓取URL隊(duì)列為空,這時(shí),爬蟲系統(tǒng)將我們選取的所有網(wǎng)頁內(nèi)容全部抓取完畢。任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集

通用爬蟲并不是所有網(wǎng)頁都可以爬取的,它需要遵守Robots協(xié)議,網(wǎng)站就是通過Robots協(xié)議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。淘寶和騰訊的Robots協(xié)議如下圖所示。通用爬蟲的優(yōu)點(diǎn)在于爬取數(shù)據(jù)范圍大、數(shù)量多、通用性強(qiáng)。缺點(diǎn)在于只能爬取和文本相關(guān)的內(nèi)容(HTML、WORD、PDF)等,不能爬取多媒體文件(picture、video)及其他二進(jìn)制文件。爬取結(jié)果只具有通用性,沒有爭對特定需求,不能針對不同背景領(lǐng)域的人爬取不同數(shù)據(jù)。任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集2.聚焦爬蟲

聚焦爬蟲是按照預(yù)先定義好的主題有選擇地進(jìn)行網(wǎng)頁爬取,即有的放矢。爬取目標(biāo)為與特定主題相關(guān)的頁面,用于應(yīng)對特定人群的特定需求。聚焦爬蟲在通用爬蟲結(jié)構(gòu)的基礎(chǔ)上,增加了鏈接評價(jià)模塊以及內(nèi)容評價(jià)模塊。這兩個(gè)模塊用來評價(jià)頁面內(nèi)容和鏈接的與主題的關(guān)聯(lián)性,爬取時(shí)候優(yōu)先爬取關(guān)聯(lián)性性高的鏈接和內(nèi)容。與主題的關(guān)聯(lián)性的計(jì)算有不同種類的計(jì)算方式,一般都需要使用一些機(jī)器學(xué)習(xí)算法。3.增量爬蟲

增量爬蟲是指對已下載網(wǎng)頁采取增量式更新和只爬行新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁的爬蟲。和周期性爬行和刷新頁面的網(wǎng)絡(luò)爬蟲相比,增量式爬蟲只會(huì)在需要的時(shí)候爬行新產(chǎn)生或發(fā)生更新的頁面,并不重新下載沒有發(fā)生變化的頁面。這樣可有效減少數(shù)據(jù)下載量,及時(shí)更新已爬行的網(wǎng)頁,減小時(shí)間和空間上的耗費(fèi)。4.深層爬蟲

網(wǎng)頁按存在方式可以分為表層網(wǎng)頁和深層網(wǎng)頁。表層網(wǎng)頁是指不存要提交表單,利用傳統(tǒng)搜索引擎可以索引的頁面,該類型頁面一般為靜態(tài)頁面,訪問通過靜態(tài)鏈接訪問。深層網(wǎng)頁是那些不能通過靜態(tài)鏈接訪問的頁面,用戶只有輸入一些關(guān)鍵詞進(jìn)行表單提交操作才能訪問網(wǎng)頁。比如需要用戶注冊后才能進(jìn)入的BBS論壇等。目前互聯(lián)網(wǎng)上的深層網(wǎng)頁大大多于表層網(wǎng)頁。深層爬蟲一般爭對深層網(wǎng)頁爬取數(shù)據(jù)。

本書中的編程實(shí)現(xiàn)數(shù)據(jù)爬取的爬蟲案例屬于第二種聚焦爬蟲。任務(wù)4-2認(rèn)識(shí)互聯(lián)網(wǎng)數(shù)據(jù)采集環(huán)境搭建步驟包含4.3.1Windows下Python3.x的安裝和環(huán)境變量配置4.3.2requests和BeautifulSoup包安裝4.3.3PyCharm安裝和使用教材中任務(wù)4-3中有詳細(xì)實(shí)現(xiàn),這里不做展示任務(wù)4-3Windows下Python爬蟲開發(fā)環(huán)境搭建

爬蟲爬取網(wǎng)頁數(shù)據(jù)的基本過程類似于我們?yōu)g覽網(wǎng)頁的過程。主要分為兩個(gè)步驟。1.Http-Request

在Http-Request階段,爬蟲程序?qū)π枰廊?shù)據(jù)的網(wǎng)頁服務(wù)器發(fā)送Http請求,并等待網(wǎng)頁服務(wù)器的Http響應(yīng)。2.Http-Response

在Http-Response階段,網(wǎng)頁服務(wù)器接收到請求后,驗(yàn)證請求的合法性,然后將爬蟲程序請求的網(wǎng)頁數(shù)據(jù)封裝好,發(fā)送Http響應(yīng)。爬蟲程序接收網(wǎng)頁服務(wù)器響應(yīng),經(jīng)過程序代碼的解析處理,獲取需要爬取的網(wǎng)頁內(nèi)容。

由于Http請求有2鐘方式get和post,本書編寫爬蟲程序選用序選擇get方式。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序4.4.1爬蟲爬取數(shù)據(jù)過程

網(wǎng)頁一般由三部分組成,分別是HTML(超文本標(biāo)記語言)、CSS(層疊樣式表)和JavaScript(活動(dòng)腳本語言)。由于我們寫爬蟲只是爬取網(wǎng)頁數(shù)據(jù),所以我們最關(guān)注的就是HTML,因?yàn)閿?shù)據(jù)一般都是放在Html標(biāo)簽內(nèi)或者在標(biāo)簽的屬性中。我們打開Google瀏覽器,在Google搜索引擎主頁中單擊右鍵,選擇“查看網(wǎng)頁源代碼”,即可看到整個(gè)網(wǎng)頁的結(jié)構(gòu)。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序4.4.2網(wǎng)頁的基本結(jié)構(gòu)

使用requests庫的get方式抓取網(wǎng)站數(shù)據(jù)的代碼格式為:request.get(url),其中url為網(wǎng)站路徑。下面我們實(shí)驗(yàn)一下。實(shí)驗(yàn)需安裝requests包。

(1)打開Pycharm,選擇PurePython。新建一個(gè)Python工程,工程名為mypachong。設(shè)定Python項(xiàng)目存放位置。然后為Python項(xiàng)目創(chuàng)建虛擬環(huán)境,展開ProjectInterpreter:NewVirtualenvEnvironment節(jié)點(diǎn),然后選擇Virtualenv創(chuàng)建新虛擬環(huán)境的工具。并指定用于新虛擬環(huán)境的位置和Python解釋器。點(diǎn)擊“create”按鈕創(chuàng)建項(xiàng)目。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序4.4.3使用requests包抓取網(wǎng)站數(shù)據(jù)

如果我們在前面在本地Python環(huán)境安裝了requests和BeautifulSoup包,這里可以直接導(dǎo)入本地配置。如果沒有安裝,可以在后續(xù)編碼過程中一個(gè)個(gè)添加,具體見第4步。下面我們介紹如何導(dǎo)入本地Python環(huán)境。在“File”菜單下點(diǎn)擊“Setting”,彈出下圖。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

點(diǎn)擊上圖右邊紅色框中按鈕,再點(diǎn)擊“add”,彈出下圖,在圖中選擇已安裝的環(huán)境(existingeuvironment)選項(xiàng),然后點(diǎn)擊右邊的按鈕添加本地的Python環(huán)境任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

點(diǎn)擊右邊的按鈕彈出下圖所示界面,在圖中選取路徑至本地安裝的python.exe文件,點(diǎn)擊“OK”。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

返回上一級窗口,繼續(xù)點(diǎn)擊“ok”,則進(jìn)入下圖所示界面,圖中會(huì)顯示出已經(jīng)自動(dòng)加載的本地Python安裝的開源庫,點(diǎn)擊“Apply”即可,至此,本地Python環(huán)境已經(jīng)導(dǎo)入完畢,后續(xù)就不用安裝requests和BeautifulSoup包了。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

(2)在下圖中右鍵項(xiàng)目根目錄,在彈出的窗口中,選擇PythonFile,在彈出的窗口中輸入文件名為requestdemo。新建一個(gè)Python源文件。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

(3)在Python源文件輸入以下代碼。對騰訊首頁網(wǎng)頁的源代碼進(jìn)行爬取。#-*-coding:utf-8-*-importrequests#導(dǎo)入requests包url='/'strhtml=requests.get(url)#Get方式獲取網(wǎng)頁數(shù)據(jù)print(strhtml.text)(4)若前面第一步?jīng)]有導(dǎo)入本地Python環(huán)境,則會(huì)出現(xiàn)如下圖所示報(bào)錯(cuò),提示沒有安裝request包,點(diǎn)擊installpackagerequests安裝即可。安裝成功會(huì)彈出提示框。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

(5)在requestdemo.py上點(diǎn)擊右鍵,點(diǎn)擊Runrequestdemo運(yùn)行程序。程序運(yùn)行后,我們看到如下圖所示數(shù)據(jù)爬取結(jié)果,成功爬取了騰訊首頁的源代碼,這就完成了網(wǎng)頁數(shù)據(jù)的爬取。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

上面我們通過requests庫已經(jīng)可以抓到網(wǎng)頁源碼,接下來我們利用BeautifulSoup包從源碼中找到并提取數(shù)據(jù)。BeautifulSoup包目前已經(jīng)被移植到bs4庫中,安裝BeautifulSoup包時(shí)需要先安裝bs4庫。

(1)我們在mypachong工程里面再新建一個(gè)jiexidemo文件,用來解析騰訊首頁的部分信息。假設(shè)我們需要爬取騰訊網(wǎng)的菜單欄數(shù)據(jù),如下圖所示。爬取數(shù)據(jù)需要進(jìn)行數(shù)據(jù)清洗,進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,轉(zhuǎn)換為如下格式。{'text':item.get_text(),'href':item.get('href')}其中,text為單個(gè)菜單項(xiàng)內(nèi)容,比如新聞。href為單個(gè)菜單項(xiàng)的超鏈接地址。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序4.4.4使用BeautifulSoup包解析網(wǎng)站數(shù)據(jù)并進(jìn)行數(shù)據(jù)清洗

(2)定位騰訊首頁菜單欄的數(shù)據(jù)標(biāo)簽,比如新聞這個(gè)菜單在哪個(gè)標(biāo)簽內(nèi)。在鍵盤上按“F12”鍵彈出開發(fā)者界面,按照下圖中操作,則可以顯示新聞所在的網(wǎng)頁標(biāo)簽。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

(3)在下圖頁面的“新聞”上右鍵,在彈出的菜單中選擇“Copy”?“CopySelector”命令,便可以自動(dòng)復(fù)制標(biāo)簽路徑,標(biāo)簽路徑如下。body>div.global>div.layout.qq-nav>div>ul>li:nth-child(1)>a由于我們要獲取所有菜單項(xiàng)的信息,所以我們把上面的路徑改一下,去掉li后面的:nth-child(1),更改后的路徑如下,這個(gè)路徑就是我們后面編程要寫入的菜單項(xiàng)的標(biāo)簽路徑。body>div.global>div.layout.qq-nav>div>ul>li>a任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

(4)jiexidemo文件中輸入代碼如下,會(huì)提示需要安裝BeautifulSoup包,點(diǎn)擊installpackageBeautifulSoup4安裝即可。lxml包用于解析HTML。#-*-coding:utf-8-*-importrequests#導(dǎo)入requests包frombs4importBeautifulSoupurl='/'strhtml=requests.get(url)soup=BeautifulSoup(strhtml.text,'lxml')data=soup.select('body>div.global>div.layout.qq-nav>div>ul>li>a')array_list=[]foritemindata:print(item.get('href'))result={'text':item.get_text(),'href':item.get('href')}array_list.append(result)print(array_list)任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

(5)在jiexidemo.py上點(diǎn)擊右鍵,點(diǎn)擊Runjiexidemo運(yùn)行程序。程序運(yùn)行后,我們看到如下圖所示運(yùn)行結(jié)果,結(jié)果顯示我們把騰訊首頁所有菜單項(xiàng)的內(nèi)容和超鏈接地址都獲取到了。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序

爬蟲功能:用于從鏈家網(wǎng)上爬取當(dāng)前的二手房房價(jià)數(shù)據(jù),并保存在guangzhouershoufang.csv文件里。

爬取數(shù)據(jù)項(xiàng):房子所在的區(qū)域,房子所在的子區(qū)域,房子的地址,房子的單價(jià),房子的總價(jià),房子的描述,房子是否滿5年/滿2年。各個(gè)數(shù)據(jù)項(xiàng)在鏈家網(wǎng)上的顯示位置如圖4-49所示。任務(wù)4-4如何編寫Python爬蟲應(yīng)用程序4.4.5編寫完整的爬蟲程序爬取數(shù)據(jù)并進(jìn)行預(yù)處1.利用4.4.4小節(jié)所示的方式準(zhǔn)確定位需要爬取的數(shù)據(jù)標(biāo)簽(1)房子所在區(qū)域的數(shù)據(jù)標(biāo)簽為:body>div:nth-child(12)>div>div.position>dl:nth-child(2)>dd>div:nth-child(1)>div:nth-child(1)>a.selected'(2)房子所在子區(qū)

溫馨提示

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

評論

0/150

提交評論