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