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

下載本文檔

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

文檔簡介

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

第3章

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

第3章

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

#導(dǎo)入模塊

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

html=etree.HTML(html)

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

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

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

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

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

第3章

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

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

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

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

第3章

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

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

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

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

溫馨提示

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

評論

0/150

提交評論