本書詳細(xì)介紹大數(shù)據(jù)采集與清洗的相關(guān)知識和技術(shù),共9章,分別是概述、網(wǎng)絡(luò)爬蟲基礎(chǔ)、網(wǎng)頁數(shù)據(jù)抓取、緩存下載頁面、并發(fā)/并行爬取、用Selenium抓取動態(tài)內(nèi)容、Scrapy爬蟲框架及其應(yīng)用、大數(shù)據(jù)平臺系統(tǒng)日志采集、pandas數(shù)據(jù)清洗。本書大體上由數(shù)據(jù)采集(第2~8章)和數(shù)據(jù)清洗(第9章)兩部分內(nèi)容構(gòu)成,以Python作為編程語言。數(shù)據(jù)采集部分以Web數(shù)據(jù)采集為主,也涉及Hadoop大數(shù)據(jù)平臺的數(shù)據(jù)采集,內(nèi)容由淺入深,循序漸進(jìn),理論與實踐相結(jié)合,幫助讀者理解和掌握數(shù)據(jù)采集的相關(guān)技術(shù);數(shù)據(jù)清洗部分主要介紹pandas庫的使用,幫助讀者掌握數(shù)據(jù)清洗的方法。本書每章都有配套的習(xí)題,有助于讀者鞏固所學(xué)知?識。
本書可作為高校數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)、信息管理與信息系統(tǒng)等專業(yè)相關(guān)課程的教材,也可作為大數(shù)據(jù)工程師的必備手冊,還可作為網(wǎng)絡(luò)爬蟲愛好者和計算機領(lǐng)域的技術(shù)人員的參考?書。
(1)內(nèi)容詳實,實例豐富
本書各章內(nèi)容講解詳細(xì),由淺入深,可操作性強;提供了大量的實例及其實現(xiàn)代碼。每章后面提供了習(xí)題,以供讀者鞏固所學(xué)知識和進(jìn)一步提高。
(2)提供一個爬蟲示例網(wǎng)站
本書提供了一個爬蟲示例網(wǎng)站——全國高;拘畔ⅲ鳛榕老x爬取的目標(biāo)網(wǎng)站。該網(wǎng)站專門供數(shù)據(jù)采集聯(lián)系實踐使用。
(3)提供在線實訓(xùn)
人郵和鯨大數(shù)據(jù)實訓(xùn)平臺為本書提供在線實訓(xùn)。
阮宗利 ◎主講課程 1.主講本科生必修課:《C++程序設(shè)計》、《Windows程序設(shè)計》、《數(shù)據(jù)庫原理與應(yīng)用》、《計算機網(wǎng)絡(luò)與編程》、《MPI并行程序設(shè)計》、《Java語言》、《數(shù)學(xué)實驗》、《Python語言與實訓(xùn)》、《大數(shù)據(jù)采集與可視化》、《專業(yè)綜合實訓(xùn)》等課程。 ◎承擔(dān)和參與項目 1.近年來,主持的代表性科研項目: (1)海洋數(shù)值模擬與FVCOM模式研究,自主創(chuàng)新科研計劃項目(理工科)_科技專項,2019-2021。 (2)“面向云架構(gòu)的海洋數(shù)值預(yù)報模式關(guān)鍵技術(shù)研究”子課題合作項目,國家重點研發(fā)計劃,2018-2021。 2.近年來,參與的代表性科研項目: (1)變分?jǐn)?shù)階移動-不動模型的高性能二次樣條配置方法研究,自主創(chuàng)新科研計劃項目(理工科)_強基專項,2022-2024。 (2)海上高質(zhì)量充填防砂管柱與參數(shù)優(yōu)化研究,橫向項目,2022-2022。 (3)基于中法海洋星風(fēng)浪同步觀測的海浪譜同化方法研究,國家自然科學(xué)基金【面上項目】,2022-2025 (4)局地化隱式粒子濾波及其海浪數(shù)據(jù)同化應(yīng)用,山東省自然科學(xué)基金【面上項目】,2020-2023. ◎獲獎情況(除教師個人獲獎之外,還包含指導(dǎo)學(xué)生獲獎情況) 1. 指導(dǎo)本科畢業(yè)設(shè)計.校級優(yōu)秀畢業(yè)設(shè)計(論文),2023。 2. 指導(dǎo)全國大學(xué)生數(shù)學(xué)建模競賽. 山東省一等獎、三等獎,2023。 3. 指導(dǎo)全國大學(xué)生數(shù)學(xué)建模競賽. 山東省二等獎,2022。 4. 指導(dǎo)全國大學(xué)生數(shù)學(xué)建模競賽. 山東省三等獎,2019。 5.《數(shù)值計算方法(第二版)》.中國石油大學(xué)(華東)教學(xué)成果二等獎,2011,排名第3。
第 1章 概述 1
1.1 大數(shù)據(jù)來源 1
1.2 數(shù)據(jù)采集方法與基本流程 2
1.2.1 數(shù)據(jù)采集方法 2
1.2.2 數(shù)據(jù)采集基本流程 2
1.3 數(shù)據(jù)清洗方法與基本流程 3
1.3.1 數(shù)據(jù)清洗方法 3
1.3.2 數(shù)據(jù)清洗工具 4
1.3.3 數(shù)據(jù)清洗基本流程 4
1.4 本書主要內(nèi)容及主要案例 5
1.4.1 主要內(nèi)容 5
1.4.2 主要案例 5
1.4.3 編程工具 8
1.5 本章小結(jié) 8
1.6 習(xí)題 8
第 2章 網(wǎng)絡(luò)爬蟲基礎(chǔ) 9
2.1 網(wǎng)絡(luò)爬蟲簡介 9
2.1.1 網(wǎng)絡(luò)爬蟲分類 9
2.1.2 網(wǎng)絡(luò)爬蟲應(yīng)遵守的基本準(zhǔn)則 10
2.2 調(diào)研目標(biāo)網(wǎng)站 10
2.2.1 了解目標(biāo)網(wǎng)站所采用的技術(shù)與
審查網(wǎng)頁元素 11
2.2.2 了解網(wǎng)站結(jié)構(gòu)與規(guī)模 13
2.2.3 分析robots.txt文件 15
2.2.4 分析網(wǎng)站地圖文件
sitemap.xml 16
2.3 使用urllib包下載網(wǎng)頁 16
2.3.1 下載頁面HTML源代碼 17
2.3.2 設(shè)置字符編碼 17
2.3.3 存儲HTML源代碼至文件 18
2.3.4 異常處理 19
2.3.5 下載重試 20
2.3.6 設(shè)置用戶代理 22
2.3.7 獲取網(wǎng)頁字符集 24
2.4 使用requests包下載網(wǎng)頁 26
2.4.1 requests包簡介 26
2.4.2 基于requests包的頁面
下載器 28
2.5 網(wǎng)絡(luò)爬蟲的實現(xiàn) 31
2.5.1 站點地圖爬蟲 31
2.5.2 鏈接模板爬蟲 34
2.5.3 鏈接跟蹤爬蟲 39
2.6 對爬蟲限速 44
2.6.1 爬蟲限速器Throttle類 44
2.6.2 限速器安裝到鏈接跟蹤爬蟲 46
2.7 讓爬蟲遵守站點robots協(xié)議 47
2.7.1 使用urllib.robotparser模塊
解析robots.txt文件 47
2.7.2 為鏈接跟蹤爬蟲添加robot
解析器 48
2.8 本章小結(jié) 50
2.9 習(xí)題 50
第3章 網(wǎng)頁數(shù)據(jù)抓取 51
3.1 了解HTML 51
3.1.1 什么是HTML 51
3.1.2 HTML文檔結(jié)構(gòu) 51
3.1.3 HTML元素的屬性 53
3.2 在Web瀏覽器中審查網(wǎng)頁 53
3.3 使用正則表達(dá)式抓取數(shù)據(jù) 55
3.3.1 正則表達(dá)式 55
3.3.2 re模塊 58
3.3.3 使用re模塊抓取頁面數(shù)據(jù) 60
3.4 使用Beautiful Soup包抓取
數(shù)據(jù) 64
3.4.1 Beautiful Soup包 65
3.4.2 遍歷soup文檔樹 66
3.4.3 搜索soup文檔樹 69
3.4.4 提取元素中的內(nèi)容文本 72
3.4.5 使用Beautiful Soup抓取頁面
數(shù)據(jù) 73
3.4.6 使用Web瀏覽器工具測試和
獲取CSS選擇器 74
3.5 使用lxml包抓取數(shù)據(jù) 77
3.5.1 lxml中使用CSS選擇器 78
3.5.2 XPath選擇器 80
3.5.3 使用Web瀏覽器工具測試和
獲取XPath選擇器 84
3.5.4 使用XPath選擇器抓取頁面
數(shù)據(jù) 85
3.6 3種抓取方法性能對比 86
3.7 本章小結(jié) 88
3.8 習(xí)題 88
第4章 緩存下載頁面 90
4.1 將HTML文檔緩存至磁盤 90
4.1.1 解析URL 91
4.1.2 編寫磁盤緩存類 92
4.1.3 為磁盤緩存添加失效時間 94
4.1.4 將磁盤緩存功能集成到爬蟲
下載器類 96
4.1.5 在鏈接跟蹤爬蟲中使用
新下載器 97
4.1.6 在鏈接跟蹤爬蟲中使用磁盤
緩存 98
4.2 使用Redis 101
4.2.1 Redis安裝與配置 101
4.2.2 Redis基本命令 105
4.2.3 Redis可視化管理工具 112
4.2.4 在Python程序中訪問Redis 115
4.3 將HTML文檔緩存至Redis 116
4.3.1 編寫Redis緩存類 116
4.3.2 在鏈接跟蹤爬蟲中使用Redis
緩存 118
4.4 本章小結(jié) 121
4.5 習(xí)題 121
第5章 并發(fā)/并行爬取 123
5.1 線程與進(jìn)程 123
5.2 使用threading模塊創(chuàng)建多線程
爬蟲 126
5.2.1 threading模塊 126
5.2.2 線程的生命周期 129
5.2.3 線程等待 129
5.2.4 創(chuàng)建守護線程 132
5.2.5 為鏈接跟蹤爬蟲創(chuàng)建
多線程 133
5.3 使用線程池實現(xiàn)多線程 140
5.3.1 線程池的使用 140
5.3.2 使用線程池實現(xiàn)多線程的鏈接
跟蹤爬蟲 142
5.4 使用multiprocessing包創(chuàng)建
多進(jìn)程爬蟲 146
5.4.1 multiprocessing包 146
5.4.2 為鏈接跟蹤爬蟲創(chuàng)建多進(jìn)程
多線程 149
5.5 串行爬蟲、多線程爬蟲與多進(jìn)程
爬蟲性能比較 156
5.6 本章小結(jié) 158
5.7 習(xí)題 158
第6章 用Selenium抓取動態(tài)
內(nèi)容 160
6.1 了解JavaScript、jQuery和
AJAX 160
6.1.1 為何抓取數(shù)據(jù)失敗了 160
6.1.2 JavaScript、jQuery和
AJAX 162
6.2 使用Selenium獲取動態(tài)數(shù)據(jù) 165
6.2.1 安裝Selenium與
WebDriver 165
6.2.2 使用Selenium與瀏覽器
交互 166
6.2.3 案例1—爬取火車票信息 177
6.2.4 案例2—爬取京東商城
數(shù)據(jù) 183
6.3 通過數(shù)據(jù)請求API獲取數(shù)據(jù) 189
6.4 本章小結(jié) 191
6.5 習(xí)題 191
第7章 Scrapy爬蟲框架及其
應(yīng)用 192
7.1 Scrapy爬蟲框架簡介 192
7.1.1 Scrapy爬蟲框架結(jié)構(gòu) 192
7.1.2 Scrapy基本工作流程 193
7.2 安裝Scrapy 194
7.3 創(chuàng)建Scrapy爬蟲項目 194
7.3.1 創(chuàng)建基于Scrapy爬蟲框架的
爬蟲項目 194
7.3.2 定義數(shù)據(jù)模型 195
7.3.3 創(chuàng)建爬蟲 196
7.3.4 修改settings.py中的某些
參數(shù) 198
7.3.5 運行爬蟲項目 198
7.3.6 保存爬取結(jié)果 200
7.4 使用項目管道 200
7.4.1 啟用項目管道 200
7.4.2 實現(xiàn)項目管道功能 201
7.5 使用中間件 203
7.5.1 編寫爬蟲中間件 203
7.5.2 下載器中間件 207
7.6 本章小結(jié) 210
7.7 習(xí)題 211
第8章 大數(shù)據(jù)平臺系統(tǒng)日志
采集 212
8.1 Hadoop系統(tǒng)及相關(guān)集群 212
8.1.1 Hadoop系統(tǒng) 212
8.1.2 ZooKeeper集群 213
8.1.3 Kafka集群 214
8.1.4 Flume集群 215
8.1.5 Spark集群 217
8.1.6 系統(tǒng)架構(gòu) 217
8.2 構(gòu)建Flume日志采集系統(tǒng) 218
8.2.1 安裝Flume集群 218
8.2.2 使用Flume采集數(shù)據(jù) 219
8.3 構(gòu)建Kafka分布式消息系統(tǒng) 224
8.3.1 安裝、配置和啟動Kafka
集群 224
8.3.2 Kafka集群測試 226
8.4 集成Flume與Kafka集群 228
8.4.1 配置兩個Flume Agent
文件 229
8.4.2 Flume-Kafka-HDFS集群
測試 232
8.5 本章小結(jié) 234
8.6 習(xí)題 234
第9章 pandas數(shù)據(jù)清洗 235
9.1 pandas中的數(shù)據(jù)對象 235
9.1.1 Series對象 235
9.1.2 DataFrame對象 237
9.1.3 創(chuàng)建數(shù)據(jù)框 241
9.1.4 數(shù)據(jù)框轉(zhuǎn)換為其他格式的
數(shù)據(jù) 242
9.2 數(shù)據(jù)框數(shù)據(jù)存取 244
9.2.1 []運算符 244
9.2.2 loc[]和iloc[]存取器 246
9.2.3 at[]和iat[]存取器 248
9.2.4 多級標(biāo)簽的存取 248
9.2.5 get()函數(shù) 249
9.2.6 head()函數(shù)和tail()函數(shù) 249
9.2.7 nlargest()函數(shù)和nsmallest()
函數(shù) 250
9.2.8 query()函數(shù) 251
9.3 數(shù)據(jù)讀取與保存 251
9.3.1 讀寫文本文件 252
9.3.2 讀寫Excel文件 253
9.3.3 讀寫SQL數(shù)據(jù)庫 255
9.4 操作數(shù)據(jù)框 257
9.4.1 修改列索引與行索引 258
9.4.2 添加列、插入新列與刪除列 258
9.4.3 調(diào)整列順序 259
9.4.4 添加行與刪除行 260
9.4.5 按索引排序與按值排序 261
9.4.6 列值轉(zhuǎn)化為行索引與行索引
轉(zhuǎn)化為列值 262
9.4.7 數(shù)據(jù)透視與數(shù)據(jù)融合 263
9.5 缺失值處理 267
9.5.1 不滿足條件的元素置空 267
9.5.2 判斷元素是否為NA 268
9.5.3 統(tǒng)計non-NA元素的數(shù)量 268
9.5.4 刪除含有NA元素的列或行 268
9.5.5 填充NA 269
9.6 刪除重復(fù)數(shù)據(jù) 271
9.7 數(shù)值運算函數(shù) 271
9.8 字符串?dāng)?shù)據(jù)處理 272
9.9 日期數(shù)據(jù)處理 273
9.10 數(shù)據(jù)清洗案例 274
9.10.1 案例1—清洗影視數(shù)據(jù) 274
9.10.2 案例2—清洗心率數(shù)據(jù) 277
9.11 本章小結(jié) 281
9.12 習(xí)題 282
附錄 示例網(wǎng)站運行發(fā)布操作
指南 283