數(shù)據(jù)采集與預(yù)處理全套教學(xué)課件_第1頁
數(shù)據(jù)采集與預(yù)處理全套教學(xué)課件_第2頁
數(shù)據(jù)采集與預(yù)處理全套教學(xué)課件_第3頁
數(shù)據(jù)采集與預(yù)處理全套教學(xué)課件_第4頁
數(shù)據(jù)采集與預(yù)處理全套教學(xué)課件_第5頁
已閱讀5頁,還剩378頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一章數(shù)據(jù)采集與預(yù)處理概述“數(shù)據(jù)采集與預(yù)處理第1章數(shù)據(jù)采集與預(yù)處理.pptx第2章數(shù)據(jù)采集與存儲(chǔ).pptx第3章數(shù)據(jù)采集進(jìn)階.pptx第4章數(shù)據(jù)清洗.pptx第5章數(shù)據(jù)規(guī)整與分組聚合.pptx第6章豆瓣電影排行榜數(shù)據(jù)爬取與預(yù)處理.pptx第7章Scrapy與Selenium采集股市每日點(diǎn)評數(shù)據(jù)并可視化.pptx第8章房產(chǎn)數(shù)據(jù)預(yù)處理.pptx全套可編輯PPT課件目錄CONTENTS數(shù)據(jù)采集簡介1.1數(shù)據(jù)預(yù)處理簡介1.2數(shù)據(jù)采集與預(yù)處理常用庫1.3學(xué)習(xí)目標(biāo)了解數(shù)據(jù)采集的工具與爬蟲原理了解數(shù)據(jù)預(yù)處理的目的與意義了解數(shù)據(jù)采集與預(yù)處理的常用三方庫有哪些了解爬蟲的分類與基本流程了解數(shù)據(jù)預(yù)處理的流程與工具數(shù)據(jù)采集簡介111.1數(shù)據(jù)采集簡介數(shù)據(jù)據(jù)采集(Dataacquisition,DAQ)又稱數(shù)據(jù)獲取。所采集數(shù)據(jù)涵蓋了從傳感器或其它待測設(shè)備中所獲取的傳感器數(shù)據(jù)、社交網(wǎng)絡(luò)數(shù)據(jù)、移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)等各種結(jié)構(gòu)化、半結(jié)構(gòu)化及非結(jié)構(gòu)化類型的海量數(shù)據(jù)。

隨著海量網(wǎng)絡(luò)信息的增長和互聯(lián)網(wǎng)技術(shù)的發(fā)展,人們對信息獲取的需求日益增加。對于這些錯(cuò)綜復(fù)雜的數(shù)據(jù),需通過數(shù)據(jù)采集技術(shù)收集所需要的數(shù)據(jù)。數(shù)據(jù)采集作為數(shù)據(jù)分析生命周期的重要一環(huán),是首先需要了解并掌握的技術(shù)。1.1.1數(shù)據(jù)采集的工具1.ApacheFlume2.Fluentd3.Logstash任何完備的數(shù)據(jù)平臺,數(shù)據(jù)采集是必不可少的一步,在以大數(shù)據(jù)、云計(jì)算、人工智能為核心特征的數(shù)字化浪潮席卷全球,產(chǎn)生的數(shù)據(jù)量呈指數(shù)級增長的背景下,大數(shù)據(jù)的“5V”特征使得數(shù)據(jù)采集的挑戰(zhàn)愈發(fā)突出,其分別為Volume(大體量)、Velocity(時(shí)效性)、Variety(多樣性)、Value(高價(jià)值)與Veracity(準(zhǔn)確性),如圖所示。本節(jié)介紹四款主流數(shù)據(jù)采集工具:ApacheFlume、Fluentd、Logstash及Splunk,并重點(diǎn)關(guān)注它們進(jìn)行數(shù)據(jù)采集的相關(guān)特性。4.Splunk1.1.1數(shù)據(jù)采集的工具

Flume是Apache旗下的一款高可用的,高可靠的,分布式的用于海量日志采集、聚合和傳輸?shù)南到y(tǒng)。Flume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí)提供了數(shù)據(jù)的簡單處理,并寫到各種數(shù)據(jù)接收方(可定制)的能力。簡單來說,F(xiàn)lume是一個(gè)實(shí)時(shí)采集日志的數(shù)據(jù)采集引擎。Flume提供了從console(控制臺)、RPC(Thrift-RPC)、text(文件)、tail(UNIXtail)、syslog(syslog日志系統(tǒng)),exec(命令執(zhí)行)等數(shù)據(jù)源上收集數(shù)據(jù)的能力,支持TCP和UDP兩種模式。網(wǎng)絡(luò)日志(WebLogs)作為數(shù)據(jù)源經(jīng)由Flume的管道架構(gòu)被存儲(chǔ)到分布式文件系統(tǒng)(HadoopDistributedFileSystem,HDFS)中,過程如圖所示。Flume被設(shè)計(jì)成一個(gè)分布式的管道架構(gòu),可以看作在數(shù)據(jù)源和目標(biāo)地之間是一個(gè)由Agent(代理,最小日志采集單位)構(gòu)成的網(wǎng)絡(luò),其支持?jǐn)?shù)據(jù)路由。是專用于收集日志的,它從數(shù)據(jù)發(fā)生器接收數(shù)據(jù),并將接收的數(shù)據(jù)以Flume的event格式傳遞給一個(gè)或者多個(gè)通道Channel。Flume提供多種數(shù)據(jù)接收的方式,例如Thrift,twitter1%等。1.Source是一種短暫的存儲(chǔ)容器,它將從Source處接收到的event格式的數(shù)據(jù)緩存起來,直到它們被Sink消費(fèi)掉,它在Source和Sink間起著橋梁的作用,Channel是一個(gè)完整的事務(wù),這一點(diǎn)保證了數(shù)據(jù)在收發(fā)時(shí)候的一致性。并且它可以和任意數(shù)量的Source和Sink鏈接。支持的類型有:JDBCchannel,F(xiàn)ileSystemchannel,Memorychannel等。2.Channel是用于把數(shù)據(jù)發(fā)送到目的地的組件,它將數(shù)據(jù)存儲(chǔ)到集中存儲(chǔ)器中,例如HDFS,它從Channel接收數(shù)據(jù)并將其傳遞給目標(biāo)地。目標(biāo)地可能是另一個(gè)Sink,也可能HDFS,HBase等集中存儲(chǔ)器。3.Sink1.1.1數(shù)據(jù)采集的工具Agent的各個(gè)組件如圖所示,主要由Source、Channel與Sink三個(gè)組件組成。1.1.1數(shù)據(jù)采集的工具Flume可以將應(yīng)用產(chǎn)生的數(shù)據(jù)存儲(chǔ)到任何集中存儲(chǔ)器中,如HDFS,Hbase。提供上下文路由特征。Flume的管道基于事務(wù),保證了數(shù)據(jù)在傳送和接收時(shí)的一致性。Flume的優(yōu)點(diǎn)當(dāng)收集數(shù)據(jù)的速度超過寫入數(shù)據(jù),即收集信息達(dá)到峰值,這種情況下,F(xiàn)lume會(huì)在數(shù)據(jù)生產(chǎn)者和數(shù)據(jù)收容器間做出調(diào)整,保證其能夠在兩者之間提供平穩(wěn)的數(shù)據(jù)傳輸。Flume是可靠的,容錯(cuò)性高的,可升級的,易管理的,并且可定制的。除了日志信息,F(xiàn)lume也可以用來接入收集規(guī)模宏大的社交網(wǎng)絡(luò)或電商網(wǎng)站節(jié)點(diǎn)事件數(shù)據(jù),如Facebook、亞馬遜。1.1.1數(shù)據(jù)采集的工具Fluentd是一個(gè)完全免費(fèi)且開源的日志收集器,用于統(tǒng)一數(shù)據(jù)收集和使用,以便更好地使用和理解數(shù)據(jù)。Fluentd是云端原生計(jì)算基金會(huì)(CloudNativeComputingFoundation,CNCF)的成員項(xiàng)目之一,所有組件均可在Apache2許可下獲得,它同時(shí)也提供高可靠性和高擴(kuò)展性。Fluentd的部署與Flume類似,其構(gòu)成如圖所示,Input/Buffer/Output非常類似于Flume的Source/Channel/Sink。①Input:輸入。負(fù)責(zé)接收數(shù)據(jù)或者主動(dòng)抓取數(shù)據(jù),支持syslog、http、filetail等。②Engine:引擎。負(fù)責(zé)處理輸入數(shù)據(jù),生成輸出數(shù)據(jù)。③Buffer:緩沖區(qū)。負(fù)責(zé)數(shù)據(jù)獲取的性能和可靠性,也有文件或內(nèi)存等不同類型的Buffer可以配置。④Output:輸出。負(fù)責(zé)輸出數(shù)據(jù)到目的地,例如文件、AWSS3或者其它的Fluentd。1.1.1數(shù)據(jù)采集的工具①JSON統(tǒng)一記錄。如圖所示,F(xiàn)luentd盡可能將數(shù)據(jù)構(gòu)造為JSON:這允許Fluentd統(tǒng)一處理日志數(shù)據(jù)的所有方面:跨多個(gè)源和目標(biāo)(統(tǒng)一日志記錄層)收集,過濾,緩沖和輸出日志。使用JSON進(jìn)行下游數(shù)據(jù)處理要容易得多,因?yàn)樗哂凶銐虻慕Y(jié)構(gòu)可訪問,同時(shí)保留了靈活的模式。這使得Fluentd善于解決數(shù)據(jù)流流向混亂的問題,通過在兩者之間提供統(tǒng)一的日志記錄層,從后端系統(tǒng)中分離數(shù)據(jù)源。②可插拔架構(gòu)。Fluentd具有靈活的插件系統(tǒng),允許社區(qū)擴(kuò)展其功能。同時(shí)它的可插拔架構(gòu),支持各種不同種類和格式的數(shù)據(jù)源和數(shù)據(jù)輸出。通過利用插件可以更好地利用日志。Fluentd的優(yōu)點(diǎn)③少量系統(tǒng)資源。Fluentd用C語言和Ruby結(jié)合編寫,并且只需要很少的系統(tǒng)資源。原始實(shí)例在30-40MB的內(nèi)存上運(yùn)行,并且可以處理13,000個(gè)事件/秒/核心。④內(nèi)置可靠性。Fluentd支持基于內(nèi)存和文件的緩沖,以防止節(jié)點(diǎn)間數(shù)據(jù)丟失。Fluentd還支持強(qiáng)大的故障轉(zhuǎn)移功能,可以設(shè)置為高可用性。1.1.1數(shù)據(jù)采集的工具

Logstash誕生于2009年8月2日,其作者是世界著名的運(yùn)維工程師喬丹西塞(JordanSissel),在2013年被Elasticsearch公司收購。Logstash是一個(gè)免費(fèi)且開源的數(shù)據(jù)收集引擎,具備實(shí)時(shí)管道處理能力。能夠從多個(gè)來源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到所選擇的目的地。簡單來說,Logstash就是一根具備實(shí)時(shí)數(shù)據(jù)傳輸能力的管道,負(fù)責(zé)將數(shù)據(jù)信息從管道的輸入端傳輸?shù)焦艿赖妮敵龆?;與此同時(shí)這根管道還可以讓你根據(jù)自己的需求在中間加上濾網(wǎng),Logstash提供了很多功能強(qiáng)大的濾網(wǎng)以滿足你的各種應(yīng)用場景。

