本書(shū)通過(guò)實(shí)踐操作介紹大數(shù)據(jù)爬取、清洗與可視化的具體實(shí)施方案,共10章,包括大數(shù)據(jù)爬取、清洗與可視化概述,爬蟲(chóng)概述,Requests庫(kù),BeautifulSoup爬蟲(chóng),自動(dòng)化測(cè)試工具Selenium,中型爬蟲(chóng)框架Scrapy,數(shù)據(jù)存儲(chǔ),數(shù)據(jù)清洗,Matplotlib可視化,Pyecharts可視化。書(shū)中的案例均經(jīng)過(guò)實(shí)踐驗(yàn)證,可以幫助讀者深入理解數(shù)據(jù)信息在大數(shù)據(jù)行業(yè)中的重要應(yīng)用。為方便復(fù)習(xí)和自學(xué),各章均配備豐富的習(xí)題。本書(shū)可作為高等院校大數(shù)據(jù)相關(guān)專業(yè)的教材,也可作為有關(guān)專業(yè)技術(shù)人員的培訓(xùn)教材,同時(shí)可作為大數(shù)據(jù)分析愛(ài)好者及從事網(wǎng)絡(luò)數(shù)據(jù)安全管理工作人員的參考書(shū)。
前言
本書(shū)是學(xué)習(xí)大數(shù)據(jù)獲取與分析的入門(mén)教材,從大數(shù)據(jù)信息的爬取開(kāi)始,逐步講述在大數(shù)據(jù)環(huán)境下,對(duì)海量信息進(jìn)行爬取、預(yù)處理操作與管理的全過(guò)程。全書(shū)立足于實(shí)踐與工程能力的培養(yǎng),以關(guān)鍵技術(shù)和流行應(yīng)用作為引導(dǎo)展開(kāi)全書(shū)內(nèi)容,通過(guò)“做中學(xué)”與“學(xué)中做”相結(jié)合的實(shí)踐過(guò)程,從技術(shù)簡(jiǎn)介開(kāi)始,進(jìn)而進(jìn)行關(guān)鍵技術(shù)分析與應(yīng)用案例解析,總結(jié)涉及的Python方法和第三方庫(kù),最后給出具體功能分析和代碼實(shí)現(xiàn)過(guò)程。本書(shū)重點(diǎn)介紹大數(shù)據(jù)爬取、清洗與可視化的具體實(shí)施方案,程序設(shè)計(jì)采用Python3.x語(yǔ)言,由多年講授大數(shù)據(jù)方向相關(guān)課程、經(jīng)驗(yàn)豐富的一線教師編寫(xiě)。全書(shū)內(nèi)容循序漸進(jìn),按照初學(xué)者學(xué)習(xí)思路編排,條理性強(qiáng),語(yǔ)言通俗,容易理解。全書(shū)共10章,包括大數(shù)據(jù)爬取、清洗與可視化概述,爬蟲(chóng)概述,Requests庫(kù),BeautifulSoup爬蟲(chóng),自動(dòng)化測(cè)試工具Selenium,中型爬蟲(chóng)框架Scrapy,數(shù)據(jù)存儲(chǔ),數(shù)據(jù)清洗,Matplotlib可視化,Pyecharts可視化。為方便復(fù)習(xí)和自學(xué),各章均配備豐富的習(xí)題。本書(shū)可作為高等院校大數(shù)據(jù)相關(guān)專業(yè)的教材,也可作為有關(guān)專業(yè)技術(shù)人員的培訓(xùn)教材,同時(shí)可作為大數(shù)據(jù)分析愛(ài)好者及從事網(wǎng)絡(luò)數(shù)據(jù)安全管理工作人員的參考書(shū)。本書(shū)以實(shí)踐操作為主,涉及的待爬取數(shù)據(jù)僅供學(xué)習(xí)使用,禁止在其他場(chǎng)合傳播。數(shù)據(jù)爬取的權(quán)限需參考待爬取網(wǎng)站的Robots協(xié)議。本書(shū)由賈寧擔(dān)任主編并統(tǒng)稿。具體編寫(xiě)分工如下:第1~7章由賈寧編寫(xiě),第8~10章由鄭純軍編寫(xiě)。本書(shū)配有電子課件、程序源代碼、習(xí)題解答等教學(xué)資源,讀者可以登錄華信教育資源網(wǎng)(www.hxedu.com.cn)注冊(cè)后免費(fèi)下載。本書(shū)在編寫(xiě)過(guò)程中,參考了許多國(guó)內(nèi)外的著作和文獻(xiàn),在此對(duì)著作者致以由衷的謝意。本書(shū)的編寫(xiě)得到了很多人的幫助和支持,在此對(duì)他們表示衷心的感謝。同時(shí),感謝同事及學(xué)生對(duì)本書(shū)提出的意見(jiàn)和建議。限于作者水平,書(shū)中錯(cuò)誤和缺點(diǎn)在所難免,歡迎廣大讀者提出寶貴意見(jiàn)和建議,我們不勝感激。
作者
2021年2月
賈寧,大連東軟信息學(xué)院副教授,多年來(lái)一直從事大數(shù)據(jù)技術(shù)及應(yīng)用、人工智能、深度學(xué)習(xí)/云計(jì)算等方面的科研和教學(xué)工作。
第1章 大數(shù)據(jù)爬取、清洗與可視化概述 1
1.1 爬蟲(chóng)概述 1
1.1.1 爬蟲(chóng)簡(jiǎn)介 1
1.1.2 常見(jiàn)爬蟲(chóng)分類和工具 2
1.2 數(shù)據(jù)清洗概述 2
1.2.1 數(shù)據(jù)清洗簡(jiǎn)介 2
1.2.2 常見(jiàn)數(shù)據(jù)清洗工具 3
1.3 可視化技術(shù)概述 3
1.3.1 數(shù)據(jù)可視化概述 3
1.3.2 常見(jiàn)可視化工具 5
1.4 相關(guān)網(wǎng)絡(luò)技術(shù)簡(jiǎn)介 5
1.4.1 HTTP 5
1.4.2 HTML 7
1.4.3 XML 10
1.4.4 JSON 13
1.4.5 JavaScript 14
1.4.6 正則表達(dá)式 17
1.5 Python開(kāi)發(fā)環(huán)境配置 21
1.5.1 在Windows中安裝Python 22
1.5.2 在Linux中安裝Python 24
1.5.3 Python集成開(kāi)發(fā)環(huán)境 26
1.5.4 Python第三方庫(kù)管理 33
本章小結(jié) 35
習(xí)題 35
第2章 爬蟲(chóng)概述 36
2.1 爬蟲(chóng)基礎(chǔ)概述 36
2.1.1 爬蟲(chóng)概念 36
2.1.2 爬蟲(chóng)基本原理 37
2.2 爬蟲(chóng)規(guī)范 39
2.2.1 爬蟲(chóng)尺寸 39
2.2.2 Robots協(xié)議 39
2.3 爬蟲(chóng)通用結(jié)構(gòu) 43
2.3.1 爬蟲(chóng)通用結(jié)構(gòu)簡(jiǎn)介 43
2.3.2 爬蟲(chóng)基本工作流程 43
2.3.3 異常處理機(jī)制 44
2.4 爬蟲(chóng)技術(shù) 46
2.4.1 urllib 3庫(kù) 46
2.4.2 網(wǎng)頁(yè)內(nèi)容查看 51
2.4.3 XPath 56
本章小結(jié) 60
習(xí)題 60
第3章 Requests庫(kù) 62
3.1 Requests庫(kù)簡(jiǎn)介與安裝 62
3.1.1 Requests庫(kù)簡(jiǎn)介 62
3.1.2 Requests庫(kù)安裝 62
3.2 Requests庫(kù)基本使用 63
3.2.1 Requests庫(kù)的主要方法 63
3.2.2 發(fā)送基本請(qǐng)求 66
3.2.3 響應(yīng)內(nèi)容 66
3.2.4 訪問(wèn)異常處理方案 67
3.3 Requests庫(kù)高級(jí)用法 69
3.3.1 定制請(qǐng)求頭部 69
3.3.2 設(shè)置超時(shí) 70
3.3.3 傳遞參數(shù) 70
3.3.4 解析JSON 72
3.4 代理設(shè)置 72
3.5 模擬登錄 73
3.5.1 保持登錄機(jī)制 73
3.5.2 使用Cookies登錄網(wǎng)站 74
3.5.3 登錄流程分析 77
3.5.4 Requests會(huì)話對(duì)象 78
3.5.5 登錄網(wǎng)站實(shí)例 80
3.6 資源下載 80
3.7 Requests庫(kù)應(yīng)用實(shí)例 82
3.7.1 具體功能分析 82
3.7.2 具體代碼實(shí)現(xiàn) 85
本章小結(jié) 86
習(xí)題 87
第4章 BeautifulSoup爬蟲(chóng) 88
4.1 BeautifulSoup簡(jiǎn)介與安裝 88
4.1.1 BeautifulSoup簡(jiǎn)介 88
4.1.2 BeautifulSoup4安裝方法 88
4.1.3 BeautifulSoup解析器 90
4.1.4 BeautifulSoup初探 92
4.2 BeautifulSoup對(duì)象類型 93
4.2.1 Tag 93
4.2.2 NavigableString 95
4.2.3 BeautifulSoup 96
4.2.4 Comment 96
4.3 BeautifulSoup的遍歷與搜索 97
4.3.1 遍歷文檔樹(shù) 97
4.3.2 搜索文檔樹(shù) 105
4.4 BeautifulSoup應(yīng)用實(shí)例 110
4.4.1 基于BeautifulSoup的獨(dú)立數(shù)據(jù)爬取 110
4.4.2 融合正則表達(dá)式的數(shù)據(jù)爬取 112
本章小結(jié) 114
習(xí)題 115
第5章 自動(dòng)化測(cè)試工具Selenium 116
5.1 Selenium簡(jiǎn)介與安裝 116
5.1.1 Selenium簡(jiǎn)介 116
5.1.2 Selenium安裝 116
5.2 Selenium基本用法 120
5.2.1 聲明瀏覽器對(duì)象 120
5.2.2 訪問(wèn)頁(yè)面 120
5.3 元素 121
5.3.1 定位元素 121
5.3.2 交互操作元素 126
5.3.3 動(dòng)作鏈 127
5.3.4 獲取元素屬性 128
5.4 Selenium高級(jí)操作 129
5.4.1 執(zhí)行JavaScript 129
5.4.2 前進(jìn)、后退和刷新操作 130
5.4.3 等待操作 130
5.4.4 處理Cookies 132
5.4.5 處理異常 133
5.5 Selenium實(shí)例 134
5.5.1 具體功能分析 134
5.5.2 具體代碼實(shí)現(xiàn) 135
本章小結(jié) 136
習(xí)題 137
第6章 中型爬蟲(chóng)框架Scrapy 138
6.1 Scrapy框架簡(jiǎn)介與安裝 138
6.1.1 Scrapy運(yùn)行機(jī)制 138
6.1.2 Scrapy框架簡(jiǎn)介 139
6.1.3 Scrapy安裝 140
6.2 Scrapy命令行工具 141
6.2.1 全局命令 142
6.2.2 Project-only命令 144
6.3 選擇器 146
6.3.1 選擇器簡(jiǎn)介 147
6.3.2 選擇器基礎(chǔ) 147
6.3.3 結(jié)合正則表達(dá)式 151
6.3.4 嵌套選擇器 152
6.4 Scrapy項(xiàng)目開(kāi)發(fā) 152
6.4.1 新建項(xiàng)目 153
6.4.2 定義Items 153
6.4.3 制作爬蟲(chóng) 154
6.4.4 爬取數(shù)據(jù) 156
6.4.5 使用Items 160
6.5 Item Pipeline 161
6.5.1 Item Pipeline簡(jiǎn)介 161
6.5.2 Item Pipeline應(yīng)用 162
6.6 中間件 164
6.6.1 下載器中間件 164
6.6.2 爬蟲(chóng)中間件 168
6.7 Scrapy實(shí)例 171
6.7.1 具體功能分析 171
6.7.2 具體代碼實(shí)現(xiàn) 172
本章小結(jié) 174
習(xí)題 174
第7章 數(shù)據(jù)存儲(chǔ) 176
7.1 數(shù)據(jù)存儲(chǔ)簡(jiǎn)介 176
7.1.1 現(xiàn)代數(shù)據(jù)存儲(chǔ)的挑戰(zhàn) 176
7.1.2 常用工具 177
7.2 文本文件存儲(chǔ) 179
7.2.1 文本數(shù)據(jù)的讀寫(xiě) 179
7.2.2 CSV數(shù)據(jù)的讀寫(xiě) 182
7.2.3 Excel數(shù)據(jù)的讀寫(xiě) 187
7.2.4 JSON對(duì)象的讀寫(xiě) 193
7.3 MongoDB數(shù)據(jù)庫(kù) 197
7.3.1 MongoDB簡(jiǎn)介 197
7.3.2 MongoDB安裝 198
7.3.3 MongoDB數(shù)據(jù)庫(kù)操作 202
7.4 數(shù)據(jù)存儲(chǔ)實(shí)例 207
7.4.1 具體功能分析 207
7.4.2 具體代碼實(shí)現(xiàn) 208
本章小結(jié) 210
習(xí)題 210
第8章 數(shù)據(jù)清洗 212
8.1 數(shù)據(jù)清洗概述 212
8.1.1 數(shù)據(jù)清洗原理 212
8.1.2 主要數(shù)據(jù)類型 212
8.1.3 常用工具 213
8.2 數(shù)據(jù)清洗方法 215
8.2.1 重復(fù)數(shù)據(jù)處理 215
8.2.2 缺失數(shù)據(jù)處理 218
8.2.3 異常數(shù)據(jù)處理 224
8.2.4 格式內(nèi)容清洗 226
8.2.5 邏輯錯(cuò)誤清洗 227
8.3 數(shù)據(jù)規(guī)整 228
8.3.1 字段拆分 228
8.3.2 數(shù)據(jù)分組 229
8.3.3 數(shù)據(jù)聚合 232
8.3.4 數(shù)據(jù)分割 236
8.3.5 數(shù)據(jù)合并 238
8.4 數(shù)據(jù)清洗實(shí)例 244
8.4.1 具體功能分析 244
8.4.2 具體代碼實(shí)現(xiàn) 245
本章小結(jié) 247
習(xí)題 247
第9章 Matplotlib可視化 249
9.1 Matplotlib簡(jiǎn)介與安裝 249
9.1.1 Matplotlib簡(jiǎn)介 249
9.1.2 Matplotlib安裝 250
9.2 基礎(chǔ)語(yǔ)法和常用設(shè)置 251
9.2.1 繪圖流程 251
9.2.2 布局設(shè)置 252
9.2.3 畫(huà)布創(chuàng)建 255
9.2.4 參數(shù)設(shè)置 256
9.3 基礎(chǔ)圖形繪制 258
9.3.1 折線圖 258
9.3.2 直方圖 259
9.3.3 餅狀圖 260
9.3.4 箱形圖 262
9.3.5 散點(diǎn)圖 264
9.3.6 三維圖 266
本章小結(jié) 269
習(xí)題 270
第10章 Pyecharts可視化 271
10.1 Pyecharts簡(jiǎn)介與安裝 271
10.1.1 Pyecharts簡(jiǎn)介 271
10.1.2 Pyecharts安裝 272
10.2 公共屬性設(shè)置 272
10.2.1 全局配置項(xiàng) 272
10.2.2 系列配置項(xiàng) 275
10.3 二維圖形繪制 276
10.3.1 柱狀圖 276
10.3.2 折線圖 281
10.3.3 面積圖 284
10.3.4 漣漪散點(diǎn)圖 285
10.3.5 餅狀圖 286
10.3.6 漏斗圖 290
10.4 三維圖形繪制 292
10.4.1 三維柱狀圖 292
10.4.2 三維散點(diǎn)圖 294
10.4.3 三維地圖 296
10.5 Pyecharts實(shí)例 296
10.5.1 具體功能分析 296
10.5.2 具體代碼實(shí)現(xiàn) 297
本章小結(jié) 298
習(xí)題 299
參考文獻(xiàn) 300
第1章大數(shù)據(jù)爬取、清洗與可視化概述
在Web2.0時(shí)代,各大應(yīng)用都在不斷地累積產(chǎn)生數(shù)據(jù),豐富的數(shù)據(jù)來(lái)源使得互聯(lián)網(wǎng)數(shù)據(jù)的組成結(jié)構(gòu)產(chǎn)生了巨大的變革。如何有效地獲取海量資源,并對(duì)其進(jìn)行有效的整合和分析,是現(xiàn)今大數(shù)據(jù)行業(yè)研究的重要方向之一。在獲取海量數(shù)據(jù)后,需要將數(shù)據(jù)轉(zhuǎn)換或映射為格式匹配的數(shù)據(jù)流,以便數(shù)據(jù)可以順利地用于后續(xù)處理,即實(shí)現(xiàn)數(shù)據(jù)清洗的過(guò)程。實(shí)際上,該過(guò)程允許通過(guò)工具便利和自動(dòng)使用數(shù)據(jù)來(lái)進(jìn)行進(jìn)一步的活動(dòng)。清洗后的數(shù)據(jù)可以使用可視化圖形表示。數(shù)據(jù)的可視化使得理解數(shù)據(jù)和溝通變得更容易,在確定干凈且有效數(shù)據(jù)實(shí)體之間的關(guān)系的基礎(chǔ)上,進(jìn)一步提高商業(yè)洞察力。
1.1爬蟲(chóng)概述
1.1.1爬蟲(chóng)簡(jiǎn)介網(wǎng)絡(luò)爬蟲(chóng)(WebCrawler,簡(jiǎn)稱爬蟲(chóng)),又稱網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)螞蟻、網(wǎng)絡(luò)機(jī)器人等,在社區(qū)中也被稱為網(wǎng)頁(yè)追逐者。爬蟲(chóng)是一個(gè)自動(dòng)爬取網(wǎng)頁(yè)的程序,它為搜索引擎實(shí)現(xiàn)了從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè)的功能,爬蟲(chóng)是搜索引擎的重要組成部分。爬蟲(chóng)的重要性主要體現(xiàn)在獲取海量資源這個(gè)環(huán)節(jié),這個(gè)環(huán)節(jié)是整條數(shù)據(jù)處理鏈路的起始,如果沒(méi)有數(shù)據(jù),后續(xù)的處理工作將無(wú)法正常完成。爬蟲(chóng)的應(yīng)用起源于20世紀(jì)90年代的傳統(tǒng)搜索引擎,爬蟲(chóng)用于爬取網(wǎng)絡(luò)中的Web頁(yè)面,再用搜索引擎進(jìn)行索引和存儲(chǔ),從而為用戶提供檢索信息服務(wù)。在系統(tǒng)架構(gòu)上,爬蟲(chóng)位于整個(gè)引擎的后臺(tái),而且對(duì)用戶屏蔽,因此在很長(zhǎng)的一段時(shí)期,用戶沒(méi)有發(fā)現(xiàn)爬蟲(chóng)的存在,從而限制了相應(yīng)技術(shù)的發(fā)展。在針對(duì)爬蟲(chóng)的調(diào)研中發(fā)現(xiàn),2004年以前,相關(guān)技術(shù)和應(yīng)用的關(guān)注度幾乎為0,但2005年以后,人們對(duì)爬蟲(chóng)的關(guān)注度逐漸上升。通過(guò)進(jìn)一步研究發(fā)現(xiàn),對(duì)爬蟲(chóng)技術(shù)的關(guān)注度排名靠前的領(lǐng)域是計(jì)算機(jī)軟件及應(yīng)用、互聯(lián)網(wǎng)技術(shù)與自動(dòng)化技術(shù)、新聞與傳媒、貿(mào)易經(jīng)濟(jì)、圖書(shū)情報(bào)與數(shù)字圖書(shū)館等,其中大部分側(cè)重于爬蟲(chóng)技術(shù)的研究,其次是爬蟲(chóng)的研究領(lǐng)域,可以看出這些領(lǐng)域與爬蟲(chóng)技術(shù)之間存在大量的耦合和交叉。爬蟲(chóng)是一個(gè)實(shí)踐性很強(qiáng)的技術(shù)本領(lǐng),因此,爬蟲(chóng)技術(shù)的關(guān)注度也從另一個(gè)角度反映了爬蟲(chóng)數(shù)量的增長(zhǎng)速度,除為數(shù)不多的主流互聯(lián)網(wǎng)搜索引擎爬蟲(chóng)外,大部分運(yùn)行的爬蟲(chóng)來(lái)自個(gè)人或者中小型企業(yè)單位。爬蟲(chóng)的普及得益于大量爬蟲(chóng)的開(kāi)源包或底層技術(shù)開(kāi)源包的出現(xiàn),這些開(kāi)源包使得開(kāi)發(fā)一個(gè)具體應(yīng)用的爬蟲(chóng)采集系統(tǒng)變得容易很多。但是,也正是由于這個(gè)原因,高度封裝開(kāi)源句的流行使得很少有人愿意深入了解其中涉及的關(guān)鍵技術(shù),導(dǎo)致現(xiàn)有的爬蟲(chóng)在質(zhì)量、性能、創(chuàng)新性上都受到很大的影響。深入分析產(chǎn)生這種現(xiàn)象的原因之后,我們發(fā)現(xiàn)其中存在技術(shù)因素和非技術(shù)因素,可以總結(jié)為以下幾個(gè)方面。①低質(zhì)量的爬蟲(chóng)不遵守Robots 協(xié)議。連接一個(gè)網(wǎng)站之后不檢測(cè)robots.xt文件內(nèi)容,也不解析文件中關(guān)于頁(yè)面訪問(wèn)許可列表的規(guī)定。由于Robots協(xié)議是一個(gè)行業(yè)規(guī)范,忽視或者不遵守該協(xié)議意味著這個(gè)行業(yè)的發(fā)展會(huì)進(jìn)入惡性循環(huán)之中。2爬蟲(chóng)策略沒(méi)有優(yōu)化。一般開(kāi)源系統(tǒng)實(shí)現(xiàn)了寬度優(yōu)先或者深度優(yōu)先的策略,但是并沒(méi)有對(duì)Web頁(yè)面的具體特征做優(yōu)化,此時(shí)很容易對(duì)服務(wù)器造成攻擊,甚至被服務(wù)器屏蔽。③許多爬蟲(chóng)實(shí)現(xiàn)了多線程或者分布式的架構(gòu),這個(gè)看似流行的架構(gòu)對(duì)爬蟲(chóng)而言并非始終高效。即便客戶端架構(gòu)設(shè)計(jì)得再好,如果爬蟲(chóng)策略和增量模式等問(wèn)題沒(méi)有解決,它的效果僅相當(dāng)于增加了很多個(gè)并行的爬蟲(chóng),而且僅針對(duì)同一個(gè)服務(wù)器操作,這種做法對(duì)服務(wù)器的負(fù)面影響極大,而且制約了爬蟲(chóng)的發(fā)展。1.1.2常見(jiàn)爬蟲(chóng)分類和工具基于爬蟲(chóng)的發(fā)展現(xiàn)狀,我們需要利用現(xiàn)有的爬蟲(chóng)框架和工具包,設(shè)計(jì)更有效、合理的爬蟲(chóng),使其能夠在不影響對(duì)方服務(wù)器的前提下,完成目標(biāo)的數(shù)據(jù)爬取任務(wù)。目前,流行的爬蟲(chóng)工具主要來(lái)源于第三方,以下列出一些常見(jiàn)的爬蟲(chóng)工具。