版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一章數(shù)據(jù)采集與預(yù)處理概述“數(shù)據(jù)采集與預(yù)處理目錄CONTENTS數(shù)據(jù)采集簡(jiǎn)介1.1數(shù)據(jù)預(yù)處理簡(jiǎn)介1.2數(shù)據(jù)采集與預(yù)處理常用庫(kù)1.3學(xué)習(xí)目標(biāo)了解數(shù)據(jù)采集的工具與爬蟲(chóng)原理了解數(shù)據(jù)預(yù)處理的目的與意義了解數(shù)據(jù)采集與預(yù)處理的常用三方庫(kù)有哪些了解爬蟲(chóng)的分類(lèi)與基本流程了解數(shù)據(jù)預(yù)處理的流程與工具數(shù)據(jù)采集簡(jiǎn)介111.1數(shù)據(jù)采集簡(jiǎn)介數(shù)據(jù)據(jù)采集(Dataacquisition,DAQ)又稱(chēng)數(shù)據(jù)獲取。所采集數(shù)據(jù)涵蓋了從傳感器或其它待測(cè)設(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)化類(lèi)型的海量數(shù)據(jù)。
隨著海量網(wǎng)絡(luò)信息的增長(zhǎng)和互聯(lián)網(wǎng)技術(shù)的發(fā)展,人們對(duì)信息獲取的需求日益增加。對(duì)于這些錯(cuò)綜復(fù)雜的數(shù)據(jù),需通過(guò)數(shù)據(jù)采集技術(shù)收集所需要的數(shù)據(jù)。數(shù)據(jù)采集作為數(shù)據(jù)分析生命周期的重要一環(huán),是首先需要了解并掌握的技術(shù)。1.1.1數(shù)據(jù)采集的工具1.ApacheFlume2.Fluentd3.Logstash任何完備的數(shù)據(jù)平臺(tái),數(shù)據(jù)采集是必不可少的一步,在以大數(shù)據(jù)、云計(jì)算、人工智能為核心特征的數(shù)字化浪潮席卷全球,產(chǎn)生的數(shù)據(jù)量呈指數(shù)級(jí)增長(zhǎng)的背景下,大數(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)中定制各類(lèi)數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí)提供了數(shù)據(jù)的簡(jiǎn)單處理,并寫(xiě)到各種數(shù)據(jù)接收方(可定制)的能力。簡(jiǎn)單來(lái)說(shuō),F(xiàn)lume是一個(gè)實(shí)時(shí)采集日志的數(shù)據(jù)采集引擎。Flume提供了從console(控制臺(tái))、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)中,過(guò)程如圖所示。Flume被設(shè)計(jì)成一個(gè)分布式的管道架構(gòu),可以看作在數(shù)據(jù)源和目標(biāo)地之間是一個(gè)由Agent(代理,最小日志采集單位)構(gòu)成的網(wǎng)絡(luò),其支持?jǐn)?shù)據(jù)路由。是專(zhuān)用于收集日志的,它從數(shù)據(jù)發(fā)生器接收數(shù)據(jù),并將接收的數(shù)據(jù)以Flume的event格式傳遞給一個(gè)或者多個(gè)通道Channel。Flume提供多種數(shù)據(jù)接收的方式,例如Thrift,twitter1%等。1.Source是一種短暫的存儲(chǔ)容器,它將從Source處接收到的event格式的數(shù)據(jù)緩存起來(lái),直到它們被Sink消費(fèi)掉,它在Source和Sink間起著橋梁的作用,Channel是一個(gè)完整的事務(wù),這一點(diǎn)保證了數(shù)據(jù)在收發(fā)時(shí)候的一致性。并且它可以和任意數(shù)量的Source和Sink鏈接。支持的類(lèi)型有: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ù)的速度超過(guò)寫(xiě)入數(shù)據(jù),即收集信息達(dá)到峰值,這種情況下,F(xiàn)lume會(huì)在數(shù)據(jù)生產(chǎn)者和數(shù)據(jù)收容器間做出調(diào)整,保證其能夠在兩者之間提供平穩(wěn)的數(shù)據(jù)傳輸。Flume是可靠的,容錯(cuò)性高的,可升級(jí)的,易管理的,并且可定制的。除了日志信息,F(xiàn)lume也可以用來(lái)接入收集規(guī)模宏大的社交網(wǎng)絡(luò)或電商網(wǎng)站節(jié)點(diǎn)事件數(shù)據(jù),如Facebook、亞馬遜。1.1.1數(shù)據(jù)采集的工具Fluentd是一個(gè)完全免費(fèi)且開(kāi)源的日志收集器,用于統(tǒng)一數(shù)據(jù)收集和使用,以便更好地使用和理解數(shù)據(jù)。Fluentd是云端原生計(jì)算基金會(huì)(CloudNativeComputingFoundation,CNCF)的成員項(xiàng)目之一,所有組件均可在Apache2許可下獲得,它同時(shí)也提供高可靠性和高擴(kuò)展性。Fluentd的部署與Flume類(lèi)似,其構(gòu)成如圖所示,Input/Buffer/Output非常類(lèi)似于Flume的Source/Channel/Sink。①I(mǎi)nput:輸入。負(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)存等不同類(lè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)一日志記錄層)收集,過(guò)濾,緩沖和輸出日志。使用JSON進(jìn)行下游數(shù)據(jù)處理要容易得多,因?yàn)樗哂凶銐虻慕Y(jié)構(gòu)可訪(fǎng)問(wèn),同時(shí)保留了靈活的模式。這使得Fluentd善于解決數(shù)據(jù)流流向混亂的問(wèn)題,通過(guò)在兩者之間提供統(tǒng)一的日志記錄層,從后端系統(tǒng)中分離數(shù)據(jù)源。②可插拔架構(gòu)。Fluentd具有靈活的插件系統(tǒng),允許社區(qū)擴(kuò)展其功能。同時(shí)它的可插拔架構(gòu),支持各種不同種類(lèi)和格式的數(shù)據(jù)源和數(shù)據(jù)輸出。通過(guò)利用插件可以更好地利用日志。Fluentd的優(yōu)點(diǎn)③少量系統(tǒng)資源。Fluentd用C語(yǔ)言和Ruby結(jié)合編寫(xiě),并且只需要很少的系統(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公司收購(gòu)。Logstash是一個(gè)免費(fèi)且開(kāi)源的數(shù)據(jù)收集引擎,具備實(shí)時(shí)管道處理能力。能夠從多個(gè)來(lái)源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到所選擇的目的地。簡(jiǎn)單來(lái)說(shuō),Logstash就是一根具備實(shí)時(shí)數(shù)據(jù)傳輸能力的管道,負(fù)責(zé)將數(shù)據(jù)信息從管道的輸入端傳輸?shù)焦艿赖妮敵龆?;與此同時(shí)這根管道還可以讓你根據(jù)自己的需求在中間加上濾網(wǎng),Logstash提供了很多功能強(qiáng)大的濾網(wǎng)以滿(mǎn)足你的各種應(yīng)用場(chǎng)景。
Logstash通常用做日志采集設(shè)備,如在著名的數(shù)據(jù)棧ELK(Elasticsearch+Logstash+Kibana)中作為日志收集器使用。如圖所示,Elasticsearch是搜索和分析引擎;Logstash作為服務(wù)器端數(shù)據(jù)處理管道,它同時(shí)從多個(gè)源中提取數(shù)據(jù)并轉(zhuǎn)換,然后將其發(fā)送到類(lèi)似Elasticsearch的“存儲(chǔ)”中;Beats是一些輕量級(jí)的數(shù)據(jù)攝入器的組合,用于將數(shù)據(jù)發(fā)送到Elasticsearch或發(fā)向Logstash做進(jìn)一步的處理,并最后導(dǎo)入到Elasticsearch;Kibana允許用戶(hù)在Elasticsearch中使用圖表將數(shù)據(jù)可視化。Logstash作為數(shù)據(jù)源與數(shù)據(jù)存儲(chǔ)分析工具之間的橋梁,結(jié)合ElasticSearch以及Kibana,能夠極大方便數(shù)據(jù)的處理與分析。1.1.1數(shù)據(jù)采集的工具
如圖所示,Logstash的數(shù)據(jù)處理過(guò)程主要包括:Inputs,F(xiàn)ilters,Outputs三部分(其中Inputs和Outputs是必選項(xiàng),F(xiàn)ilters是可選項(xiàng)),另外在Inputs和Outputs中可以使用Codecs(編碼解碼器)對(duì)數(shù)據(jù)格式進(jìn)行處理。這四個(gè)部分均以插件形式存在,用戶(hù)通過(guò)定義pipeline配置文件,設(shè)置需要使用的input,filter,output,codec插件,以實(shí)現(xiàn)特定的數(shù)據(jù)采集,數(shù)據(jù)處理,數(shù)據(jù)輸出等功能。此外,數(shù)據(jù)往往以各種各樣的形式,或分散或集中地存在于很多系統(tǒng)中。如圖所示,Logstash支持各種輸入選擇,可以同時(shí)從眾多常用來(lái)源捕捉事件。能夠以連續(xù)的流式傳輸方式,輕松地從日志、指標(biāo)、Web應(yīng)用、數(shù)據(jù)存儲(chǔ)以及各AWS服務(wù)中采集數(shù)據(jù)。1.1.1數(shù)據(jù)采集的工具
如圖所示,Logstash的數(shù)據(jù)處理過(guò)程主要包括:Inputs,F(xiàn)ilters,Outputs三部分(其中Inputs和Outputs是必選項(xiàng),F(xiàn)ilters是可選項(xiàng)),另外在Inputs和Outputs中可以使用Codecs(編碼解碼器)對(duì)數(shù)據(jù)格式進(jìn)行處理。這四個(gè)部分均以插件形式存在,用戶(hù)通過(guò)定義pipeline配置文件,設(shè)置需要使用的input,filter,output,codec插件,以實(shí)現(xiàn)特定的數(shù)據(jù)采集,數(shù)據(jù)處理,數(shù)據(jù)輸出等功能。此外,數(shù)據(jù)往往以各種各樣的形式,或分散或集中地存在于很多系統(tǒng)中。如圖所示,Logstash支持各種輸入選擇,可以同時(shí)從眾多常用來(lái)源捕捉事件。能夠以連續(xù)的流式傳輸方式,輕松地從日志、指標(biāo)、Web應(yīng)用、數(shù)據(jù)存儲(chǔ)以及各AWS服務(wù)中采集數(shù)據(jù)。1.1.1數(shù)據(jù)采集的工具
數(shù)據(jù)從源傳輸?shù)酱鎯?chǔ)庫(kù)的過(guò)程中,Logstash過(guò)濾器能夠解析各個(gè)事件,識(shí)別已命名的字段以構(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ù)匿名化,完全排除敏感字段。④簡(jiǎn)化整體處理,不受數(shù)據(jù)源、格式或架構(gòu)的影響。1.1.1數(shù)據(jù)采集的工具
Logstash提供眾多輸出選擇,可以將數(shù)據(jù)發(fā)送到您要指定的地方,并且能夠靈活地解鎖眾多下游用例。Elasticsearch是我們的首選輸出方向,能夠?yàn)槲覀兊乃阉骱头治鰩?lái)無(wú)限可能。但它并非唯一選擇,如圖所示,Logstash提供眾多輸出選擇,可以將數(shù)據(jù)發(fā)送到用戶(hù)指定的地方,包括syslog(系統(tǒng)日志)和statsd(一種監(jiān)控?cái)?shù)據(jù)后端存儲(chǔ)開(kāi)發(fā)的前端網(wǎng)絡(luò)應(yīng)用)等。1.1.1數(shù)據(jù)采集的工具①可擴(kuò)展。Logstash采用可插拔框架,通過(guò)200多個(gè)插件,Logstash可以接受幾乎各種各樣的數(shù)據(jù)。包括日志、網(wǎng)絡(luò)請(qǐng)求、關(guān)系型數(shù)據(jù)庫(kù)、傳感器或物聯(lián)網(wǎng)等。②可靠性與安全性。Logstash構(gòu)建了可信的交付管道:假如Logstash節(jié)點(diǎn)發(fā)生故障,Logstash會(huì)通過(guò)持久化隊(duì)列來(lái)保證至少將運(yùn)行中的事件送達(dá)一次。那些未被正常處理的消息會(huì)被送往死信隊(duì)列(deadletterqueue)以便做進(jìn)一步處理。由于具備了這種吸收吞吐量的能力,無(wú)需采用額外的隊(duì)列層,Logstash就能平穩(wěn)度過(guò)高峰期。Logstash的優(yōu)點(diǎn)③可監(jiān)視。Logstash管道通常服務(wù)于多種用途,會(huì)變得非常復(fù)雜,因此充分了解管道性能、可用性和瓶頸非常重要。借助監(jiān)測(cè)和管道查看器功能,可以輕松觀察和研究處于活動(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è)過(guò)程保證了數(shù)據(jù)的可靠性。
屬性FlumeLogstashFluentd內(nèi)存占用大大小性能高高高語(yǔ)言JavaJRubyC和Ruby框架規(guī)模重量級(jí)重量級(jí)輕量級(jí)插件支持多較多多擴(kuò)展性一般社區(qū)活躍度高一般集群分布式單節(jié)點(diǎn)單節(jié)點(diǎn)
從表中的對(duì)比以及前文中所描述的各個(gè)工具的特點(diǎn),可以看出來(lái)不同組件之間有著不同的優(yōu)勢(shì)和劣勢(shì),總結(jié)以下特點(diǎn): 2.在數(shù)據(jù)預(yù)處理方面,Logstash屬于ELK組件之一,一般會(huì)同ELK其它組件一起配合使用,所以其更注重于數(shù)據(jù)的預(yù)處理。 3.在插件和可擴(kuò)展性方面Logstash有比Flume豐富的插件可選,所以在擴(kuò)展功能上比Flume全面,而且對(duì)比與Fluentd而言L(fǎng)ogstash也更加優(yōu)秀,相比起來(lái)Fluentd插件質(zhì)量不夠好,第三方插件大多是使用者根據(jù)自己業(yè)務(wù)需要編寫(xiě),只為實(shí)現(xiàn)特定需求,沒(méi)有足夠的泛化,也沒(méi)有足夠的測(cè)試和性能評(píng)估。 4.在性能和內(nèi)存占用方面,F(xiàn)luentd雖然有高性能這一項(xiàng),可能相對(duì)于logstash要好很多,但在實(shí)際使用中,解析->轉(zhuǎn)換->入庫(kù)整個(gè)過(guò)程性能并不理想。此外Fluentd的性能既因?yàn)镽uby消耗過(guò)多計(jì)算和內(nèi)存資源,又因?yàn)镽uby難以受益于多核,所以對(duì)數(shù)據(jù)吞吐量大的業(yè)務(wù)來(lái)說(shuō)它是很昂貴的。1.1.1數(shù)據(jù)采集的工具
Splunk作為一個(gè)不開(kāi)源的商業(yè)化大數(shù)據(jù)平臺(tái),是一個(gè)功能完備的企業(yè)級(jí)產(chǎn)品。提供完整的數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析和處理,數(shù)據(jù)展示的能力,包括命令行窗口,Web圖形界面接口和其他接口,權(quán)限控制,分布式管理服務(wù),數(shù)據(jù)索引,網(wǎng)絡(luò)端口監(jiān)聽(tīng),數(shù)據(jù)警報(bào),文件監(jiān)聽(tīng)等功能。使用Splunk處理計(jì)算機(jī)數(shù)據(jù),可以在幾分鐘內(nèi)收集、分析和實(shí)時(shí)獲取數(shù)據(jù),并從中快速找到系統(tǒng)異常問(wèn)題和調(diào)查安全事件,監(jiān)視端對(duì)端基礎(chǔ)結(jié)構(gòu),避免服務(wù)性能降低或中斷,以較低成本滿(mǎn)足合規(guī)性要求,關(guān)聯(lián)并分析跨越多個(gè)系統(tǒng)的復(fù)雜事件,從而獲取新層次的運(yùn)營(yíng)可見(jiàn)性以及IT和業(yè)務(wù)智能。Splunk主要包括以下三個(gè)角色。
①SearchHead。SearchHead為搜索頭,其負(fù)責(zé)數(shù)據(jù)的搜索和處理,提供搜索時(shí)的信息抽取。SearchHead的作用就是根據(jù)用戶(hù)的查詢(xún)請(qǐng)求查詢(xún)各個(gè)Indexers中的數(shù)據(jù),融合Indexers所返回的結(jié)果,統(tǒng)一顯示給用戶(hù),它只負(fù)責(zé)查詢(xún),不負(fù)責(zé)建立索引。
②Indexer。Indexer為索引器,其負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和索引。Indexer不僅負(fù)責(zé)為數(shù)據(jù)建立索引,還負(fù)責(zé)響應(yīng)查找索引數(shù)據(jù)的用戶(hù)請(qǐng)求,還有讀取數(shù)據(jù)和負(fù)責(zé)查找管理工作。雖然Indexer可以查找它本身的數(shù)據(jù),但是在多Indexer的集群中,可以通過(guò)SearchHead的組件來(lái)整合多個(gè)Indexer,對(duì)外提供統(tǒng)一的查詢(xún)管理和服務(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相對(duì)于其他兩種最重要的優(yōu)點(diǎn)是:它能夠極大地減少對(duì)主機(jī)硬件資源的占用。但是,它也做出了一定的犧牲,如不支持查詢(xún)和建立數(shù)據(jù)索引。
Splunk內(nèi)置了對(duì)Syslog,TCP/UDP,Spooling的支持,同時(shí),用戶(hù)可以通過(guò)開(kāi)發(fā)Input和ModularInput的方式來(lái)獲取特定的數(shù)據(jù)。在Splunk提供的軟件倉(cāng)庫(kù)里有很多成熟的數(shù)據(jù)采集應(yīng)用,如AWS,DBConnect等,可以方便的從云或者是數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)進(jìn)入Splunk的數(shù)據(jù)平臺(tái)做分析。
值得注意的是,SearchHead和Indexer都支持Cluster,即高可用,高擴(kuò)展。但是Splunk現(xiàn)在還沒(méi)有針對(duì)Forwarder的Cluster的功能。也就是說(shuō)如果有一臺(tái)Forwarder的機(jī)器出了故障,數(shù)據(jù)收集也會(huì)隨之中斷,并不能把正在運(yùn)行的數(shù)據(jù)采集任務(wù)Failover(故障轉(zhuǎn)移)到其它的Forwarder上。1.1.2爬蟲(chóng)的原理與分類(lèi)
網(wǎng)絡(luò)爬蟲(chóng)是按照一定的規(guī)則,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或腳本。網(wǎng)絡(luò)爬蟲(chóng)按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),可以分為以下四種類(lèi)型:通用網(wǎng)絡(luò)爬蟲(chóng)(GeneralPurposeWebCrawler)、
聚焦網(wǎng)絡(luò)爬蟲(chóng)(FocusedWebCrawler)、
增量式網(wǎng)絡(luò)爬蟲(chóng)(IncrementalWebCrawler)、
深層網(wǎng)絡(luò)爬蟲(chóng)(DeepWebCrawler)。
實(shí)際的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)通常是幾種爬蟲(chóng)技術(shù)相結(jié)合實(shí)現(xiàn)的。通用網(wǎng)絡(luò)爬蟲(chóng)
通用網(wǎng)絡(luò)爬蟲(chóng)的爬取對(duì)象從一些種子URL延展至整個(gè)Web,主要為門(mén)戶(hù)站點(diǎn)搜索引擎和大型Web服務(wù)提供商采集數(shù)據(jù)的服務(wù),有較高的應(yīng)用價(jià)值。這類(lèi)網(wǎng)絡(luò)爬蟲(chóng)爬取的范圍和數(shù)量巨大,對(duì)于爬取速度和存儲(chǔ)空間要求較高,對(duì)于爬取頁(yè)面的順序要求相對(duì)較低,同時(shí)由于待刷新的頁(yè)面過(guò)多,通常采用并行工作方式,但需要較長(zhǎng)時(shí)間才能刷新一次頁(yè)面。通用網(wǎng)絡(luò)爬蟲(chóng)的結(jié)構(gòu)大致可以分為頁(yè)面爬行模塊、頁(yè)面分析模塊、鏈接過(guò)濾模塊、頁(yè)面數(shù)據(jù)庫(kù)、URL隊(duì)列、初始URL集合幾個(gè)部分。如圖所示,通用網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn)原理及過(guò)程簡(jiǎn)要概括如下。1.1.2爬蟲(chóng)的原理與分類(lèi)爬取過(guò)程04030201從URL隊(duì)列中讀取新的URL,并依據(jù)新的URL爬取網(wǎng)頁(yè),同時(shí)從新網(wǎng)頁(yè)中獲取新URL,并重復(fù)上述的爬取過(guò)程。將新的URL放到URL隊(duì)列中。獲取了下一個(gè)新的URL地址之后,會(huì)將新的URL地址放到URL隊(duì)列中。
根據(jù)初始的URL爬取頁(yè)面并獲得新的URL。獲得初始的URL地址之后,首先需要爬取對(duì)應(yīng)URL地址中的網(wǎng)頁(yè),爬取了對(duì)應(yīng)的URL地址中的網(wǎng)頁(yè)后,將網(wǎng)頁(yè)存儲(chǔ)到原始數(shù)據(jù)庫(kù)中,并且在爬取網(wǎng)頁(yè)的同時(shí),發(fā)現(xiàn)新的URL地址,同時(shí)將已爬取的URL地址存放到一個(gè)URL列表中,用于去重和判斷爬取的進(jìn)程。獲取初始的URL。初始的URL地址可以由用戶(hù)人為地指定,也可以由用戶(hù)指定的某個(gè)或某幾個(gè)初始爬取網(wǎng)頁(yè)決定。1.1.2爬蟲(chóng)的原理與分類(lèi)05滿(mǎn)足爬蟲(chóng)系統(tǒng)設(shè)置的停止條件時(shí),停止爬取。在編寫(xiě)爬蟲(chóng)的時(shí)候,一般會(huì)設(shè)置相應(yīng)的停止條件。如果沒(méi)有設(shè)置停止條件,爬蟲(chóng)則會(huì)一直爬取下去,一直到無(wú)法獲取新的URL地址為止,若設(shè)置了停止條件,爬蟲(chóng)則會(huì)在停止條件滿(mǎn)足時(shí)停止爬取。為提高工作效率,通用網(wǎng)絡(luò)爬蟲(chóng)會(huì)采取一定的爬行策略。常用的爬行策略有:深度優(yōu)先策略、廣度優(yōu)先策略。A深度優(yōu)先策略:基本方法是按照深度由低到高的順序,依次訪(fǎng)問(wèn)下一級(jí)網(wǎng)頁(yè)鏈接,直到不能再深入為止。爬蟲(chóng)在完成一個(gè)爬行分支后返回到上一鏈接節(jié)點(diǎn)進(jìn)一步搜索其它鏈接。當(dāng)所有鏈接遍歷完后,爬行任務(wù)結(jié)束。這種策略比較適合垂直搜索或站內(nèi)搜索,但當(dāng)爬行頁(yè)面內(nèi)容層次較深的站點(diǎn)時(shí)會(huì)造成資源的巨大浪費(fèi)。B廣度優(yōu)先策略:此策略按照網(wǎng)頁(yè)內(nèi)容目錄層次深淺來(lái)爬行頁(yè)面,處于較淺目錄層次的頁(yè)面首先被爬行。當(dāng)同一層次中的頁(yè)面爬行完畢后,爬蟲(chóng)再深入下一層繼續(xù)爬行。這種策略能夠有效控制頁(yè)面的爬行深度,避免遇到一個(gè)無(wú)窮深層分支時(shí)無(wú)法結(jié)束爬行的問(wèn)題,無(wú)需存儲(chǔ)大量中間節(jié)點(diǎn),不足之處在于需較長(zhǎng)時(shí)間才能爬行到目錄層次較深的頁(yè)面。1.1.2爬蟲(chóng)的原理與分類(lèi)聚焦網(wǎng)絡(luò)爬蟲(chóng)
聚焦網(wǎng)絡(luò)爬蟲(chóng)是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)。相較于通用網(wǎng)絡(luò)爬蟲(chóng)而言,聚焦爬蟲(chóng)只需要爬行與主題相關(guān)的頁(yè)面,極大地節(jié)省了硬件和網(wǎng)絡(luò)資源,保存的頁(yè)面也由于數(shù)量少而更新快,還可以很好地滿(mǎn)足一些特定人群對(duì)特定領(lǐng)域信息的需求。由于聚焦網(wǎng)絡(luò)爬蟲(chóng)需要有目的地進(jìn)行爬取,所以相較于通用網(wǎng)絡(luò)爬蟲(chóng)而言,需要增加目標(biāo)的定義和過(guò)濾機(jī)制,具體來(lái)說(shuō),此時(shí),其執(zhí)行原理和過(guò)程需要比通用網(wǎng)絡(luò)爬蟲(chóng)多出三步,即目標(biāo)的定義、無(wú)關(guān)鏈接的過(guò)濾、下一步要爬取的URL地址的選取。如圖所示,聚焦網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn)原理及過(guò)程簡(jiǎn)要概括如下。1.1.2爬蟲(chóng)的原理與分類(lèi)①對(duì)爬取目標(biāo)的定義和描述。在聚焦網(wǎng)絡(luò)爬蟲(chóng)中,首先要依據(jù)爬取需求定義好該聚焦網(wǎng)絡(luò)爬蟲(chóng)爬取的目標(biāo),以及進(jìn)行相關(guān)的描述。②獲取初始的URL。③根據(jù)初始的URL爬取頁(yè)面,并獲得新的URL。④從新的URL中過(guò)濾掉與爬取目標(biāo)無(wú)關(guān)的鏈接。因?yàn)榫劢咕W(wǎng)絡(luò)爬蟲(chóng)對(duì)網(wǎng)頁(yè)的爬取是有目的性的,所以與目標(biāo)無(wú)關(guān)的網(wǎng)頁(yè)將會(huì)被過(guò)濾掉。同時(shí)需要將已爬取的URL地址存放到一個(gè)URL列表中,用于去重和判斷爬取的進(jìn)程。⑤將過(guò)濾后的鏈接放到URL隊(duì)列中。⑥從URL隊(duì)列中,根據(jù)搜索算法確定URL的優(yōu)先級(jí),并確定下一步要爬取的URL地址。在聚焦網(wǎng)絡(luò)爬蟲(chóng)中,下一步爬取哪些URL地址相對(duì)來(lái)說(shuō)是很重要的。對(duì)于聚焦網(wǎng)絡(luò)爬蟲(chóng)來(lái)說(shuō),不同的爬取順序,可能導(dǎo)致爬蟲(chóng)的執(zhí)行效率不同,所以,需要依據(jù)搜索策略來(lái)確定下一步需要爬取哪些URL地址。⑦從下一步要爬取的URL地址中,讀取新的URL,然后依據(jù)新的URL地址爬取網(wǎng)頁(yè),并重復(fù)上述爬取過(guò)程。⑧滿(mǎn)足系統(tǒng)中設(shè)置的停止條件時(shí),或無(wú)法獲取新的URL地址時(shí),停止爬行。1.1.2爬蟲(chóng)的原理與分類(lèi)增量式網(wǎng)絡(luò)爬蟲(chóng)
增量式網(wǎng)絡(luò)爬蟲(chóng)是指對(duì)已下載網(wǎng)頁(yè)采取增量式更新和只爬取新產(chǎn)生或發(fā)生變化網(wǎng)頁(yè)的爬蟲(chóng),它能夠在一定程度上保證所爬行的頁(yè)面是新的頁(yè)面。相較于周期性爬行和刷新頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)而言,增量式爬蟲(chóng)只會(huì)在需要的時(shí)候爬行新產(chǎn)生或發(fā)生更新的頁(yè)面,并不重新下載沒(méi)有發(fā)生變化的頁(yè)面,可有效減少數(shù)據(jù)下載量,及時(shí)更新已爬行的網(wǎng)頁(yè),減小時(shí)間和空間上的耗費(fèi),但是增加了爬行算法的復(fù)雜度和實(shí)現(xiàn)難度。增量式網(wǎng)絡(luò)爬蟲(chóng)的體系結(jié)構(gòu)包含爬行模塊、排序模塊、更新模塊、本地頁(yè)面集、待爬行URL集以及本地頁(yè)面URL集。
增量式爬蟲(chóng)有兩個(gè)目標(biāo):保持本地頁(yè)面集中存儲(chǔ)的頁(yè)面為最新頁(yè)面和提高本地集中存儲(chǔ)頁(yè)面的質(zhì)量。為實(shí)現(xiàn)第一個(gè)目標(biāo),增量式爬蟲(chóng)需要通過(guò)重新訪(fǎng)問(wèn)網(wǎng)頁(yè)來(lái)更新本地頁(yè)面集中頁(yè)面內(nèi)容,常用的方法有:①統(tǒng)一更新法:爬蟲(chóng)以相同的頻率訪(fǎng)問(wèn)所有網(wǎng)頁(yè),不考慮網(wǎng)頁(yè)的改變頻率;②個(gè)體更新法:爬蟲(chóng)根據(jù)個(gè)體網(wǎng)頁(yè)的改變頻率來(lái)重新訪(fǎng)問(wèn)各頁(yè)面;③基于分類(lèi)的更新法:爬蟲(chóng)根據(jù)網(wǎng)頁(yè)改變頻率將其分為更新較快網(wǎng)頁(yè)子集和更新較慢網(wǎng)頁(yè)子集兩類(lèi),然后以不同的頻率訪(fǎng)問(wèn)這兩類(lèi)網(wǎng)頁(yè)。為實(shí)現(xiàn)第二個(gè)目標(biāo),增量式爬蟲(chóng)需要對(duì)網(wǎng)頁(yè)的重要性排序,常用的策略有:廣度優(yōu)先策略、PageRank優(yōu)先策略等。
增量式網(wǎng)絡(luò)爬蟲(chóng)和各種爬蟲(chóng)的大致流程基本相似,只不過(guò)多出了去重的判斷,這也是增量式網(wǎng)絡(luò)爬蟲(chóng)的特點(diǎn)。其多出來(lái)的三個(gè)步驟為:
①在獲取URL時(shí),發(fā)送請(qǐng)求之前先判斷這個(gè)URL是不是之前爬取過(guò)。
②在解析URL內(nèi)容后判斷這部分內(nèi)容是不是之前爬取過(guò)。
③在將采集到的信息寫(xiě)入存儲(chǔ)介質(zhì)時(shí)判斷內(nèi)容是不是已經(jīng)在介質(zhì)中存在。1.1.2爬蟲(chóng)的原理與分類(lèi)DeepWeb爬蟲(chóng)
Web頁(yè)面按存在方式可以分為表層網(wǎng)頁(yè)(SurfaceWeb)和深層網(wǎng)頁(yè)(DeepWeb)。表層網(wǎng)頁(yè)是指?jìng)鹘y(tǒng)搜索引擎可以索引的頁(yè)面,即以超鏈接可以到達(dá)的靜態(tài)網(wǎng)頁(yè)為主構(gòu)成的Web頁(yè)面。DeepWeb是那些大部分內(nèi)容不能通過(guò)靜態(tài)鏈接獲取的、隱藏在搜索表單后的,只有用戶(hù)提交一些關(guān)鍵詞才能獲得的Web頁(yè)面。例如那些用戶(hù)注冊(cè)后內(nèi)容才可見(jiàn)的網(wǎng)頁(yè)就屬于DeepWeb。并且DeepWeb中可訪(fǎng)問(wèn)信息容量是SurfaceWeb的幾百倍,是互聯(lián)網(wǎng)上最大、發(fā)展最快的新型信息資源。
DeepWeb爬蟲(chóng)體系結(jié)構(gòu)包含六個(gè)基本功能模塊(爬行控制器、解析器、表單分析器、表單處理器、響應(yīng)分析器、LVS控制器)和兩個(gè)爬蟲(chóng)內(nèi)部數(shù)據(jù)結(jié)構(gòu)(URL列表、LVS表)。其中LVS(LabelValueSet)表示標(biāo)簽或數(shù)值集合,用來(lái)表示填充表單的數(shù)據(jù)源。
DeepWeb爬蟲(chóng)爬行過(guò)程中最重要部分就是表單填寫(xiě),包含兩種類(lèi)型:①基于領(lǐng)域知識(shí)的表單填寫(xiě):此方法一般會(huì)維持一個(gè)本體庫(kù),通過(guò)語(yǔ)義分析來(lái)選取合適的關(guān)鍵詞填寫(xiě)表單。②基于網(wǎng)頁(yè)結(jié)構(gòu)分析的表單填寫(xiě):此方法一般無(wú)領(lǐng)域知識(shí)或僅有有限的領(lǐng)域知識(shí),將網(wǎng)頁(yè)表單表示成DOM樹(shù),從中提取表單各字段值。1.1.2爬蟲(chóng)的原理與分類(lèi)如圖所示網(wǎng)絡(luò)爬蟲(chóng)的核心流程可概括為:發(fā)起請(qǐng)求、獲取相應(yīng)內(nèi)容、解析內(nèi)容、保存數(shù)據(jù)四個(gè)主要步驟。前兩個(gè)步驟為發(fā)起請(qǐng)求(Request)和獲取服務(wù)器的響應(yīng)(Response),也是爬蟲(chóng)最核心部分。1.1.3網(wǎng)絡(luò)爬蟲(chóng)核心教程Request由客戶(hù)端向服務(wù)端發(fā)出,如圖所示,可以分為4部分內(nèi)容:請(qǐng)求方式(RequestMethod)、請(qǐng)求網(wǎng)址(RequestURL)、請(qǐng)求頭(RequestHeaders)、請(qǐng)求體(RequestBody)。1.1.3網(wǎng)絡(luò)爬蟲(chóng)核心教程1.1.3網(wǎng)絡(luò)爬蟲(chóng)核心教程(1)請(qǐng)求方式
常見(jiàn)的請(qǐng)求方式有兩種:GET和POST。在瀏覽器中直接輸入U(xiǎn)RL并回車(chē),這便發(fā)起了一個(gè)GET請(qǐng)求,請(qǐng)求的參數(shù)會(huì)直接包含到URL里。例如在百度中搜索相應(yīng)內(nèi)容,就是一個(gè)GET請(qǐng)求,其中URL中包含了對(duì)請(qǐng)求的參數(shù)信息。POST請(qǐng)求大多在表單提交時(shí)發(fā)起。例如對(duì)于一個(gè)登錄表單,輸入用戶(hù)名和密碼后,點(diǎn)擊“登錄”按鈕,這通常會(huì)發(fā)起一個(gè)POST請(qǐng)求,其數(shù)據(jù)通常以表單的形式傳輸,而不會(huì)體現(xiàn)在URL中。 GET請(qǐng)求中的參數(shù)包含在URL里面,數(shù)據(jù)可以在URL中看到,而POST請(qǐng)求的URL不會(huì)包含這些數(shù)據(jù),數(shù)據(jù)都是通過(guò)表單形式傳輸?shù)?,包含在?qǐng)求體中;GET請(qǐng)求提交的數(shù)據(jù)最多只有1024字節(jié),而POST方式?jīng)]有限制;一般來(lái)說(shuō),需要提交用戶(hù)名和密碼等敏感信息,使用GET方法請(qǐng)求會(huì)暴露在URL中,所以此時(shí)最好以POST方式發(fā)送,上傳文件時(shí),由于文件內(nèi)容比較大,也會(huì)選用POST方式。我們平常使用的請(qǐng)求大部分是GET和POST請(qǐng)求,如表所示,還有一些請(qǐng)求方式如HEAD、PUT、DELETE等。方法描述GET請(qǐng)求頁(yè)面,并返回頁(yè)面內(nèi)容HEAD類(lèi)似于GET請(qǐng)求,只不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容,用于獲取報(bào)頭POST大多數(shù)用于提交表單或上傳文件,數(shù)據(jù)包含在請(qǐng)求體中PUT從客戶(hù)端向服務(wù)器傳送的數(shù)據(jù)取代指定文檔中的內(nèi)容DELETE請(qǐng)求服務(wù)器刪除指定的頁(yè)面CONNECT把服務(wù)器當(dāng)做跳板,讓服務(wù)器代替客戶(hù)端訪(fǎng)問(wèn)其他網(wǎng)頁(yè)OPTIONS允許客戶(hù)端查看服務(wù)器的性能TRACE回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷1.1.3網(wǎng)絡(luò)爬蟲(chóng)核心教程(2)請(qǐng)求網(wǎng)址URLURL(uniformresourcelocator)即統(tǒng)一資源定位符,用于唯一確定想請(qǐng)求的資源。如一個(gè)網(wǎng)頁(yè)文檔、一張圖片、一個(gè)視頻等都可以用URL來(lái)確定。(3)請(qǐng)求頭請(qǐng)求頭以鍵值對(duì)的形式將請(qǐng)求的一些配置信息告訴服務(wù)器,讓服務(wù)器判斷這些配置信息并解析請(qǐng)求頭,用來(lái)說(shuō)明服務(wù)器要使用的附加信息,比較重要的信息有Cookie,Referer,User-Agent等。下面簡(jiǎn)要說(shuō)明一些常用的頭信息。①Accept:請(qǐng)求報(bào)頭域,用于指定客戶(hù)端可接受哪些類(lèi)型的信息。②Accept-Language:指定客戶(hù)端可接受的語(yǔ)言類(lèi)型。③Accept-Encoding:指定客戶(hù)端可接受的內(nèi)容編碼。④Host:用于指定請(qǐng)求資源的主機(jī)IP和端口號(hào),其內(nèi)容為請(qǐng)求URL的原始服務(wù)器或網(wǎng)關(guān)的位置。從HTTP1.1版本開(kāi)始,請(qǐng)求必須包含此內(nèi)容。⑤Cookie:也常用復(fù)數(shù)形式Cookies,這是網(wǎng)站為了辨別用戶(hù)進(jìn)行會(huì)話(huà)跟蹤而存儲(chǔ)在用戶(hù)本地的數(shù)據(jù)。它的主要功能是維持當(dāng)前訪(fǎng)問(wèn)會(huì)話(huà)。如我們輸入用戶(hù)名和密碼成功登錄某個(gè)網(wǎng)站后,服務(wù)器會(huì)用會(huì)話(huà)保存登錄狀態(tài)信息,后面我們每次刷新或請(qǐng)求該站點(diǎn)的其他頁(yè)面時(shí),會(huì)發(fā)現(xiàn)都是登錄狀態(tài),這就是Cookies的功勞。Cookies里有信息標(biāo)識(shí)了我們所對(duì)應(yīng)的服務(wù)器的會(huì)話(huà),每次瀏覽器在請(qǐng)求該站點(diǎn)的頁(yè)面時(shí),都會(huì)在請(qǐng)求頭加上Cookies并將其返回給服務(wù)器,服務(wù)器通過(guò)Cookies識(shí)別出是我們自己,并且查出當(dāng)前狀態(tài)是登錄狀態(tài),所以返回結(jié)果就是登陸之后才能看到的網(wǎng)頁(yè)內(nèi)容。⑥Referer:此內(nèi)容用來(lái)標(biāo)識(shí)這個(gè)請(qǐng)求是從哪個(gè)頁(yè)面發(fā)過(guò)來(lái)的,服務(wù)器可以拿到這一信息并做相應(yīng)處理,如做來(lái)源統(tǒng)計(jì)、防盜鏈處理等。⑦User-Agent:簡(jiǎn)稱(chēng)UA,它是一個(gè)特殊的字符串頭,可以使服務(wù)器識(shí)別客戶(hù)使用的操作系統(tǒng)及版本、瀏覽器及版本等信息。再做爬蟲(chóng)時(shí)加上此信息,可以偽裝為瀏覽器,如果不加則很容易可能被識(shí)別出為爬蟲(chóng)。⑧Content-Type:也稱(chēng)為互聯(lián)網(wǎng)媒體類(lèi)型(InternetMediaType)或者M(jìn)IME類(lèi)型,在HTTP協(xié)議消息頭中,它用來(lái)表示具體請(qǐng)求中的媒體類(lèi)型信息。如text/html代表HTML格式,image/gif代表GIF圖片,application/json代表JSON類(lèi)型。(4)請(qǐng)求體請(qǐng)求體一般承載的內(nèi)容是POST請(qǐng)求中的表單數(shù)據(jù),而對(duì)于GET請(qǐng)求,請(qǐng)求體則為空。Response由服務(wù)端返回給客戶(hù)端,如圖所示,可以分為三部分:響應(yīng)狀態(tài)(ResponseStatus)、響應(yīng)頭(ResponseHeaders)、響應(yīng)體(ResponseBody)。1.1.3網(wǎng)絡(luò)爬蟲(chóng)核心教程1.1.3網(wǎng)絡(luò)爬蟲(chóng)核心教程(1)響應(yīng)狀態(tài)響應(yīng)狀態(tài)表示服務(wù)器對(duì)響應(yīng)的反饋,主要由狀態(tài)碼來(lái)標(biāo)識(shí),如200代表服務(wù)器正常響應(yīng),404代表頁(yè)面未找到,500代表服務(wù)器內(nèi)部發(fā)生錯(cuò)誤。網(wǎng)絡(luò)爬蟲(chóng)中,我們可以根據(jù)狀態(tài)碼的數(shù)字來(lái)判斷服務(wù)器響應(yīng)狀態(tài),如狀態(tài)碼為200,則證明成功返回?cái)?shù)據(jù),再進(jìn)行進(jìn)一步的處理。(2)響應(yīng)頭響應(yīng)頭包含了服務(wù)器對(duì)請(qǐng)求的應(yīng)答信息,下面簡(jiǎn)要說(shuō)明一些常用的頭信息:①Date:標(biāo)識(shí)響應(yīng)產(chǎn)生的時(shí)間。②Last-Modified:指定資源的最后修改時(shí)間。③Content-Encoding:指定響應(yīng)內(nèi)容的編碼。④Server:包含服務(wù)器的信息,如名稱(chēng)、版本號(hào)等。⑤Content-Type:文檔類(lèi)型,指定返回的數(shù)據(jù)類(lèi)型是什么,如text/html代表返回HTML文檔,application/x-javascript代表返回JavaScript文件,image/jpeg代表返回圖片。⑥Set-Cookie:設(shè)置Cookies。響應(yīng)頭中的Set-Cookie告訴瀏覽器需要將此內(nèi)容放在Cookies中,下次請(qǐng)求攜帶Cookies請(qǐng)求。⑦Expires:指定響應(yīng)的過(guò)期時(shí)間,可以使代理服務(wù)器或?yàn)g覽器將加載的內(nèi)容更新到緩存中。如果再次訪(fǎng)問(wèn)時(shí),就可以直接從緩存中加載,降低服務(wù)器負(fù)載,縮短加載時(shí)間。1.1.3網(wǎng)絡(luò)爬蟲(chóng)核心教程(3)響應(yīng)體Response中最重要的當(dāng)屬響應(yīng)體的內(nèi)容。響應(yīng)的正文數(shù)據(jù)都在響應(yīng)體中,比如請(qǐng)求網(wǎng)頁(yè)時(shí),它的響應(yīng)體就是網(wǎng)頁(yè)的HTML代碼;請(qǐng)求一張圖片時(shí),它的響應(yīng)體就是圖片的二進(jìn)制數(shù)據(jù)。在做爬蟲(chóng)時(shí),我們主要通過(guò)響應(yīng)體得到的網(wǎng)頁(yè)的源代碼、JSON格式數(shù)據(jù)等,然后從中做相應(yīng)內(nèi)容的提取。在掌握爬蟲(chóng)的原理之后,我們需要明晰爬蟲(chóng)的作用,便于我們更好地使用爬蟲(chóng)?;ヂ?lián)網(wǎng)的核心價(jià)值在于數(shù)據(jù)的共享與傳遞,如果我們把互聯(lián)網(wǎng)比作一張巨大的蜘蛛網(wǎng),那計(jì)算機(jī)上的數(shù)據(jù)便是蜘蛛網(wǎng)上的一個(gè)獵物,而爬蟲(chóng)就是一只蜘蛛,沿著蜘蛛網(wǎng)抓取自己想要的“獵物”——數(shù)據(jù)。數(shù)據(jù)作為互聯(lián)網(wǎng)中最具價(jià)值的產(chǎn)物,爬蟲(chóng)在數(shù)據(jù)分析過(guò)程中扮演重要角色,如企業(yè)需要數(shù)據(jù)來(lái)分析用戶(hù)行為,分析自己產(chǎn)品的不足之處,來(lái)分析競(jìng)爭(zhēng)對(duì)手等等;同時(shí)在搜索引擎、采集數(shù)據(jù)、廣告過(guò)濾等方面爬蟲(chóng)也有廣泛應(yīng)用。爬蟲(chóng)應(yīng)用場(chǎng)景04030201資訊推薦系統(tǒng)通過(guò)爬蟲(chóng)技術(shù)抓取數(shù)新聞源,然后以用戶(hù)行為屬性標(biāo)簽歸納和深度自然語(yǔ)言搜索優(yōu)化手段來(lái)分發(fā)給用戶(hù),做到千人千面的閱讀體驗(yàn),達(dá)到最可觀的搜索優(yōu)化程度。資訊推薦系統(tǒng)通過(guò)爬蟲(chóng)技術(shù)抓取數(shù)新聞源,然后以用戶(hù)行為屬性標(biāo)簽歸納和深度自然語(yǔ)言搜索優(yōu)化手段來(lái)分發(fā)給用戶(hù),做到千人千面的閱讀體驗(yàn),達(dá)到最可觀的搜索優(yōu)化程度。輿情分析系統(tǒng)顧名思義就是輿論發(fā)展的情況有正面和負(fù)面之分,利用爬蟲(chóng)技術(shù)來(lái)監(jiān)測(cè)搜索引擎、新聞門(mén)戶(hù)、論壇、博客、微博、微信、報(bào)刊、視頻的輿情。根據(jù)預(yù)定的監(jiān)控關(guān)鍵詞,實(shí)現(xiàn)全媒體一鍵搜索,保證信息搜集的全面性;同時(shí)為了豐富數(shù)據(jù)的多樣性,除了采集文本信息之外,還對(duì)圖像、視頻等信息進(jìn)行采集;為保證其時(shí)效性,采用全棧式的響應(yīng)機(jī)制,對(duì)于目標(biāo)網(wǎng)站發(fā)布目標(biāo)信息后,可以在分鐘級(jí)內(nèi)采集到本地?cái)?shù)據(jù)庫(kù)內(nèi)。1.1.4爬蟲(chóng)的應(yīng)用場(chǎng)景購(gòu)物網(wǎng)站比價(jià)系統(tǒng)如今各大電商平臺(tái)為了活躍用戶(hù)進(jìn)行各種秒殺活動(dòng)并推出各種優(yōu)惠券等,同樣的一件商品在不同網(wǎng)購(gòu)平臺(tái)價(jià)格可能不同,這就催生各種比價(jià)網(wǎng)站。那么這些網(wǎng)站是如何在秒級(jí)的時(shí)間內(nèi)知道一件商品在某站有優(yōu)惠?這就需要一個(gè)爬蟲(chóng)系統(tǒng)來(lái)實(shí)時(shí)監(jiān)控各站的價(jià)格浮動(dòng)。先采集商品的價(jià)格,規(guī)格,數(shù)量等,再做處理,分析,反饋。數(shù)據(jù)預(yù)處理簡(jiǎn)介221.2數(shù)據(jù)預(yù)處理簡(jiǎn)介現(xiàn)實(shí)世界中數(shù)據(jù)大體上都是不完整,不一致的臟數(shù)據(jù),無(wú)法直接進(jìn)行數(shù)據(jù)挖掘,或挖掘結(jié)果差強(qiáng)人意。為了提高數(shù)據(jù)挖掘的質(zhì)量產(chǎn)生了數(shù)據(jù)預(yù)處理技術(shù)。數(shù)據(jù)預(yù)處理(DataPreprocessing)是指在主要的數(shù)據(jù)分析之前對(duì)數(shù)據(jù)進(jìn)行的一些處理操作。本節(jié)對(duì)數(shù)據(jù)預(yù)處理的相關(guān)流程及工具等進(jìn)行介紹。數(shù)據(jù)挖掘過(guò)程一般包括數(shù)據(jù)采集,數(shù)據(jù)預(yù)處理,數(shù)據(jù)挖掘以及數(shù)據(jù)評(píng)價(jià)和呈現(xiàn)。目前,數(shù)據(jù)挖掘的研究工作大都集中在挖掘算法、挖掘技術(shù)、挖掘語(yǔ)言的探討而忽視對(duì)數(shù)據(jù)預(yù)處理的研究。事實(shí)上,在一個(gè)完整的數(shù)據(jù)挖掘過(guò)程中,數(shù)據(jù)預(yù)處理要花費(fèi)60%左右的時(shí)間。數(shù)據(jù)預(yù)處理作為數(shù)據(jù)分析流程中工作量最大的一環(huán),也是必不可少的。要使挖掘算法挖掘出有效的知識(shí),必須為其提供干凈,準(zhǔn)確,簡(jiǎn)潔的數(shù)據(jù),一些成熟的挖掘算法對(duì)其處理的數(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ù)可能存在以下幾種問(wèn)題:①數(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è)類(lèi)別的數(shù)據(jù)量相差懸殊的情況。⑥離群點(diǎn)/異常值(Outliers)是遠(yuǎn)離數(shù)據(jù)集中其余部分的數(shù)據(jù)。⑦數(shù)據(jù)重復(fù)(Duplicate)是在數(shù)據(jù)集中出現(xiàn)多次的數(shù)據(jù)。而人為、硬件、軟件方面出現(xiàn)的問(wèn)題往往都會(huì)造成數(shù)據(jù)存在這些偏差,如數(shù)據(jù)收集的時(shí)候缺乏合適的值,數(shù)據(jù)收集時(shí)和數(shù)據(jù)分析時(shí)的不同考慮因素,數(shù)據(jù)收集工具的問(wèn)題,數(shù)據(jù)輸入時(shí)的人為計(jì)算錯(cuò)誤,數(shù)據(jù)傳輸中產(chǎn)生的錯(cuò)誤。因此想要避免數(shù)據(jù)出現(xiàn)“臟數(shù)據(jù)”是十分困難的,不正確、不完整和不一致的數(shù)據(jù)是現(xiàn)實(shí)世界的大型數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)的共同特點(diǎn),這也從側(cè)面表明數(shù)據(jù)預(yù)處理的重要性。沒(méi)有高質(zhì)量的數(shù)據(jù),就沒(méi)有高質(zhì)量的挖掘結(jié)果,高質(zhì)量的決策必須依賴(lài)高質(zhì)量的數(shù)據(jù)。1.2.1數(shù)據(jù)預(yù)處理的目的和意義
數(shù)據(jù)的預(yù)處理是指對(duì)所收集數(shù)據(jù)進(jìn)行分類(lèi)或分組前所做的審核、篩選、排序等必要的處理。數(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ù)和無(wú)關(guān)數(shù)據(jù),處理遺漏數(shù)據(jù),本處介紹噪聲數(shù)據(jù)的處理、空缺值的處理和清洗臟數(shù)據(jù)。(1)噪聲數(shù)據(jù)的處理:噪聲是一個(gè)測(cè)量變量中的隨機(jī)錯(cuò)誤和偏差,包括錯(cuò)誤的值或偏離期望的孤立點(diǎn)值,對(duì)于噪聲數(shù)據(jù)有如下幾種處理方法:分箱,回歸,聚類(lèi)。①分箱:分箱方法通過(guò)考察數(shù)據(jù)的“近鄰”(即周?chē)闹担﹣?lái)光滑有序數(shù)據(jù)的值,有序值分布到一些“桶”或箱中。由于分箱方法考察近鄰的值,因此進(jìn)行局部光滑。幾種分箱技術(shù):用箱均值光滑、用箱邊界光滑、用箱中位數(shù)光滑。②回歸:可以用一個(gè)函數(shù)(如回歸函數(shù))擬合數(shù)據(jù)來(lái)光滑數(shù)據(jù)。線(xiàn)性回歸涉及找出擬合兩個(gè)屬性(或變量)的“最佳”線(xiàn),使得一個(gè)屬性可以用來(lái)預(yù)測(cè)另一個(gè)。多元線(xiàn)性回歸是線(xiàn)性回歸的擴(kuò)展,其中涉及的屬性多于兩個(gè),并且數(shù)據(jù)擬合到一個(gè)多維曲面。③聚類(lèi):通過(guò)聚類(lèi)檢測(cè)離群點(diǎn)。(2)空缺值的處理:目前最常用的方法是使用最可能的值填充空缺值,如用一個(gè)全局常量替換空缺值,使用屬性的平均值填充空缺值或?qū)⑺性M按照某些屬性分類(lèi),然后用同一類(lèi)中屬性的平均值填充空缺值。例如一個(gè)公司職員平均工資收入為3000元,則使用該值替換工資中“基本工資”屬性中的空缺值。(3)清洗臟數(shù)據(jù):異構(gòu)數(shù)據(jù)源數(shù)據(jù)庫(kù)中的數(shù)據(jù)并不都是正確的,常常不可避免的存在著不完整,不一致,不精確和重復(fù)的數(shù)據(jù),往往使挖掘過(guò)程陷入混亂,導(dǎo)致不可靠的輸出。清洗臟數(shù)據(jù)可采用:專(zhuān)門(mén)的程序、采用概率統(tǒng)計(jì)學(xué)遠(yuǎn)離查找數(shù)值異常的記錄、手工對(duì)重復(fù)記錄的進(jìn)行檢測(cè)和刪除。1.2.2數(shù)據(jù)預(yù)處理的流程2.數(shù)據(jù)集成數(shù)據(jù)集成是指合并多個(gè)數(shù)據(jù)源中的數(shù)據(jù),存放在一個(gè)一致的數(shù)據(jù)存儲(chǔ)(如數(shù)據(jù)倉(cāng)庫(kù))中。數(shù)據(jù)集成有三個(gè)主要問(wèn)題:①實(shí)體識(shí)別問(wèn)題:在數(shù)據(jù)集成時(shí)候,來(lái)自多個(gè)數(shù)據(jù)源的現(xiàn)實(shí)世界的實(shí)體有時(shí)并不一定是匹配的,例如:數(shù)據(jù)分析者如何才能確信一個(gè)數(shù)據(jù)庫(kù)中的student_id和另一個(gè)數(shù)據(jù)庫(kù)中的stu_id值是同一個(gè)實(shí)體,通常,可以根據(jù)數(shù)據(jù)庫(kù)或者數(shù)據(jù)倉(cāng)庫(kù)的元數(shù)據(jù)來(lái)區(qū)分模式集成中的錯(cuò)誤。②冗余問(wèn)題:數(shù)據(jù)集成往往導(dǎo)致數(shù)據(jù)冗余,如同一屬性多次出現(xiàn),同一屬性命名不一致等,對(duì)于屬性間的冗余可以用相關(guān)分析檢測(cè)到,然后刪除。有些冗余可以被相關(guān)分析檢測(cè)到,例如通過(guò)計(jì)算屬性A、B的相關(guān)系數(shù)(皮爾遜積矩系數(shù))來(lái)判斷是否冗余;對(duì)于離散數(shù)據(jù),可通過(guò)卡方檢驗(yàn)來(lái)判斷兩個(gè)屬性A和B之間的相關(guān)聯(lián)系。③數(shù)據(jù)值沖突問(wèn)題:對(duì)于現(xiàn)實(shí)世界的同一實(shí)體,來(lái)自不同數(shù)據(jù)源的屬性值可能不同,這可能是因?yàn)楸硎?、比例、或編碼、數(shù)據(jù)類(lèi)型、單位不統(tǒng)一、字段長(zhǎ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ù)的噪聲,包括分箱,回歸和聚類(lèi)。(2)聚集:對(duì)數(shù)據(jù)進(jìn)行匯總或聚集。這一步通常用來(lái)為多粒度數(shù)據(jù)分析構(gòu)造數(shù)據(jù)立方體。(3)數(shù)據(jù)泛化:使用概念分層,用高層概念替換底層或“原始”數(shù)據(jù)。(4)規(guī)范化:又稱(chēng)為歸一化,特征縮放(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)造新的屬性并添加到屬性集中,以幫助挖掘過(guò)程。1.2.2數(shù)據(jù)預(yù)處理的流程4.數(shù)據(jù)規(guī)約指將數(shù)據(jù)按語(yǔ)義層次結(jié)構(gòu)合并,語(yǔ)義層次結(jié)構(gòu)定義了元組屬性值之間的語(yǔ)義關(guān)系,規(guī)約化和規(guī)約能大量減少元組個(gè)數(shù),提高計(jì)算效率,同時(shí),規(guī)格化和規(guī)約過(guò)程提高了知識(shí)發(fā)現(xiàn)的起點(diǎn),使得一個(gè)算法能夠發(fā)現(xiàn)多層次的知識(shí),適應(yīng)不同應(yīng)用的需要。數(shù)據(jù)規(guī)約是將數(shù)據(jù)庫(kù)中的海量數(shù)據(jù)進(jìn)行規(guī)約,規(guī)約之后的數(shù)據(jù)仍接近于保持原數(shù)據(jù)的完整性,但數(shù)據(jù)量相對(duì)小的多,這樣進(jìn)行挖掘的性能和效率會(huì)得到很大的提高。數(shù)據(jù)規(guī)約的策略主要有數(shù)據(jù)立方體聚集,維規(guī)約,數(shù)據(jù)壓縮,數(shù)值壓縮,離散化和概念分層。(1)維規(guī)約:通過(guò)刪除不相關(guān)的屬性減少數(shù)據(jù)量,不僅僅壓縮了數(shù)據(jù)集,還減少了出現(xiàn)在發(fā)現(xiàn)模式上的屬性數(shù)目,通常采用屬性子集選擇方法找出最小屬性集,使得數(shù)據(jù)類(lèi)的概率分布盡可能的接近使用所有屬性的原分布(2)數(shù)據(jù)壓縮,數(shù)據(jù)壓縮分為無(wú)損壓縮和有損壓縮,比較流行和有效的有損數(shù)據(jù)壓縮方法是小波變換和主要成分分析,小波變換對(duì)于稀疏或傾斜數(shù)據(jù)以及具有有序?qū)傩缘臄?shù)據(jù)有很好的壓縮效果。(3)數(shù)值規(guī)約:數(shù)值歸約通過(guò)選擇替代的、較小的數(shù)據(jù)表示形式來(lái)減少數(shù)據(jù)量。數(shù)值歸約技術(shù)可以是有參的,也可以是無(wú)參的。有參方法是使用一個(gè)模型來(lái)評(píng)估數(shù)據(jù),只需存放參數(shù),而不需要存放實(shí)際數(shù)據(jù)。有參的數(shù)值歸約技術(shù)有以下兩種,回歸:線(xiàn)性回歸和多元回歸;對(duì)數(shù)線(xiàn)性模型:近似離散屬性集中的多維概率分布。無(wú)參的數(shù)值歸約技術(shù)有3種:直方圖,聚類(lèi),選樣。(4)概念分層通過(guò)收集并用較高層的概念替換較低層的概念來(lái)定義數(shù)值屬性的一個(gè)離散化。概念分層可以用來(lái)歸約數(shù)據(jù),通過(guò)這種概化盡管細(xì)節(jié)丟失了,但概化后的數(shù)據(jù)更有意義、更容易理解,并且所需的空間比原數(shù)據(jù)少。對(duì)于數(shù)值屬性,由于數(shù)據(jù)的可能取值范圍的多樣性和數(shù)據(jù)值的更新頻繁,說(shuō)明概念分層是困難的。數(shù)值屬性的概念分層可以根據(jù)數(shù)據(jù)的分布分析自動(dòng)地構(gòu)造,如用分箱、直方圖分析、聚類(lèi)分析、基于熵的離散化和自然劃分分段等技術(shù)生成數(shù)值概念分層。由用戶(hù)專(zhuān)家在模式級(jí)顯示地說(shuō)明屬性的部分序或全序,從而獲得概念的分層;只說(shuō)明屬性集,但不說(shuō)明它們的偏序,由系統(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)開(kāi)源的基于Java的企業(yè)級(jí)ETL(Extract-Transform-Load,數(shù)據(jù)抽取、轉(zhuǎn)換、裝載的過(guò)程)工具,支持圖形化的GUI設(shè)計(jì)界面,可以以工作流的形式流轉(zhuǎn),做一些簡(jiǎn)單或復(fù)雜的數(shù)據(jù)抽取、數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)過(guò)濾等數(shù)據(jù)預(yù)處理方面工作,功能強(qiáng)大簡(jiǎn)單易用。如圖所示,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完成針對(duì)數(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完成針對(duì)數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,job則完成整個(gè)工作流的控制。如圖所示,為Kettle的概念模型。Kettle的執(zhí)行分為兩個(gè)層次:Job和Transformation。這兩個(gè)層次的最主要的在于數(shù)據(jù)的傳遞和運(yùn)行方式。(1)Transformation:定義對(duì)數(shù)據(jù)操作的容器,數(shù)據(jù)操作就是數(shù)據(jù)從輸入到輸出的一個(gè)過(guò)程,可以理解為比Job粒度更小一級(jí)的容器,我們將任務(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都完成了,也就說(shuō)明這項(xiàng)任務(wù)完成了。(4)JobEntry:JobEntry是Job內(nèi)部的執(zhí)行單元,每一個(gè)JobEntry用于實(shí)現(xiàn)特定的功能,如:驗(yàn)證表是否存在,發(fā)送郵件等??梢酝ㄟ^(guò)Job來(lái)執(zhí)行另一個(gè)Job或者Transformation,也就是說(shuō)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ù)處理常用庫(kù)331.3Python數(shù)據(jù)采集與預(yù)處理常用庫(kù)Python作為一門(mén)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮木幊陶Z(yǔ)言,最大的優(yōu)勢(shì)之一就是其具有腳本語(yǔ)言中最豐富和強(qiáng)大的類(lèi)庫(kù),從簡(jiǎn)單的字符串處理,到復(fù)雜的3D圖形繪制,這些類(lèi)庫(kù)覆蓋了絕大部分應(yīng)用場(chǎng)景,使得Python具有良好的可擴(kuò)展性。本節(jié)就將介紹Python在數(shù)據(jù)采集和預(yù)處理方面的庫(kù)。1.3.1請(qǐng)求庫(kù)用于實(shí)現(xiàn)HTTP請(qǐng)求操作1①u(mài)rllib:一系列用于操作URL的功能。2②requests:基于urllib編寫(xiě)的,阻塞式HTTP請(qǐng)求庫(kù),發(fā)出一個(gè)請(qǐng)求,一直等待服務(wù)器響應(yīng)后,程序才能進(jìn)行下一步處理。3③selenium:自動(dòng)化測(cè)試工具。一個(gè)調(diào)用瀏覽器的driver,通過(guò)這個(gè)庫(kù)你可以直接調(diào)用瀏覽器完成某些操作,如輸入驗(yàn)證碼。4④aiohttp:基于asyncio實(shí)現(xiàn)的HTTP框架。異步操作借助于async/await關(guān)鍵字,使用異步庫(kù)進(jìn)行數(shù)據(jù)抓取,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版機(jī)電設(shè)備安裝合同范本
- 2024版學(xué)校廢物管理承包合同3篇
- 2025年度電子元器件展參展商權(quán)益保障協(xié)議模板3篇
- 2025年度城市垃圾分類(lèi)處理承包合同3篇
- 2025年度房屋租賃管理及押金合同4篇
- 二零二四平安普惠企業(yè)融資借款合同3篇
- 2025版路燈設(shè)施智能監(jiān)控系統(tǒng)建設(shè)合同4篇
- 2025年度高新技術(shù)產(chǎn)業(yè)園區(qū)廠房租賃合同補(bǔ)充協(xié)議3篇
- 2024離婚訴訟費(fèi)用分擔(dān)及財(cái)產(chǎn)處理合同
- 2025年度旅游景區(qū)旅游安全風(fēng)險(xiǎn)評(píng)估與應(yīng)急預(yù)案合同4篇
- 肝臟腫瘤護(hù)理查房
- 護(hù)士工作壓力管理護(hù)理工作中的壓力應(yīng)對(duì)策略
- 2023年日語(yǔ)考試:大學(xué)日語(yǔ)六級(jí)真題模擬匯編(共479題)
- 皮帶拆除安全技術(shù)措施
- ISO9001(2015版)質(zhì)量體系標(biāo)準(zhǔn)講解
- 《培訓(xùn)資料緊固》課件
- 黑龍江省政府采購(gòu)評(píng)標(biāo)專(zhuān)家考試題
- 成品煙道安裝施工方案
- 醫(yī)療免責(zé)協(xié)議書(shū)范本
- 2023山東春季高考數(shù)學(xué)真題(含答案)
- 2022年初中歷史課程標(biāo)準(zhǔn)電子版
評(píng)論
0/150
提交評(píng)論