Logstash通常用做日志采集設(shè)備,如在著名的數(shù)據(jù)棧ELK(Elasticsearch+Logstash+Kibana)中作為日志收集器使用。如圖所示,Elasticsearch是搜索和分析引擎;Logstash作為服務(wù)器端數(shù)據(jù)處理管道,它同時(shí)從多個(gè)源中提取數(shù)據(jù)并轉(zhuǎn)換,然后將其發(fā)送到類似Elasticsearch的“存儲(chǔ)”中;Beats是一些輕量級的數(shù)據(jù)攝入器的組合,用于將數(shù)據(jù)發(fā)送到Elasticsearch或發(fā)向Logstash做進(jìn)一步的處理,并最后導(dǎo)入到Elasticsearch;Kibana允許用戶在Elasticsearch中使用圖表將數(shù)據(jù)可視化。Logstash作為數(shù)據(jù)源與數(shù)據(jù)存儲(chǔ)分析工具之間的橋梁,結(jié)合ElasticSearch以及Kibana,能夠極大方便數(shù)據(jù)的處理與分析。1.1.1數(shù)據(jù)采集的工具

如圖所示,Logstash的數(shù)據(jù)處理過程主要包括:Inputs,F(xiàn)ilters,Outputs三部分(其中Inputs和Outputs是必選項(xiàng),F(xiàn)ilters是可選項(xiàng)),另外在Inputs和Outputs中可以使用Codecs(編碼解碼器)對數(shù)據(jù)格式進(jìn)行處理。這四個(gè)部分均以插件形式存在,用戶通過定義pipeline配置文件,設(shè)置需要使用的input,filter,output,codec插件,以實(shí)現(xiàn)特定的數(shù)據(jù)采集,數(shù)據(jù)處理,數(shù)據(jù)輸出等功能。此外,數(shù)據(jù)往往以各種各樣的形式,或分散或集中地存在于很多系統(tǒng)中。如圖所示,Logstash支持各種輸入選擇,可以同時(shí)從眾多常用來源捕捉事件。能夠以連續(xù)的流式傳輸方式,輕松地從日志、指標(biāo)、Web應(yīng)用、數(shù)據(jù)存儲(chǔ)以及各AWS服務(wù)中采集數(shù)據(jù)。1.1.1數(shù)據(jù)采集的工具

如圖所示,Logstash的數(shù)據(jù)處理過程主要包括:Inputs,F(xiàn)ilters,Outputs三部分(其中Inputs和Outputs是必選項(xiàng),F(xiàn)ilters是可選項(xiàng)),另外在Inputs和Outputs中可以使用Codecs(編碼解碼器)對數(shù)據(jù)格式進(jìn)行處理。這四個(gè)部分均以插件形式存在,用戶通過定義pipeline配置文件,設(shè)置需要使用的input,filter,output,codec插件,以實(shí)現(xiàn)特定的數(shù)據(jù)采集,數(shù)據(jù)處理,數(shù)據(jù)輸出等功能。此外,數(shù)據(jù)往往以各種各樣的形式,或分散或集中地存在于很多系統(tǒng)中。如圖所示,Logstash支持各種輸入選擇,可以同時(shí)從眾多常用來源捕捉事件。能夠以連續(xù)的流式傳輸方式,輕松地從日志、指標(biāo)、Web應(yīng)用、數(shù)據(jù)存儲(chǔ)以及各AWS服務(wù)中采集數(shù)據(jù)。1.1.1數(shù)據(jù)采集的工具

數(shù)據(jù)從源傳輸?shù)酱鎯?chǔ)庫的過程中,Logstash過濾器能夠解析各個(gè)事件,識別已命名的字段以構(gòu)建結(jié)構(gòu),并將它們轉(zhuǎn)換成通用格式,以便進(jìn)行更強(qiáng)大的分析和實(shí)現(xiàn)商業(yè)價(jià)值。如圖所示,Logstash能夠動(dòng)態(tài)地轉(zhuǎn)換和解析數(shù)據(jù),不受格式或復(fù)雜度的影響。①利用Grok從非結(jié)構(gòu)化數(shù)據(jù)中派生出結(jié)構(gòu)。②從IP地址破譯出地理坐標(biāo)。③將PII數(shù)據(jù)匿名化,完全排除敏感字段。④簡化整體處理,不受數(shù)據(jù)源、格式或架構(gòu)的影響。1.1.1數(shù)據(jù)采集的工具

Logstash提供眾多輸出選擇,可以將數(shù)據(jù)發(fā)送到您要指定的地方,并且能夠靈活地解鎖眾多下游用例。Elasticsearch是我們的首選輸出方向,能夠?yàn)槲覀兊乃阉骱头治鰩頍o限可能。但它并非唯一選擇,如圖所示,Logstash提供眾多輸出選擇,可以將數(shù)據(jù)發(fā)送到用戶指定的地方,包括syslog(系統(tǒng)日志)和statsd(一種監(jiān)控?cái)?shù)據(jù)后端存儲(chǔ)開發(fā)的前端網(wǎng)絡(luò)應(yīng)用)等。1.1.1數(shù)據(jù)采集的工具①可擴(kuò)展。Logstash采用可插拔框架,通過200多個(gè)插件,Logstash可以接受幾乎各種各樣的數(shù)據(jù)。包括日志、網(wǎng)絡(luò)請求、關(guān)系型數(shù)據(jù)庫、傳感器或物聯(lián)網(wǎng)等。②可靠性與安全性。Logstash構(gòu)建了可信的交付管道:假如Logstash節(jié)點(diǎn)發(fā)生故障,Logstash會(huì)通過持久化隊(duì)列來保證至少將運(yùn)行中的事件送達(dá)一次。那些未被正常處理的消息會(huì)被送往死信隊(duì)列(deadletterqueue)以便做進(jìn)一步處理。由于具備了這種吸收吞吐量的能力,無需采用額外的隊(duì)列層,Logstash就能平穩(wěn)度過高峰期。Logstash的優(yōu)點(diǎn)③可監(jiān)視。Logstash管道通常服務(wù)于多種用途,會(huì)變得非常復(fù)雜,因此充分了解管道性能、可用性和瓶頸非常重要。借助監(jiān)測和管道查看器功能,可以輕松觀察和研究處于活動(dòng)狀態(tài)的Logstash節(jié)點(diǎn)或整個(gè)部署。1.1.1數(shù)據(jù)采集的工具

1.在數(shù)據(jù)傳輸方面,F(xiàn)lume更注重于數(shù)據(jù)的傳輸,而在數(shù)據(jù)預(yù)處理方面不如Logstash,而在傳輸上Flume比Logstash更可靠,因?yàn)閿?shù)據(jù)會(huì)持久化存儲(chǔ)在channel中,只有當(dāng)數(shù)據(jù)存儲(chǔ)在sink端中才會(huì)從channel中刪除,這個(gè)過程保證了數(shù)據(jù)的可靠性。

屬性FlumeLogstashFluentd內(nèi)存占用大大小性能高高高語言JavaJRubyC和Ruby框架規(guī)模重量級重量級輕量級插件支持多較多多擴(kuò)展性一般社區(qū)活躍度高一般集群分布式單節(jié)點(diǎn)單節(jié)點(diǎn)

從表中的對比以及前文中所描述的各個(gè)工具的特點(diǎn),可以看出來不同組件之間有著不同的優(yōu)勢和劣勢,總結(jié)以下特點(diǎn): 2.在數(shù)據(jù)預(yù)處理方面,Logstash屬于ELK組件之一,一般會(huì)同ELK其它組件一起配合使用,所以其更注重于數(shù)據(jù)的預(yù)處理。 3.在插件和可擴(kuò)展性方面Logstash有比Flume豐富的插件可選,所以在擴(kuò)展功能上比Flume全面,而且對比與Fluentd而言Logstash也更加優(yōu)秀,相比起來Fluentd插件質(zhì)量不夠好,第三方插件大多是使用者根據(jù)自己業(yè)務(wù)需要編寫,只為實(shí)現(xiàn)特定需求,沒有足夠的泛化,也沒有足夠的測試和性能評估。 4.在性能和內(nèi)存占用方面,F(xiàn)luentd雖然有高性能這一項(xiàng),可能相對于logstash要好很多,但在實(shí)際使用中,解析->轉(zhuǎn)換->入庫整個(gè)過程性能并不理想。此外Fluentd的性能既因?yàn)镽uby消耗過多計(jì)算和內(nèi)存資源,又因?yàn)镽uby難以受益于多核,所以對數(shù)據(jù)吞吐量大的業(yè)務(wù)來說它是很昂貴的。1.1.1數(shù)據(jù)采集的工具

Splunk作為一個(gè)不開源的商業(yè)化大數(shù)據(jù)平臺,是一個(gè)功能完備的企業(yè)級產(chǎn)品。提供完整的數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析和處理,數(shù)據(jù)展示的能力,包括命令行窗口,Web圖形界面接口和其他接口,權(quán)限控制,分布式管理服務(wù),數(shù)據(jù)索引,網(wǎng)絡(luò)端口監(jiān)聽,數(shù)據(jù)警報(bào),文件監(jiān)聽等功能。使用Splunk處理計(jì)算機(jī)數(shù)據(jù),可以在幾分鐘內(nèi)收集、分析和實(shí)時(shí)獲取數(shù)據(jù),并從中快速找到系統(tǒng)異常問題和調(diào)查安全事件,監(jiān)視端對端基礎(chǔ)結(jié)構(gòu),避免服務(wù)性能降低或中斷,以較低成本滿足合規(guī)性要求,關(guān)聯(lián)并分析跨越多個(gè)系統(tǒng)的復(fù)雜事件,從而獲取新層次的運(yùn)營可見性以及IT和業(yè)務(wù)智能。Splunk主要包括以下三個(gè)角色。

①SearchHead。SearchHead為搜索頭,其負(fù)責(zé)數(shù)據(jù)的搜索和處理,提供搜索時(shí)的信息抽取。SearchHead的作用就是根據(jù)用戶的查詢請求查詢各個(gè)Indexers中的數(shù)據(jù),融合Indexers所返回的結(jié)果,統(tǒng)一顯示給用戶,它只負(fù)責(zé)查詢,不負(fù)責(zé)建立索引。

②Indexer。Indexer為索引器,其負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和索引。Indexer不僅負(fù)責(zé)為數(shù)據(jù)建立索引,還負(fù)責(zé)響應(yīng)查找索引數(shù)據(jù)的用戶請求,還有讀取數(shù)據(jù)和負(fù)責(zé)查找管理工作。雖然Indexer可以查找它本身的數(shù)據(jù),但是在多Indexer的集群中,可以通過SearchHead的組件來整合多個(gè)Indexer,對外提供統(tǒng)一的查詢管理和服務(wù)。

③Forwarder。Forwarder為轉(zhuǎn)發(fā)器,其負(fù)責(zé)數(shù)據(jù)的收集、清洗、變形,并發(fā)送給Indexer。SplunkForwarder作為Splunk提供的組件,它的作用是把不同機(jī)器上面的數(shù)據(jù),如log(日志文件),轉(zhuǎn)發(fā)給indexer。Forwarder可以運(yùn)行在不同的操作系統(tǒng)上面。1.1.1數(shù)據(jù)采集的工具

Splunk提供了三種Forwarder,分別是UniversalForwarder、HeavyForwarder和LightForwarder。UniversalForwarder相對于其他兩種最重要的優(yōu)點(diǎn)是:它能夠極大地減少對主機(jī)硬件資源的占用。但是,它也做出了一定的犧牲,如不支持查詢和建立數(shù)據(jù)索引。

Splunk內(nèi)置了對Syslog,TCP/UDP,Spooling的支持,同時(shí),用戶可以通過開發(fā)Input和ModularInput的方式來獲取特定的數(shù)據(jù)。在Splunk提供的軟件倉庫里有很多成熟的數(shù)據(jù)采集應(yīng)用,如AWS,DBConnect等,可以方便的從云或者是數(shù)據(jù)庫中獲取數(shù)據(jù)進(jìn)入Splunk的數(shù)據(jù)平臺做分析。

值得注意的是,SearchHead和Indexer都支持Cluster,即高可用,高擴(kuò)展。但是Splunk現(xiàn)在還沒有針對Forwarder的Cluster的功能。也就是說如果有一臺Forwarder的機(jī)器出了故障,數(shù)據(jù)收集也會(huì)隨之中斷,并不能把正在運(yùn)行的數(shù)據(jù)采集任務(wù)Failover(故障轉(zhuǎn)移)到其它的Forwarder上。1.1.2爬蟲的原理與分類

網(wǎng)絡(luò)爬蟲是按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或腳本。網(wǎng)絡(luò)爬蟲按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),可以分為以下四種類型:通用網(wǎng)絡(luò)爬蟲(GeneralPurposeWebCrawler)、

聚焦網(wǎng)絡(luò)爬蟲(FocusedWebCrawler)、

增量式網(wǎng)絡(luò)爬蟲(IncrementalWebCrawler)、

深層網(wǎng)絡(luò)爬蟲(DeepWebCrawler)。

實(shí)際的網(wǎng)絡(luò)爬蟲系統(tǒng)通常是幾種爬蟲技術(shù)相結(jié)合實(shí)現(xiàn)的。通用網(wǎng)絡(luò)爬蟲

通用網(wǎng)絡(luò)爬蟲的爬取對象從一些種子URL延展至整個(gè)Web,主要為門戶站點(diǎn)搜索引擎和大型Web服務(wù)提供商采集數(shù)據(jù)的服務(wù),有較高的應(yīng)用價(jià)值。這類網(wǎng)絡(luò)爬蟲爬取的范圍和數(shù)量巨大,對于爬取速度和存儲(chǔ)空間要求較高,對于爬取頁面的順序要求相對較低,同時(shí)由于待刷新的頁面過多,通常采用并行工作方式,但需要較長時(shí)間才能刷新一次頁面。通用網(wǎng)絡(luò)爬蟲的結(jié)構(gòu)大致可以分為頁面爬行模塊、頁面分析模塊、鏈接過濾模塊、頁面數(shù)據(jù)庫、URL隊(duì)列、初始URL集合幾個(gè)部分。如圖所示,通用網(wǎng)絡(luò)爬蟲的實(shí)現(xiàn)原理及過程簡要概括如下。1.1.2爬蟲的原理與分類爬取過程04030201從URL隊(duì)列中讀取新的URL,并依據(jù)新的URL爬取網(wǎng)頁,同時(shí)從新網(wǎng)頁中獲取新URL,并重復(fù)上述的爬取過程。將新的URL放到URL隊(duì)列中。獲取了下一個(gè)新的URL地址之后,會(huì)將新的URL地址放到URL隊(duì)列中。

根據(jù)初始的URL爬取頁面并獲得新的URL。獲得初始的URL地址之后,首先需要爬取對應(yīng)URL地址中的網(wǎng)頁,爬取了對應(yīng)的URL地址中的網(wǎng)頁后,將網(wǎng)頁存儲(chǔ)到原始數(shù)據(jù)庫中,并且在爬取網(wǎng)頁的同時(shí),發(fā)現(xiàn)新的URL地址,同時(shí)將已爬取的URL地址存放到一個(gè)URL列表中,用于去重和判斷爬取的進(jìn)程。獲取初始的URL。初始的URL地址可以由用戶人為地指定,也可以由用戶指定的某個(gè)或某幾個(gè)初始爬取網(wǎng)頁決定。1.1.2爬蟲的原理與分類05滿足爬蟲系統(tǒng)設(shè)置的停止條件時(shí),停止爬取。在編寫爬蟲的時(shí)候,一般會(huì)設(shè)置相應(yīng)的停止條件。如果沒有設(shè)置停止條件,爬蟲則會(huì)一直爬取下去,一直到無法獲取新的URL地址為止,若設(shè)置了停止條件,爬蟲則會(huì)在停止條件滿足時(shí)停止爬取。為提高工作效率,通用網(wǎng)絡(luò)爬蟲會(huì)采取一定的爬行策略。常用的爬行策略有:深度優(yōu)先策略、廣度優(yōu)先策略。A深度優(yōu)先策略:基本方法是按照深度由低到高的順序,依次訪問下一級網(wǎng)頁鏈接,直到不能再深入為止。爬蟲在完成一個(gè)爬行分支后返回到上一鏈接節(jié)點(diǎn)進(jìn)一步搜索其它鏈接。當(dāng)所有鏈接遍歷完后,爬行任務(wù)結(jié)束。這種策略比較適合垂直搜索或站內(nèi)搜索,但當(dāng)爬行頁面內(nèi)容層次較深的站點(diǎn)時(shí)會(huì)造成資源的巨大浪費(fèi)。B廣度優(yōu)先策略:此策略按照網(wǎng)頁內(nèi)容目錄層次深淺來爬行頁面,處于較淺目錄層次的頁面首先被爬行。當(dāng)同一層次中的頁面爬行完畢后,爬蟲再深入下一層繼續(xù)爬行。這種策略能夠有效控制頁面的爬行深度,避免遇到一個(gè)無窮深層分支時(shí)無法結(jié)束爬行的問題,無需存儲(chǔ)大量中間節(jié)點(diǎn),不足之處在于需較長時(shí)間才能爬行到目錄層次較深的頁面。1.1.2爬蟲的原理與分類聚焦網(wǎng)絡(luò)爬蟲

聚焦網(wǎng)絡(luò)爬蟲是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)頁面的網(wǎng)絡(luò)爬蟲。相較于通用網(wǎng)絡(luò)爬蟲而言,聚焦爬蟲只需要爬行與主題相關(guān)的頁面,極大地節(jié)省了硬件和網(wǎng)絡(luò)資源,保存的頁面也由于數(shù)量少而更新快,還可以很好地滿足一些特定人群對特定領(lǐng)域信息的需求。由于聚焦網(wǎng)絡(luò)爬蟲需要有目的地進(jìn)行爬取,所以相較于通用網(wǎng)絡(luò)爬蟲而言,需要增加目標(biāo)的定義和過濾機(jī)制,具體來說,此時(shí),其執(zhí)行原理和過程需要比通用網(wǎng)絡(luò)爬蟲多出三步,即目標(biāo)的定義、無關(guān)鏈接的過濾、下一步要爬取的URL地址的選取。如圖所示,聚焦網(wǎng)絡(luò)爬蟲的實(shí)現(xiàn)原理及過程簡要概括如下。1.1.2爬蟲的原理與分類①對爬取目標(biāo)的定義和描述。在聚焦網(wǎng)絡(luò)爬蟲中,首先要依據(jù)爬取需求定義好該聚焦網(wǎng)絡(luò)爬蟲爬取的目標(biāo),以及進(jìn)行相關(guān)的描述。②獲取初始的URL。③根據(jù)初始的URL爬取頁面,并獲得新的URL。④從新的URL中過濾掉與爬取目標(biāo)無關(guān)的鏈接。因?yàn)榫劢咕W(wǎng)絡(luò)爬蟲對網(wǎng)頁的爬取是有目的性的,所以與目標(biāo)無關(guān)的網(wǎng)頁將會(huì)被過濾掉。同時(shí)需要將已爬取的URL地址存放到一個(gè)URL列表中,用于去重和判斷爬取的進(jìn)程。⑤將過濾后的鏈接放到URL隊(duì)列中。⑥從URL隊(duì)列中,根據(jù)搜索算法確定URL的優(yōu)先級,并確定下一步要爬取的URL地址。在聚焦網(wǎng)絡(luò)爬蟲中,下一步爬取哪些URL地址相對來說是很重要的。對于聚焦網(wǎng)絡(luò)爬蟲來說,不同的爬取順序,可能導(dǎo)致爬蟲的執(zhí)行效率不同,所以,需要依據(jù)搜索策略來確定下一步需要爬取哪些URL地址。⑦從下一步要爬取的URL地址中,讀取新的URL,然后依據(jù)新的URL地址爬取網(wǎng)頁,并重復(fù)上述爬取過程。⑧滿足系統(tǒng)中設(shè)置的停止條件時(shí),或無法獲取新的URL地址時(shí),停止爬行。1.1.2爬蟲的原理與分類增量式網(wǎng)絡(luò)爬蟲

增量式網(wǎng)絡(luò)爬蟲是指對已下載網(wǎng)頁采取增量式更新和只爬取新產(chǎn)生或發(fā)生變化網(wǎng)頁的爬蟲,它能夠在一定程度上保證所爬行的頁面是新的頁面。相較于周期性爬行和刷新頁面的網(wǎng)絡(luò)爬蟲而言,增量式爬蟲只會(huì)在需要的時(shí)候爬行新產(chǎn)生或發(fā)生更新的頁面,并不重新下載沒有發(fā)生變化的頁面,可有效減少數(shù)據(jù)下載量,及時(shí)更新已爬行的網(wǎng)頁,減小時(shí)間和空間上的耗費(fèi),但是增加了爬行算法的復(fù)雜度和實(shí)現(xiàn)難度。增量式網(wǎng)絡(luò)爬蟲的體系結(jié)構(gòu)包含爬行模塊、排序模塊、更新模塊、本地頁面集、待爬行URL集以及本地頁面URL集。

增量式爬蟲有兩個(gè)目標(biāo):保持本地頁面集中存儲(chǔ)的頁面為最新頁面和提高本地集中存儲(chǔ)頁面的質(zhì)量。為實(shí)現(xiàn)第一個(gè)目標(biāo),增量式爬蟲需要通過重新訪問網(wǎng)頁來更新本地頁面集中頁面內(nèi)容,常用的方法有:①統(tǒng)一更新法:爬蟲以相同的頻率訪問所有網(wǎng)頁,不考慮網(wǎng)頁的改變頻率;②個(gè)體更新法:爬蟲根據(jù)個(gè)體網(wǎng)頁的改變頻率來重新訪問各頁面;③基于分類的更新法:爬蟲根據(jù)網(wǎng)頁改變頻率將其分為更新較快網(wǎng)頁子集和更新較慢網(wǎng)頁子集兩類,然后以不同的頻率訪問這兩類網(wǎng)頁。為實(shí)現(xiàn)第二個(gè)目標(biāo),增量式爬蟲需要對網(wǎng)頁的重要性排序,常用的策略有:廣度優(yōu)先策略、PageRank優(yōu)先策略等。

增量式網(wǎng)絡(luò)爬蟲和各種爬蟲的大致流程基本相似,只不過多出了去重的判斷,這也是增量式網(wǎng)絡(luò)爬蟲的特點(diǎn)。其多出來的三個(gè)步驟為:

①在獲取URL時(shí),發(fā)送請求之前先判斷這個(gè)URL是不是之前爬取過。

②在解析URL內(nèi)容后判斷這部分內(nèi)容是不是之前爬取過。

③在將采集到的信息寫入存儲(chǔ)介質(zhì)時(shí)判斷內(nèi)容是不是已經(jīng)在介質(zhì)中存在。1.1.2爬蟲的原理與分類DeepWeb爬蟲

Web頁面按存在方式可以分為表層網(wǎng)頁(SurfaceWeb)和深層網(wǎng)頁(DeepWeb)。表層網(wǎng)頁是指傳統(tǒng)搜索引擎可以索引的頁面,即以超鏈接可以到達(dá)的靜態(tài)網(wǎng)頁為主構(gòu)成的Web頁面。DeepWeb是那些大部分內(nèi)容不能通過靜態(tài)鏈接獲取的、隱藏在搜索表單后的,只有用戶提交一些關(guān)鍵詞才能獲得的Web頁面。例如那些用戶注冊后內(nèi)容才可見的網(wǎng)頁就屬于DeepWeb。并且DeepWeb中可訪問信息容量是SurfaceWeb的幾百倍,是互聯(lián)網(wǎng)上最大、發(fā)展最快的新型信息資源。

DeepWeb爬蟲體系結(jié)構(gòu)包含六個(gè)基本功能模塊(爬行控制器、解析器、表單分析器、表單處理器、響應(yīng)分析器、LVS控制器)和兩個(gè)爬蟲內(nèi)部數(shù)據(jù)結(jié)構(gòu)(URL列表、LVS表)。其中LVS(LabelValueSet)表示標(biāo)簽或數(shù)值集合,用來表示填充表單的數(shù)據(jù)源。

DeepWeb爬蟲爬行過程中最重要部分就是表單填寫,包含兩種類型:①基于領(lǐng)域知識的表單填寫:此方法一般會(huì)維持一個(gè)本體庫,通過語義分析來選取合適的關(guān)鍵詞填寫表單。②基于網(wǎng)頁結(jié)構(gòu)分析的表單填寫:此方法一般無領(lǐng)域知識或僅有有限的領(lǐng)域知識,將網(wǎng)頁表單表示成DOM樹,從中提取表單各字段值。1.1.2爬蟲的原理與分類如圖所示網(wǎng)絡(luò)爬蟲的核心流程可概括為:發(fā)起請求、獲取相應(yīng)內(nèi)容、解析內(nèi)容、保存數(shù)據(jù)四個(gè)主要步驟。前兩個(gè)步驟為發(fā)起請求(Request)和獲取服務(wù)器的響應(yīng)(Response),也是爬蟲最核心部分。1.1.3網(wǎng)絡(luò)爬蟲核心教程Request由客戶端向服務(wù)端發(fā)出,如圖所示,可以分為4部分內(nèi)容:請求方式(RequestMethod)、請求網(wǎng)址(RequestURL)、請求頭(RequestHeaders)、請求體(RequestBody)。1.1.3網(wǎng)絡(luò)爬蟲核心教程1.1.3網(wǎng)絡(luò)爬蟲核心教程(1)請求方式

常見的請求方式有兩種:GET和POST。在瀏覽器中直接輸入U(xiǎn)RL并回車,這便發(fā)起了一個(gè)GET請求,請求的參數(shù)會(huì)直接包含到URL里。例如在百度中搜索相應(yīng)內(nèi)容,就是一個(gè)GET請求,其中URL中包含了對請求的參數(shù)信息。POST請求大多在表單提交時(shí)發(fā)起。例如對于一個(gè)登錄表單,輸入用戶名和密碼后,點(diǎn)擊“登錄”按鈕,這通常會(huì)發(fā)起一個(gè)POST請求,其數(shù)據(jù)通常以表單的形式傳輸,而不會(huì)體現(xiàn)在URL中。 GET請求中的參數(shù)包含在URL里面,數(shù)據(jù)可以在URL中看到,而POST請求的URL不會(huì)包含這些數(shù)據(jù),數(shù)據(jù)都是通過表單形式傳輸?shù)模谡埱篌w中;GET請求提交的數(shù)據(jù)最多只有1024字節(jié),而POST方式?jīng)]有限制;一般來說,需要提交用戶名和密碼等敏感信息,使用GET方法請求會(huì)暴露在URL中,所以此時(shí)最好以POST方式發(fā)送,上傳文件時(shí),由于文件內(nèi)容比較大,也會(huì)選用POST方式。我們平常使用的請求大部分是GET和POST請求,如表所示,還有一些請求方式如HEAD、PUT、DELETE等。方法描述GET請求頁面,并返回頁面內(nèi)容HEAD類似于GET請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報(bào)頭POST大多數(shù)用于提交表單或上傳文件,數(shù)據(jù)包含在請求體中PUT從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定文檔中的內(nèi)容DELETE請求服務(wù)器刪除指定的頁面CONNECT把服務(wù)器當(dāng)做跳板,讓服務(wù)器代替客戶端訪問其他網(wǎng)頁OPTIONS允許客戶端查看服務(wù)器的性能TRACE回顯服務(wù)器收到的請求,主要用于測試或診斷1.1.3網(wǎng)絡(luò)爬蟲核心教程(2)請求網(wǎng)址URLURL(uniformresourcelocator)即統(tǒng)一資源定位符,用于唯一確定想請求的資源。如一個(gè)網(wǎng)頁文檔、一張圖片、一個(gè)視頻等都可以用URL來確定。(3)請求頭請求頭以鍵值對的形式將請求的一些配置信息告訴服務(wù)器,讓服務(wù)器判斷這些配置信息并解析請求頭,用來說明服務(wù)器要使用的附加信息,比較重要的信息有Cookie,Referer,User-Agent等。下面簡要說明一些常用的頭信息。①Accept:請求報(bào)頭域,用于指定客戶端可接受哪些類型的信息。②Accept-Language:指定客戶端可接受的語言類型。③Accept-Encoding:指定客戶端可接受的內(nèi)容編碼。④Host:用于指定請求資源的主機(jī)IP和端口號,其內(nèi)容為請求URL的原始服務(wù)器或網(wǎng)關(guān)的位置。從HTTP1.1版本開始,請求必須包含此內(nèi)容。⑤Cookie:也常用復(fù)數(shù)形式Cookies,這是網(wǎng)站為了辨別用戶進(jìn)行會(huì)話跟蹤而存儲(chǔ)在用戶本地的數(shù)據(jù)。它的主要功能是維持當(dāng)前訪問會(huì)話。如我們輸入用戶名和密碼成功登錄某個(gè)網(wǎng)站后,服務(wù)器會(huì)用會(huì)話保存登錄狀態(tài)信息,后面我們每次刷新或請求該站點(diǎn)的其他頁面時(shí),會(huì)發(fā)現(xiàn)都是登錄狀態(tài),這就是Cookies的功勞。Cookies里有信息標(biāo)識了我們所對應(yīng)的服務(wù)器的會(huì)話,每次瀏覽器在請求該站點(diǎn)的頁面時(shí),都會(huì)在請求頭加上Cookies并將其返回給服務(wù)器,服務(wù)器通過Cookies識別出是我們自己,并且查出當(dāng)前狀態(tài)是登錄狀態(tài),所以返回結(jié)果就是登陸之后才能看到的網(wǎng)頁內(nèi)容。⑥Referer:此內(nèi)容用來標(biāo)識這個(gè)請求是從哪個(gè)頁面發(fā)過來的,服務(wù)器可以拿到這一信息并做相應(yīng)處理,如做來源統(tǒng)計(jì)、防盜鏈處理等。⑦User-Agent:簡稱UA,它是一個(gè)特殊的字符串頭,可以使服務(wù)器識別客戶使用的操作系統(tǒng)及版本、瀏覽器及版本等信息。再做爬蟲時(shí)加上此信息,可以偽裝為瀏覽器,如果不加則很容易可能被識別出為爬蟲。⑧Content-Type:也稱為互聯(lián)網(wǎng)媒體類型(InternetMediaType)或者M(jìn)IME類型,在HTTP協(xié)議消息頭中,它用來表示具體請求中的媒體類型信息。如text/html代表HTML格式,image/gif代表GIF圖片,application/json代表JSON類型。(4)請求體請求體一般承載的內(nèi)容是POST請求中的表單數(shù)據(jù),而對于GET請求,請求體則為空。Response由服務(wù)端返回給客戶端,如圖所示,可以分為三部分:響應(yīng)狀態(tài)(ResponseStatus)、響應(yīng)頭(ResponseHeaders)、響應(yīng)體(ResponseBody)。1.1.3網(wǎng)絡(luò)爬蟲核心教程1.1.3網(wǎng)絡(luò)爬蟲核心教程(1)響應(yīng)狀態(tài)響應(yīng)狀態(tài)表示服務(wù)器對響應(yīng)的反饋,主要由狀態(tài)碼來標(biāo)識,如200代表服務(wù)器正常響應(yīng),404代表頁面未找到,500代表服務(wù)器內(nèi)部發(fā)生錯(cuò)誤。網(wǎng)絡(luò)爬蟲中,我們可以根據(jù)狀態(tài)碼的數(shù)字來判斷服務(wù)器響應(yīng)狀態(tài),如狀態(tài)碼為200,則證明成功返回?cái)?shù)據(jù),再進(jìn)行進(jìn)一步的處理。(2)響應(yīng)頭響應(yīng)頭包含了服務(wù)器對請求的應(yīng)答信息,下面簡要說明一些常用的頭信息:①Date:標(biāo)識響應(yīng)產(chǎn)生的時(shí)間。②Last-Modified:指定資源的最后修改時(shí)間。③Content-Encoding:指定響應(yīng)內(nèi)容的編碼。④Server:包含服務(wù)器的信息,如名稱、版本號等。⑤Content-Type:文檔類型,指定返回的數(shù)據(jù)類型是什么,如text/html代表返回HTML文檔,application/x-javascript代表返回JavaScript文件,image/jpeg代表返回圖片。⑥Set-Cookie:設(shè)置Cookies。響應(yīng)頭中的Set-Cookie告訴瀏覽器需要將此內(nèi)容放在Cookies中,下次請求攜帶Cookies請求。⑦Expires:指定響應(yīng)的過期時(shí)間,可以使代理服務(wù)器或?yàn)g覽器將加載的內(nèi)容更新到緩存中。如果再次訪問時(shí),就可以直接從緩存中加載,降低服務(wù)器負(fù)載,縮短加載時(shí)間。1.1.3網(wǎng)絡(luò)爬蟲核心教程(3)響應(yīng)體Response中最重要的當(dāng)屬響應(yīng)體的內(nèi)容。響應(yīng)的正文數(shù)據(jù)都在響應(yīng)體中,比如請求網(wǎng)頁時(shí),它的響應(yīng)體就是網(wǎng)頁的HTML代碼;請求一張圖片時(shí),它的響應(yīng)體就是圖片的二進(jìn)制數(shù)據(jù)。在做爬蟲時(shí),我們主要通過響應(yīng)體得到的網(wǎng)頁的源代碼、JSON格式數(shù)據(jù)等,然后從中做相應(yīng)內(nèi)容的提取。在掌握爬蟲的原理之后,我們需要明晰爬蟲的作用,便于我們更好地使用爬蟲?;ヂ?lián)網(wǎng)的核心價(jià)值在于數(shù)據(jù)的共享與傳遞,如果我們把互聯(lián)網(wǎng)比作一張巨大的蜘蛛網(wǎng),那計(jì)算機(jī)上的數(shù)據(jù)便是蜘蛛網(wǎng)上的一個(gè)獵物,而爬蟲就是一只蜘蛛,沿著蜘蛛網(wǎng)抓取自己想要的“獵物”——數(shù)據(jù)。數(shù)據(jù)作為互聯(lián)網(wǎng)中最具價(jià)值的產(chǎn)物,爬蟲在數(shù)據(jù)分析過程中扮演重要角色,如企業(yè)需要數(shù)據(jù)來分析用戶行為,分析自己產(chǎn)品的不足之處,來分析競爭對手等等;同時(shí)在搜索引擎、采集數(shù)據(jù)、廣告過濾等方面爬蟲也有廣泛應(yīng)用。爬蟲應(yīng)用場景04030201資訊推薦系統(tǒng)通過爬蟲技術(shù)抓取數(shù)新聞源,然后以用戶行為屬性標(biāo)簽歸納和深度自然語言搜索優(yōu)化手段來分發(fā)給用戶,做到千人千面的閱讀體驗(yàn),達(dá)到最可觀的搜索優(yōu)化程度。資訊推薦系統(tǒng)通過爬蟲技術(shù)抓取數(shù)新聞源,然后以用戶行為屬性標(biāo)簽歸納和深度自然語言搜索優(yōu)化手段來分發(fā)給用戶,做到千人千面的閱讀體驗(yàn),達(dá)到最可觀的搜索優(yōu)化程度。輿情分析系統(tǒng)顧名思義就是輿論發(fā)展的情況有正面和負(fù)面之分,利用爬蟲技術(shù)來監(jiān)測搜索引擎、新聞門戶、論壇、博客、微博、微信、報(bào)刊、視頻的輿情。根據(jù)預(yù)定的監(jiān)控關(guān)鍵詞,實(shí)現(xiàn)全媒體一鍵搜索,保證信息搜集的全面性;同時(shí)為了豐富數(shù)據(jù)的多樣性,除了采集文本信息之外,還對圖像、視頻等信息進(jìn)行采集;為保證其時(shí)效性,采用全棧式的響應(yīng)機(jī)制,對于目標(biāo)網(wǎng)站發(fā)布目標(biāo)信息后,可以在分鐘級內(nèi)采集到本地?cái)?shù)據(jù)庫內(nèi)。1.1.4爬蟲的應(yīng)用場景購物網(wǎng)站比價(jià)系統(tǒng)如今各大電商平臺為了活躍用戶進(jìn)行各種秒殺活動(dòng)并推出各種優(yōu)惠券等,同樣的一件商品在不同網(wǎng)購平臺價(jià)格可能不同,這就催生各種比價(jià)網(wǎng)站。那么這些網(wǎng)站是如何在秒級的時(shí)間內(nèi)知道一件商品在某站有優(yōu)惠?這就需要一個(gè)爬蟲系統(tǒng)來實(shí)時(shí)監(jiān)控各站的價(jià)格浮動(dòng)。先采集商品的價(jià)格,規(guī)格,數(shù)量等,再做處理,分析,反饋。數(shù)據(jù)預(yù)處理簡介221.2數(shù)據(jù)預(yù)處理簡介現(xiàn)實(shí)世界中數(shù)據(jù)大體上都是不完整,不一致的臟數(shù)據(jù),無法直接進(jìn)行數(shù)據(jù)挖掘,或挖掘結(jié)果差強(qiáng)人意。為了提高數(shù)據(jù)挖掘的質(zhì)量產(chǎn)生了數(shù)據(jù)預(yù)處理技術(shù)。數(shù)據(jù)預(yù)處理(DataPreprocessing)是指在主要的數(shù)據(jù)分析之前對數(shù)據(jù)進(jìn)行的一些處理操作。本節(jié)對數(shù)據(jù)預(yù)處理的相關(guān)流程及工具等進(jìn)行介紹。數(shù)據(jù)挖掘過程一般包括數(shù)據(jù)采集,數(shù)據(jù)預(yù)處理,數(shù)據(jù)挖掘以及數(shù)據(jù)評價(jià)和呈現(xiàn)。目前,數(shù)據(jù)挖掘的研究工作大都集中在挖掘算法、挖掘技術(shù)、挖掘語言的探討而忽視對數(shù)據(jù)預(yù)處理的研究。事實(shí)上,在一個(gè)完整的數(shù)據(jù)挖掘過程中,數(shù)據(jù)預(yù)處理要花費(fèi)60%左右的時(shí)間。數(shù)據(jù)預(yù)處理作為數(shù)據(jù)分析流程中工作量最大的一環(huán),也是必不可少的。要使挖掘算法挖掘出有效的知識,必須為其提供干凈,準(zhǔn)確,簡潔的數(shù)據(jù),一些成熟的挖掘算法對其處理的數(shù)據(jù)集合都有一定的要求:比如數(shù)據(jù)的完整性好,冗余性小,屬性的相關(guān)性小等,雜亂、重復(fù)、不完整的數(shù)據(jù)會(huì)嚴(yán)重影響到數(shù)據(jù)挖掘算法的執(zhí)行效率,甚至?xí)?dǎo)致挖掘結(jié)果的偏差。在實(shí)際業(yè)務(wù)處理中,數(shù)據(jù)通常是“臟數(shù)據(jù)”。所謂的“臟”,指數(shù)據(jù)可能存在以下幾種問題:①數(shù)據(jù)缺失/數(shù)據(jù)不完整(Incomplete)是屬性值為空的情況。②數(shù)據(jù)噪聲(Noisy)是數(shù)據(jù)值不合常理的情況。③數(shù)據(jù)不一致(Inconsistent)是數(shù)據(jù)前后存在矛盾的情況。④數(shù)據(jù)冗余(Redundant)是數(shù)據(jù)量或者屬性數(shù)目超出數(shù)據(jù)分析需要的情況。⑤數(shù)據(jù)集不均衡(DatasetImbalance)是各個(gè)類別的數(shù)據(jù)量相差懸殊的情況。⑥離群點(diǎn)/異常值(Outliers)是遠(yuǎn)離數(shù)據(jù)集中其余部分的數(shù)據(jù)。⑦數(shù)據(jù)重復(fù)(Duplicate)是在數(shù)據(jù)集中出現(xiàn)多次的數(shù)據(jù)。而人為、硬件、軟件方面出現(xiàn)的問題往往都會(huì)造成數(shù)據(jù)存在這些偏差,如數(shù)據(jù)收集的時(shí)候缺乏合適的值,數(shù)據(jù)收集時(shí)和數(shù)據(jù)分析時(shí)的不同考慮因素,數(shù)據(jù)收集工具的問題,數(shù)據(jù)輸入時(shí)的人為計(jì)算錯(cuò)誤,數(shù)據(jù)傳輸中產(chǎn)生的錯(cuò)誤。因此想要避免數(shù)據(jù)出現(xiàn)“臟數(shù)據(jù)”是十分困難的,不正確、不完整和不一致的數(shù)據(jù)是現(xiàn)實(shí)世界的大型數(shù)據(jù)庫和數(shù)據(jù)倉庫的共同特點(diǎn),這也從側(cè)面表明數(shù)據(jù)預(yù)處理的重要性。沒有高質(zhì)量的數(shù)據(jù),就沒有高質(zhì)量的挖掘結(jié)果,高質(zhì)量的決策必須依賴高質(zhì)量的數(shù)據(jù)。1.2.1數(shù)據(jù)預(yù)處理的目的和意義

數(shù)據(jù)的預(yù)處理是指對所收集數(shù)據(jù)進(jìn)行分類或分組前所做的審核、篩選、排序等必要的處理。數(shù)據(jù)預(yù)處理的方法主要包括:數(shù)據(jù)清洗,數(shù)據(jù)集成,數(shù)據(jù)變換,數(shù)據(jù)規(guī)約。這些數(shù)據(jù)處理技術(shù)在數(shù)據(jù)挖掘之前使用,大大提高了數(shù)據(jù)挖掘模式的質(zhì)量,降低實(shí)際挖掘所需要的時(shí)間。1.數(shù)據(jù)清洗數(shù)據(jù)清洗需要去除源數(shù)據(jù)集中的噪聲數(shù)據(jù)和無關(guān)數(shù)據(jù),處理遺漏數(shù)據(jù),本處介紹噪聲數(shù)據(jù)的處理、空缺值的處理和清洗臟數(shù)據(jù)。(1)噪聲數(shù)據(jù)的處理:噪聲是一個(gè)測量變量中的隨機(jī)錯(cuò)誤和偏差,包括錯(cuò)誤的值或偏離期望的孤立點(diǎn)值,對于噪聲數(shù)據(jù)有如下幾種處理方法:分箱,回歸,聚類。①分箱:分箱方法通過考察數(shù)據(jù)的“近鄰”(即周圍的值)來光滑有序數(shù)據(jù)的值,有序值分布到一些“桶”或箱中。由于分箱方法考察近鄰的值,因此進(jìn)行局部光滑。幾種分箱技術(shù):用箱均值光滑、用箱邊界光滑、用箱中位數(shù)光滑。②回歸:可以用一個(gè)函數(shù)(如回歸函數(shù))擬合數(shù)據(jù)來光滑數(shù)據(jù)。線性回歸涉及找出擬合兩個(gè)屬性(或變量)的“最佳”線,使得一個(gè)屬性可以用來預(yù)測另一個(gè)。多元線性回歸是線性回歸的擴(kuò)展,其中涉及的屬性多于兩個(gè),并且數(shù)據(jù)擬合到一個(gè)多維曲面。③聚類:通過聚類檢測離群點(diǎn)。(2)空缺值的處理:目前最常用的方法是使用最可能的值填充空缺值,如用一個(gè)全局常量替換空缺值,使用屬性的平均值填充空缺值或?qū)⑺性M按照某些屬性分類,然后用同一類中屬性的平均值填充空缺值。例如一個(gè)公司職員平均工資收入為3000元,則使用該值替換工資中“基本工資”屬性中的空缺值。(3)清洗臟數(shù)據(jù):異構(gòu)數(shù)據(jù)源數(shù)據(jù)庫中的數(shù)據(jù)并不都是正確的,常常不可避免的存在著不完整,不一致,不精確和重復(fù)的數(shù)據(jù),往往使挖掘過程陷入混亂,導(dǎo)致不可靠的輸出。清洗臟數(shù)據(jù)可采用:專門的程序、采用概率統(tǒng)計(jì)學(xué)遠(yuǎn)離查找數(shù)值異常的記錄、手工對重復(fù)記錄的進(jìn)行檢測和刪除。1.2.2數(shù)據(jù)預(yù)處理的流程2.數(shù)據(jù)集成數(shù)據(jù)集成是指合并多個(gè)數(shù)據(jù)源中的數(shù)據(jù),存放在一個(gè)一致的數(shù)據(jù)存儲(chǔ)(如數(shù)據(jù)倉庫)中。數(shù)據(jù)集成有三個(gè)主要問題:①實(shí)體識別問題:在數(shù)據(jù)集成時(shí)候,來自多個(gè)數(shù)據(jù)源的現(xiàn)實(shí)世界的實(shí)體有時(shí)并不一定是匹配的,例如:數(shù)據(jù)分析者如何才能確信一個(gè)數(shù)據(jù)庫中的student_id和另一個(gè)數(shù)據(jù)庫中的stu_id值是同一個(gè)實(shí)體,通常,可以根據(jù)數(shù)據(jù)庫或者數(shù)據(jù)倉庫的元數(shù)據(jù)來區(qū)分模式集成中的錯(cuò)誤。②冗余問題:數(shù)據(jù)集成往往導(dǎo)致數(shù)據(jù)冗余,如同一屬性多次出現(xiàn),同一屬性命名不一致等,對于屬性間的冗余可以用相關(guān)分析檢測到,然后刪除。有些冗余可以被相關(guān)分析檢測到,例如通過計(jì)算屬性A、B的相關(guān)系數(shù)(皮爾遜積矩系數(shù))來判斷是否冗余;對于離散數(shù)據(jù),可通過卡方檢驗(yàn)來判斷兩個(gè)屬性A和B之間的相關(guān)聯(lián)系。③數(shù)據(jù)值沖突問題:對于現(xiàn)實(shí)世界的同一實(shí)體,來自不同數(shù)據(jù)源的屬性值可能不同,這可能是因?yàn)楸硎?、比例、或編碼、數(shù)據(jù)類型、單位不統(tǒng)一、字段長度不同。1.2.2數(shù)據(jù)預(yù)處理的流程3.數(shù)據(jù)變換數(shù)據(jù)變換主要是找到數(shù)據(jù)的特征表示,用維變換或轉(zhuǎn)換方法減少有效變量的數(shù)目或找到數(shù)據(jù)的不變式,包括規(guī)范化,泛化,光滑等操作,將數(shù)據(jù)轉(zhuǎn)換或統(tǒng)一成適合于挖掘的形式,具體如下:(1)光滑:去掉數(shù)據(jù)的噪聲,包括分箱,回歸和聚類。(2)聚集:對數(shù)據(jù)進(jìn)行匯總或聚集。這一步通常用來為多粒度數(shù)據(jù)分析構(gòu)造數(shù)據(jù)立方體。(3)數(shù)據(jù)泛化:使用概念分層,用高層概念替換底層或“原始”數(shù)據(jù)。(4)規(guī)范化:又稱為歸一化,特征縮放(featurescaling)。將屬性數(shù)據(jù)按比例縮放,使之落入一個(gè)小的特定區(qū)間。

規(guī)范化方法:①最小-最大規(guī)范化:v’=[(v-min)/(max-min)]*(new_max-new_min)+new_min。

②z-score規(guī)范化(或零均值規(guī)范化):v’=(v-屬性A的均值E)/屬性A的標(biāo)準(zhǔn)差。

③小數(shù)定標(biāo)規(guī)范化:v’=v/10的j次方,j是使Max(|v’|)<1的最小整數(shù)。(5)屬性構(gòu)造(或特征構(gòu)造):可以構(gòu)造新的屬性并添加到屬性集中,以幫助挖掘過程。1.2.2數(shù)據(jù)預(yù)處理的流程4.數(shù)據(jù)規(guī)約指將數(shù)據(jù)按語義層次結(jié)構(gòu)合并,語義層次結(jié)構(gòu)定義了元組屬性值之間的語義關(guān)系,規(guī)約化和規(guī)約能大量減少元組個(gè)數(shù),提高計(jì)算效率,同時(shí),規(guī)格化和規(guī)約過程提高了知識發(fā)現(xiàn)的起點(diǎn),使得一個(gè)算法能夠發(fā)現(xiàn)多層次的知識,適應(yīng)不同應(yīng)用的需要。數(shù)據(jù)規(guī)約是將數(shù)據(jù)庫中的海量數(shù)據(jù)進(jìn)行規(guī)約,規(guī)約之后的數(shù)據(jù)仍接近于保持原數(shù)據(jù)的完整性,但數(shù)據(jù)量相對小的多,這樣進(jìn)行挖掘的性能和效率會(huì)得到很大的提高。數(shù)據(jù)規(guī)約的策略主要有數(shù)據(jù)立方體聚集,維規(guī)約,數(shù)據(jù)壓縮,數(shù)值壓縮,離散化和概念分層。(1)維規(guī)約:通過刪除不相關(guān)的屬性減少數(shù)據(jù)量,不僅僅壓縮了數(shù)據(jù)集,還減少了出現(xiàn)在發(fā)現(xiàn)模式上的屬性數(shù)目,通常采用屬性子集選擇方法找出最小屬性集,使得數(shù)據(jù)類的概率分布盡可能的接近使用所有屬性的原分布(2)數(shù)據(jù)壓縮,數(shù)據(jù)壓縮分為無損壓縮和有損壓縮,比較流行和有效的有損數(shù)據(jù)壓縮方法是小波變換和主要成分分析,小波變換對于稀疏或傾斜數(shù)據(jù)以及具有有序?qū)傩缘臄?shù)據(jù)有很好的壓縮效果。(3)數(shù)值規(guī)約:數(shù)值歸約通過選擇替代的、較小的數(shù)據(jù)表示形式來減少數(shù)據(jù)量。數(shù)值歸約技術(shù)可以是有參的,也可以是無參的。有參方法是使用一個(gè)模型來評估數(shù)據(jù),只需存放參數(shù),而不需要存放實(shí)際數(shù)據(jù)。有參的數(shù)值歸約技術(shù)有以下兩種,回歸:線性回歸和多元回歸;對數(shù)線性模型:近似離散屬性集中的多維概率分布。無參的數(shù)值歸約技術(shù)有3種:直方圖,聚類,選樣。(4)概念分層通過收集并用較高層的概念替換較低層的概念來定義數(shù)值屬性的一個(gè)離散化。概念分層可以用來歸約數(shù)據(jù),通過這種概化盡管細(xì)節(jié)丟失了,但概化后的數(shù)據(jù)更有意義、更容易理解,并且所需的空間比原數(shù)據(jù)少。對于數(shù)值屬性,由于數(shù)據(jù)的可能取值范圍的多樣性和數(shù)據(jù)值的更新頻繁,說明概念分層是困難的。數(shù)值屬性的概念分層可以根據(jù)數(shù)據(jù)的分布分析自動(dòng)地構(gòu)造,如用分箱、直方圖分析、聚類分析、基于熵的離散化和自然劃分分段等技術(shù)生成數(shù)值概念分層。由用戶專家在模式級顯示地說明屬性的部分序或全序,從而獲得概念的分層;只說明屬性集,但不說明它們的偏序,由系統(tǒng)根據(jù)每個(gè)屬性不同值的個(gè)數(shù)產(chǎn)生屬性序,自動(dòng)構(gòu)造有意義的概念分層。1.2.2數(shù)據(jù)預(yù)處理的流程1.2.3數(shù)據(jù)預(yù)處理的工具介紹Kettle作為免費(fèi)開源的基于Java的企業(yè)級ETL(Extract-Transform-Load,數(shù)據(jù)抽取、轉(zhuǎn)換、裝載的過程)工具,支持圖形化的GUI設(shè)計(jì)界面,可以以工作流的形式流轉(zhuǎn),做一些簡單或復(fù)雜的數(shù)據(jù)抽取、數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)過濾等數(shù)據(jù)預(yù)處理方面工作,功能強(qiáng)大簡單易用。如圖所示,Kettle包括四大核心組件:①Spoon。轉(zhuǎn)換(transform)設(shè)計(jì)工具(GUI方式)。②Chef。工作(job)設(shè)計(jì)工具(GUI方式)。③pan。轉(zhuǎn)換(transform)執(zhí)行器(命令行方式)。④Kitchen。工作(job)執(zhí)行器(命令行方式)。1.2.3數(shù)據(jù)預(yù)處理的工具介紹job和transform是Kettle中的兩種腳本文件,transformation完成針對數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,job則完成整個(gè)工作流的控制。如圖所示,為Kettle的概念模型。Kettle的執(zhí)行分為兩個(gè)層次:Job和Transformation。這兩個(gè)層次的最主要的在于數(shù)據(jù)的傳遞和運(yùn)行方式。1.2.3數(shù)據(jù)預(yù)處理的工具介紹job和transform是Kettle中的兩種腳本文件,transformation完成針對數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,job則完成整個(gè)工作流的控制。如圖所示,為Kettle的概念模型。Kettle的執(zhí)行分為兩個(gè)層次:Job和Transformation。這兩個(gè)層次的最主要的在于數(shù)據(jù)的傳遞和運(yùn)行方式。(1)Transformation:定義對數(shù)據(jù)操作的容器,數(shù)據(jù)操作就是數(shù)據(jù)從輸入到輸出的一個(gè)過程,可以理解為比Job粒度更小一級的容器,我們將任務(wù)分解成Job,然后需要將Job分解成一個(gè)或多個(gè)Transformation,每個(gè)Transformation只完成一部分工作。(2)Step:是Transformation內(nèi)部的最小單元,每一個(gè)Step完成一個(gè)特定的功能。(3)Job:負(fù)責(zé)將Transformation組織在一起進(jìn)而完成某一工作,通常我們需要把一個(gè)大的任務(wù)分解成幾個(gè)邏輯上隔離的Job,當(dāng)這幾個(gè)Job都完成了,也就說明這項(xiàng)任務(wù)完成了。(4)JobEntry:JobEntry是Job內(nèi)部的執(zhí)行單元,每一個(gè)JobEntry用于實(shí)現(xiàn)特定的功能,如:驗(yàn)證表是否存在,發(fā)送郵件等??梢酝ㄟ^Job來執(zhí)行另一個(gè)Job或者Transformation,也就是說Transformation和Job都可以作為JobEntry。(5)Hop:用于在Transformation中連接Step,或者在Job中連接JobEntry,是一個(gè)數(shù)據(jù)流的圖形化表示。在Kettle中Job中的JobEntry是串行執(zhí)行的,故Job中必須有一個(gè)Start的JobEntry;Transformation中的Step是并行執(zhí)行的。1.2.3數(shù)據(jù)預(yù)處理的工具介紹Python數(shù)據(jù)采集與預(yù)處理常用庫331.3Python數(shù)據(jù)采集與預(yù)處理常用庫Python作為一門高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮木幊陶Z言,最大的優(yōu)勢之一就是其具有腳本語言中最豐富和強(qiáng)大的類庫,從簡單的字符串處理,到復(fù)雜的3D圖形繪制,這些類庫覆蓋了絕大部分應(yīng)用場景,使得Python具有良好的可擴(kuò)展性。本節(jié)就將介紹Python在數(shù)據(jù)采集和預(yù)處理方面的庫。1.3.1請求庫用于實(shí)現(xiàn)HTTP請求操作1①urllib:一系列用于操作URL的功能。2②requests:基于urllib編寫的,阻塞式HTTP請求庫,發(fā)出一個(gè)請求,一直等待服務(wù)器響應(yīng)后,程序才能進(jìn)行下一步處理。3③selenium:自動(dòng)化測試工具。一個(gè)調(diào)用瀏覽器的driver,通過這個(gè)庫你可以直接調(diào)用瀏覽器完成某些操作,如輸入驗(yàn)證碼。4④aiohttp:基于asyncio實(shí)現(xiàn)的HTTP框架。異步操作借助于async/await關(guān)鍵字,使用異步庫進(jìn)行數(shù)據(jù)抓取,可以大大提高效率。1.3.2解析庫用于從網(wǎng)頁中提取信息1①beautifulsoup:html和XML的解析,從網(wǎng)頁中提取信息,同時(shí)擁有強(qiáng)大的API和多樣解析方式。2②pyquery:jQuery的Python實(shí)現(xiàn),能夠以jQuery的語法來操作解析HTML文檔,易用性和解析速度都很好。3③lxml:支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。4④tesserocr:一個(gè)OCR庫,在遇到驗(yàn)證碼(圖形驗(yàn)證碼為主)的時(shí)候,可直接用OCR進(jìn)行識別。1.3.3數(shù)據(jù)存儲(chǔ)庫和本地?cái)?shù)據(jù)庫進(jìn)行存儲(chǔ)交互1①pymysql:一個(gè)純Python實(shí)現(xiàn)的MySQL客戶端操作庫。2②pymongo:一個(gè)用于直接連接MongoDB數(shù)據(jù)庫進(jìn)行查詢操作的庫。3③redisdump:一個(gè)用于redis數(shù)據(jù)導(dǎo)入/導(dǎo)出的工具?;赗uby實(shí)現(xiàn)。1.3.4處理庫這些庫在Python中根據(jù)數(shù)據(jù)分析的需求,用來對數(shù)據(jù)進(jìn)行一系列處理操作,如數(shù)組運(yùn)算,以DataFrame形式來批量處理數(shù)據(jù),或是將現(xiàn)有數(shù)據(jù)進(jìn)行繪圖操作。①Numpy:NumPy(NumericalPython)是Python的一個(gè)擴(kuò)展程序庫,支持大量的數(shù)組與矩陣運(yùn)算,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。NumPy作為一個(gè)運(yùn)行速度非??斓臄?shù)學(xué)庫,包含:一個(gè)強(qiáng)大的N維數(shù)組對象ndarray;廣播功能函數(shù);整合C/C++/Fortran代碼的工具;線性代數(shù)、傅里葉變換、隨機(jī)數(shù)生成等功能。②Matplotlib:Matplotlib是Python的繪圖庫。它可與NumPy一起使用,也可以和圖形工具包一起使用,提供了一種有效的MatLab開源替代方案。Matplotlib是一個(gè)Python的2D繪圖庫,以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質(zhì)量級別的圖形,可以在Python腳本、Python和IPythonshell、網(wǎng)絡(luò)應(yīng)用服務(wù)器和各種圖形用戶界面工具包中使用。③Pandas:Pandas是建立在Numpy之上用于數(shù)據(jù)操縱和分析的模塊,Pandas允許為行和列設(shè)定標(biāo)簽;可以針對時(shí)間序列數(shù)據(jù)計(jì)算滾動(dòng)統(tǒng)計(jì)學(xué)指標(biāo);能處理NaN值;能夠?qū)⒉煌臄?shù)據(jù)集合并在一起。Pandas為Python帶來了兩種新的數(shù)據(jù)結(jié)構(gòu):PandasSeries和PandasDataFrame,借助這兩種數(shù)據(jù)結(jié)構(gòu),我們能夠輕松直觀地處理帶標(biāo)簽數(shù)據(jù)和關(guān)系數(shù)據(jù)。Pandasseries是像數(shù)組一樣的一維對象,同Numpyarray之間的主要區(qū)別之一是可以為Pandasseries中的每個(gè)元素分配索引標(biāo)簽;另一個(gè)區(qū)別是Pandasseries可以同時(shí)存儲(chǔ)不同類型的數(shù)據(jù)。PandasDataFrame是具有帶標(biāo)簽的行和列的二維數(shù)據(jù)結(jié)構(gòu),類似于電子表格。④SciPy:SciPy是基于NumPy開發(fā)的高級模塊,實(shí)現(xiàn)了許多算法和函數(shù),用于解決科學(xué)計(jì)算中的一些標(biāo)準(zhǔn)問題。例如數(shù)值積分和微分方程求解,擴(kuò)展的矩陣計(jì)算,最優(yōu)化,概率分布和統(tǒng)計(jì)函數(shù),甚至包括信號處理等。1.3.4處理庫對于較小規(guī)模的爬蟲,Python自帶的類庫便可滿足需求。但當(dāng)代碼量增大、異步處理等問題出現(xiàn)時(shí)常使用Python提供的一些爬蟲框架,不僅便于管理及拓展,同時(shí)只需編寫少量代碼并調(diào)用所提供的接口即可實(shí)現(xiàn)需求。以下為Python常用爬蟲框架:(1)ScrapyScrapy是一個(gè)爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)的應(yīng)用框架。可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。它集成了包括高性能異步下載、持久化等功能,提供了一系列在spider之間共享的可復(fù)用的過濾器(即ItemLoaders),對智能處理爬取數(shù)據(jù)提供了內(nèi)置支持,具有很強(qiáng)的項(xiàng)目通用性。(2)PyspiderPyspider是一個(gè)用Python實(shí)現(xiàn)的功能強(qiáng)大的網(wǎng)絡(luò)爬蟲框架,帶有強(qiáng)大的WebUI,支持腳本編輯器,任務(wù)監(jiān)視器,項(xiàng)目管理器以及結(jié)果查看器。能在瀏覽器界面上進(jìn)行腳本的編寫,功能的調(diào)度和爬取結(jié)果的實(shí)時(shí)查看,后端使用常用的數(shù)據(jù)庫進(jìn)行爬取結(jié)果的存儲(chǔ),還能設(shè)置定時(shí)爬取任務(wù)與任務(wù)優(yōu)先級等。(3)CrawleyCrawley可以高速爬取對應(yīng)網(wǎng)站的內(nèi)容,支持關(guān)系和非關(guān)系數(shù)據(jù)庫,數(shù)據(jù)可以導(dǎo)出為JSON、XML等。(4)PortiaPortia是一個(gè)開源可視化爬蟲工具,基于Scrapy內(nèi)核,支持動(dòng)態(tài)匹配相同模板的內(nèi)容。在不需要任何專業(yè)開發(fā)知識的情況下高速爬取對應(yīng)網(wǎng)站的內(nèi)容,支持關(guān)系和非關(guān)系數(shù)據(jù)庫,數(shù)據(jù)可以導(dǎo)出為JSON、XML等形式。(5)GrabGrab是一個(gè)用于構(gòu)建Web刮板的Python框架。借助Grab,您可以構(gòu)建各種復(fù)雜的網(wǎng)頁抓取工具,從簡單的5行腳本到處理數(shù)百萬個(gè)網(wǎng)頁的復(fù)雜異步網(wǎng)站抓取工具。Grab提供一個(gè)API用于執(zhí)行網(wǎng)絡(luò)請求和處理接收到的內(nèi)容,例如與HTML文檔的DOM樹進(jìn)行交互。第三章BUSINESSPLANFORWORK謝謝觀看“Python數(shù)據(jù)采集與預(yù)處理第二章數(shù)據(jù)采集與存儲(chǔ)“Python數(shù)據(jù)采集與預(yù)處理目錄CONTENTS數(shù)據(jù)類型與操作2.1網(wǎng)頁抓取:爬蟲基礎(chǔ)2.2解析庫的使用2.3數(shù)據(jù)存儲(chǔ)2.4學(xué)習(xí)目標(biāo)掌握J(rèn)SON、CSV基礎(chǔ)數(shù)據(jù)的定義格式了解爬蟲的基本流程了解什么是HTTP掌握網(wǎng)頁的基本元素掌握并熟練使用urllib庫掌握并熟練使用requests庫掌握并熟練使用正則表達(dá)式提取數(shù)據(jù)了解什么是代理網(wǎng)絡(luò)掌握并熟練使用解析庫BeautifulSoup、XPath解析網(wǎng)頁掌握并熟練使用JSON、CSV格式的讀取、存儲(chǔ)及數(shù)據(jù)在MySQL數(shù)據(jù)庫的操作數(shù)據(jù)類型與操作01經(jīng)常使用AJAX配合JSON來完成任務(wù),比和XML配合容易的多,速度快。如果使用XML,需要讀取XML文檔,然后用XMLDOM來遍歷文檔并讀取值并存儲(chǔ)在變量中。但如果使用JSON,則只需讀取JSON字符串。CSV是一種純文本文件格式,用于存儲(chǔ)表格數(shù)據(jù)(例如電子表格或數(shù)據(jù)庫)。它本質(zhì)上存儲(chǔ)的表格數(shù)據(jù)包括數(shù)字和純文本。大多數(shù)在線服務(wù)使用戶可以自由地將網(wǎng)站中的數(shù)據(jù)導(dǎo)出為CSV文件格式。CSV文件通常會(huì)在Excel中打開,同時(shí)在參加編程馬拉松或Kaggle比賽時(shí),通常會(huì)提供這種文件格式的語料。從這使用范圍方面來看,CSV更加深得程序員的喜愛。2.1數(shù)據(jù)類型與操作2.1.1數(shù)據(jù)類型介紹JSON(JavaScriptObjectNotation)是一種輕量級的數(shù)據(jù)交換格式。它基于JavaScript的一個(gè)子集,也就是JavaScript對象標(biāo)記(1)對象:對象在JavaScript中是使用花括號{}包裹起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為{key1:value1,key2:value2,...}的鍵值對結(jié)構(gòu)。在面向?qū)ο蟮恼Z言中,key為對象屬性,value為對應(yīng)的值。鍵名可以使用整數(shù)和字符串來表示。值的類型可以是任意類型。(2)數(shù)組:數(shù)組在JavaScript中是方括號[]包裹起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為[“java”,“javascript”,“vb”,...]的索引結(jié)構(gòu)。在JavaScript中,數(shù)組是一種比較特殊的類型,它也可以像對象那樣使用鍵值對,但還是索引用的多。同樣的,值的類型可以是任意類型。2.1數(shù)據(jù)類型與操作2.1.2JSON格式數(shù)據(jù)2.1數(shù)據(jù)類型與操作{"programmers":[{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}],"authors":[{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}],"musicians":[{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}]}在不同的主條目(programmers、authors和musicians)之間,記錄中實(shí)際的名稱/值對可以不一樣。JSON是完全動(dòng)態(tài)的,允許在JSON結(jié)構(gòu)的中間改變表示數(shù)據(jù)的方式。逗號分隔值(Comma-SeparatedValues,CSV),有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?,其文件以純文本形式存?chǔ)表格數(shù)據(jù)(數(shù)字和文本)。純文本意味著該文件是一個(gè)字符序列,不含必須像二進(jìn)制數(shù)字那樣被解讀的數(shù)據(jù)。CSV文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔。每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或制表符。通常,所有記錄都有完全相同的字段序列。通常都是純文本文件。CSV的格式規(guī)范(格式規(guī)范定義來源于RFC4180),一共七點(diǎn):2.1數(shù)據(jù)類型與操作2.1.3CSV格式數(shù)據(jù)(1)每一行記錄位于一個(gè)單獨(dú)的行上,用回車換行符CRLF(也就是\r\n)分割。(2)文件中的最后一行記錄可以有結(jié)尾回車換行符,也可以沒有。(3)第一行可以存在一個(gè)可選的標(biāo)題頭,格式和普通記錄行的格式一樣。標(biāo)題頭要包含文件記錄字段對應(yīng)的名稱,應(yīng)該有和記錄字段一樣的數(shù)量。(在MIME類型中,標(biāo)題頭行的存在與否可以通過MIMEtype中的可選“header”參數(shù)指明)。(4)在標(biāo)題頭行和普通行每行記錄中,會(huì)存在一個(gè)或多個(gè)由半角逗號(,)分隔的字段。整個(gè)文件中每行應(yīng)包含相同數(shù)量的字段,空格也是字段的一部分,不應(yīng)被忽略。每一行記錄最后一個(gè)字段后不能跟逗號(通常用逗號分隔,也有其他字符分隔的CSV,需事先約定)。(5)每個(gè)字段可用也可不用半角雙引號(’’)括起來(不過有些程序,如Microsoft的Excel就根本不用雙引號)。如果字段沒有用引號括起來,那么該字段內(nèi)部不能出現(xiàn)雙引號字符。(6)字段中若包含回車換行符、雙引號或者逗號,該字段需要用雙引號括起來。(7)如果用雙引號括字段,那么出現(xiàn)在字段內(nèi)的雙引號前必須加一個(gè)雙引號進(jìn)行轉(zhuǎn)義。2.1數(shù)據(jù)類型與操作網(wǎng)頁抓?。号老x基礎(chǔ)02網(wǎng)絡(luò)爬蟲(又稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人),是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。網(wǎng)絡(luò)爬蟲按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),大致可以分為以下幾種類型:通用網(wǎng)絡(luò)爬蟲(GeneralPurposeWebCrawler)、聚焦網(wǎng)絡(luò)爬蟲(FocusedWebCrawler)、增量式網(wǎng)絡(luò)爬蟲(IncrementalWebCrawler)、深層網(wǎng)絡(luò)爬蟲(DeepWebCrawler)。

實(shí)際的網(wǎng)絡(luò)爬蟲系統(tǒng)通常是幾種爬蟲技術(shù)相結(jié)合實(shí)現(xiàn)的。2.2網(wǎng)頁抓取:爬蟲基礎(chǔ)2.2.1爬蟲基本流程介紹0105040203通用網(wǎng)絡(luò)爬蟲獲取初始URL。初始的URL地址可以由人為地指定,也可以由用戶指定的某個(gè)或幾個(gè)初始爬蟲網(wǎng)頁決定。根據(jù)初始的URL爬取頁面并獲得新的URL。獲得初始的URL地址之后,首先需要爬取對應(yīng)URL地址中的網(wǎng)頁,爬取了對應(yīng)的URL地址中的網(wǎng)頁后,將網(wǎng)頁存儲(chǔ)到原始數(shù)據(jù)庫中,并且在爬取網(wǎng)頁的同時(shí),發(fā)現(xiàn)新的URL地址,同時(shí)將已經(jīng)爬取的URL地址存放到一個(gè)URL列表中保存,用于去重以及判斷爬取的進(jìn)程。將新的URL放到URL隊(duì)列中。在第2步中,獲取到了下一個(gè)新的需要爬取的URL地址后,會(huì)將新的URL地址放到URL隊(duì)列中。從URL隊(duì)列中讀取新的URL,并依據(jù)新的URL爬取網(wǎng)頁,同時(shí)從新網(wǎng)頁中獲取URL,并存放上述爬取過程。滿足爬蟲系統(tǒng)設(shè)置的停止條件時(shí),停止爬取。在編寫爬蟲的時(shí)候,一般會(huì)設(shè)置相應(yīng)的停止條件。2.2網(wǎng)頁抓取:爬蟲基礎(chǔ)聚焦網(wǎng)絡(luò)爬蟲04030201從新的URL中過濾掉與爬取目標(biāo)無關(guān)的鏈接。因?yàn)榫劢咕W(wǎng)絡(luò)爬蟲對網(wǎng)頁的爬取是有目的性的,所以與目標(biāo)無關(guān)的網(wǎng)頁將會(huì)被過濾掉。同時(shí),也需要將已爬取的URL地址存放到一個(gè)URL列表中,用于去重和判斷爬取的進(jìn)程。根據(jù)初始的URL爬取頁面,并獲取新的URL。獲取初始URL。爬取目標(biāo)的定義和描述。在聚焦網(wǎng)絡(luò)爬蟲中,我們首先要依據(jù)爬取需求定義好該聚焦網(wǎng)絡(luò)爬蟲爬取的目標(biāo),以及進(jìn)行相關(guān)的描述。2.2網(wǎng)頁抓?。号老x基礎(chǔ)聚焦網(wǎng)絡(luò)爬蟲08070605滿足系統(tǒng)中設(shè)置的停止條件時(shí),或無法獲取新的URL地址時(shí),則停止爬蟲行為。從下一步要爬取的URL地址中,讀取新的URL,然后依據(jù)新的URL地址爬取網(wǎng)頁,并重復(fù)上述爬取過程。從URL隊(duì)列中,根據(jù)搜索算法,確定URL的優(yōu)先級,并確定下一步要爬取的URL地址。在通用網(wǎng)絡(luò)爬蟲中,下一步爬取哪些URL地址,是不太重要的,但是在聚焦網(wǎng)絡(luò)爬蟲中,不同的爬取順序,可能導(dǎo)致爬蟲的執(zhí)行效率不同,所以,我們需要依據(jù)搜索策略來確定下一步需要爬取哪些URL地址。將過濾后的鏈接放到URL隊(duì)列中。2.2網(wǎng)頁抓取:爬蟲基礎(chǔ)

超文本傳輸協(xié)議(HyperTextTransferProtocol,HTTP),

是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。它不僅保證計(jì)算機(jī)正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。2.2網(wǎng)頁抓取:爬蟲基礎(chǔ)2.2.2HTTP基本原理2.2網(wǎng)頁抓?。号老x基礎(chǔ)HTTP協(xié)議采用URL作為定位網(wǎng)絡(luò)資源的標(biāo)識,URL格式如下:http://host[:port][path]host:合法的Internet主機(jī)域名或IP地址port:端口號,缺省端口為80path:請求資源的路徑HTTPS(HyperTextTransferProtocoloverSecureSocketLayer):超文本傳輸安全協(xié)議。通俗講HTTPS就是HTTP的安全版,通過它傳輸?shù)膬?nèi)容都是經(jīng)過SSL加密的。爬蟲抓取的頁面通常都是HTTP或HTTPS協(xié)議的。當(dāng)我們打開瀏覽器,從一個(gè)站點(diǎn)點(diǎn)擊鏈接進(jìn)入下一個(gè)站點(diǎn),就相當(dāng)于從超文本的一個(gè)空間進(jìn)入另一個(gè)空間,瀏覽器再將其解析出來,就是我們看到的頁面了。HTTP是一個(gè)應(yīng)用層協(xié)議,是我們想從服務(wù)器端獲取信息的最直觀的請求。比如,在爬蟲中使用的<urllib模塊>,<requests模塊>等都是封裝了HTTP協(xié)議,作為一個(gè)HTTP客戶端實(shí)現(xiàn)了博文,圖片,視頻等信息源的下載。但是HTTP也不是直接就可以用的,它的請求是建立在一些底層協(xié)議的基礎(chǔ)上完成的。如TCP/IP協(xié)議棧中,HTTP需要TCP的三次握手連接成功后才能向服務(wù)器發(fā)起請求。當(dāng)然,如果是HTTPS的話,還需要TSL和SSL安全層。2.2網(wǎng)頁抓?。号老x基礎(chǔ)互聯(lián)網(wǎng)的關(guān)鍵技術(shù)就是TCP/IP協(xié)議。兩臺計(jì)算機(jī)之間的通信是通過TCP/IP協(xié)議在因特網(wǎng)上進(jìn)行的。實(shí)際上這個(gè)是兩個(gè)協(xié)議:TCP(TransmissionControlProtocol,傳輸控制協(xié)議)和IP(InternetProtocol,網(wǎng)際協(xié)議)。TCP/IP就是TCP和IP兩個(gè)協(xié)議在一起協(xié)同工作,有上下層次的關(guān)系。TCP負(fù)責(zé)應(yīng)用軟件(比如你的瀏覽器)和網(wǎng)絡(luò)軟件之間的通信。IP負(fù)責(zé)計(jì)算機(jī)之間的通信。TCP負(fù)責(zé)將數(shù)據(jù)分割并裝入IP包,IP負(fù)責(zé)將包發(fā)送至接受者,傳輸過程要經(jīng)IP路由器負(fù)責(zé)根據(jù)通信量、網(wǎng)絡(luò)中的錯(cuò)誤或者其他參數(shù)來進(jìn)行正確地尋址,然后在它們到達(dá)的時(shí)候重新組合它們。IP:計(jì)算機(jī)之間的通信。IP協(xié)議是計(jì)算機(jī)用來相互識別的通信的一種機(jī)制,每臺計(jì)算機(jī)都有一個(gè)IP。用來在internet上標(biāo)識這臺計(jì)算機(jī)。IP負(fù)責(zé)在因特網(wǎng)上發(fā)送和接收數(shù)據(jù)包。通過IP,消息(或者其他數(shù)據(jù))被分割為小的獨(dú)立的包,并通過因特網(wǎng)在計(jì)算機(jī)之間傳送。IP負(fù)責(zé)將每個(gè)包路由至它的目的地。IP協(xié)議僅僅是允許計(jì)算機(jī)相互發(fā)消息,但它并不檢查消息是否以發(fā)送的次序到達(dá)而且沒有損壞(只檢查關(guān)鍵的頭數(shù)據(jù))。為了提供消息檢驗(yàn)功能,直接在IP協(xié)議上設(shè)計(jì)了傳輸控制協(xié)議TCP。2.2網(wǎng)頁抓?。号老x基礎(chǔ)HTTP工作過程,一次HTTP操作稱為一個(gè)事務(wù),其工作整個(gè)過程如下:(1)地址解析。如用客戶端瀏覽器請求這個(gè)頁面::8080/index.html從中分解出協(xié)議名、主機(jī)名、端口、對象路徑等部分,對于我們的這個(gè)地址,解析得到的結(jié)果如下:①協(xié)議名:http②主機(jī)名:③端口:8080④對象路徑:/index.htm在這一步,需要域名系統(tǒng)DNS解析域名,得主機(jī)的IP地址。(2)封裝HTTP請求數(shù)據(jù)包。把以上部分結(jié)合本機(jī)自己的信息,封裝成一個(gè)HTTP請求數(shù)據(jù)包2.2網(wǎng)頁抓取:爬蟲基礎(chǔ)3)封裝成TCP包,建立TCP連接(TCP的三次握手)。在HTTP工作開始之前,客戶機(jī)(Web瀏覽器)首先要通過網(wǎng)絡(luò)與服務(wù)器建立連接,該連接是通過TCP來完成的,該協(xié)議與IP協(xié)議共同構(gòu)建

溫馨提示

  • 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

提交評論