內容簡介
海量數據的產生和大數據的高價值利用,讓數據爬取變得日益重要。本書為讀者介紹了如何使用Python編寫網路爬蟲批量採集網際網路數據,如何處理與保存採集到的信息,以及如何從眾多紛亂的數據中提取到真正有用的信息。本書末尾介紹了幾種常用的數據可視化工具。讓讀者能夠從頭到尾完整地完成網路數據的採集與分析項目。
本書理論與實例並重,既能夠幫助數據從業者快速提升工作效率,又可以幫助大數據愛好者用網路爬蟲方便生活。
圖書目錄
第1章 最佳拍檔:網路爬蟲與Python語言
1.1 什麼是網路爬蟲 1
1.1.1 網路爬蟲的定義 2
1.1.2 網路爬蟲的工作流程 2
1.1.3 網路爬蟲的分類 3
1.1.4 為什麼選擇用Python編寫網路爬蟲 4
1.1.5 編寫爬蟲的注意事項 4
1.2 Python環境配置 5
1.2.1 Python的安裝 5
1.2.2 Python第三方庫的安裝 6
【示例1-1】使用包管理器安裝科學計算庫numpy 6
【示例1-2】原始碼方式安裝xlrd庫(使用setup.py檔案) 7
【示例1-3】原始碼方式安裝xlrd庫(使用whl檔案) 8
1.2.3 Python開發工具的選擇 8
【示例1-4】將文本編輯器配置成Python開發工具(以Notepad++為例) 12
1.3 Python基本語法 13
1.3.1 Python書寫規則 13
1.3.2 Python基本數據類型 18
【示例1-5】以列表a = ['a','a','b','c','d','d','e']為例講解List的基本操作 21
【示例1-6】以列表a = [1,2,3,4,5,6,7,8]為例講解數據型列表的屬性分析 23
【示例1-7】以字典a為例,講解字典的基本操作 25
1.3.3 Python獨有數據生成方式:推導式 29
1.3.4 函式 30
【示例1-8】局部變數與全局變數重名的運行結果與解決方案 31
1.3.5 條件與循環 34
1.3.6 類與對象 35
【示例1-9】請輸出學生信息中某學生的班級、姓名和總分數 35
1.3.7 Python 2代碼轉為Python 3代碼 36
【示例1-10】以檔案test.py為例,介紹Python 2代碼到Python 3代碼的轉化 37
第2章 應知應會:網路爬蟲基本知識
2.1 網頁的構成 38
2.1.1 HTML基本知識 39
2.1.2 網頁中各元素的排布 46
【示例2-1】以新浪部落格文本為例,學習各類元素的排布規則 46
2.2 正則表達式 48
2.2.1 正則表達式簡介 48
2.2.2 Python語言中的正則表達式 49
【示例2-2】正則表達式套用中,當匹配次數達到10萬時,預先編譯對正則表達式性能的提升 51
2.2.3 綜合實例:正則表達式的實際套用——在二手房網站中提取有用信息 52
2.3 漢字編碼問題 54
2.3.1 常見編碼簡介 54
2.3.2 常用編程環境的默認編碼 55
2.3.3 網頁編碼 56
2.3.4 編碼轉換 56
2.4 網路爬蟲的行為準則 57
2.4.1 遵循Robots協定 57
2.4.2 網路爬蟲的合法性 59
第3章 靜態網頁爬取
3.1 Python常用網路庫 61
3.1.1 urllib庫 62
【示例3-1】從眾多代理IP中選取可用的IP 63
【示例3-2】百度搜尋“Python”url演示Parse模組套用 66
3.1.2 綜合實例:批量獲取高清壁紙 68
3.1.3 requests庫 71
【示例3-3】用requests實現豆瓣網站模擬登錄 72
3.1.4 綜合實例:爬取歷史天氣數據預測天氣變化 74
3.2 網頁解析工具 77
3.2.1 更易上手:BeautifulSoup 77
【示例3-4】解析HTML文檔(以豆瓣讀書《解憂雜貨店》為例) 78
3.2.2 更快速度:lxml 81
3.2.3 BeautifulSoup與lxml對比 82
【示例3-5】爬取豆瓣讀書中近5年出版的評分7分以上的漫畫 82
【示例3-6】BeautifulSoup和lxml解析同樣網頁速度測試(基於網易新聞首頁) 85
3.2.4 綜合實例:在前程無憂中搜尋並抓取不同程式語言崗位的平均收入 85
第4章 動態網頁爬取
4.1 AJAX技術 89
4.1.1 獲取AJAX請求 90
4.1.2 綜合實例:抓取簡書百萬用戶個人主頁 91
4.2 Selenium操作瀏覽器 97
4.2.1 驅動常規瀏覽器 97
4.2.2 驅動無界面瀏覽器 100
4.2.3 綜合實例:模擬登錄新浪微博並下載短視頻 101
4.3 爬取移動端數據 103
4.3.1 Fiddler工具配置 103
4.3.2 綜合實例:Fiddle實際套用——爬取大角蟲漫畫信息 105
第5章 統一架構與規範:網路爬蟲框架
5.1 最流行的網路爬蟲框架:Scrapy 111
5.1.1 安裝須知與錯誤解決方案 111
5.1.2 Scrapy的組成與功能 112
5.2 綜合實例:使用Scrapy構建觀影指南 118
5.2.1 網路爬蟲準備工作 119
5.2.2 編寫Spider 121
5.2.3 處理Item 123
5.2.4 運行網路爬蟲 124
5.2.5 數據分析 124
5.3 更易上手的網路爬蟲框架:Pyspider 126
5.3.1 創建Pyspider項目 127
【示例5-1】利用Pyspider創建抓取煎蛋網項目並測試代碼 127
5.3.2 運行Pyspider項目 129
第6章 反爬蟲應對策略
6.1 設定Headers信息 132
6.1.1 User-Agent 133
6.1.2 Cookie 136
6.2 建立IP代理池 138
6.2.1 建立IP代理池的思路 138
6.2.2 建立IP代理池的步驟 138
6.3 驗證碼識別 140
6.3.1 識別簡單的驗證碼 141
【示例6-1】通過pytesseract庫識別8個簡單的驗證碼,並逐步提升準確率 141
6.3.2 識別漢字驗證碼 146
6.3.3 人工識別複雜驗證碼 146
6.3.4 利用Cookie繞過驗證碼 149
第7章 提升網路爬蟲效率
7.1 網路爬蟲策略 152
7.1.1 廣度優先策略 153
7.1.2 深度優先策略 153
7.1.3 按網頁權重決定爬取優先權 154
7.1.4 綜合實例:深度優先和廣度優先策略效率對比
(抓取慕課網實戰課程地址) 154
7.2 提升網路爬蟲的速度 158
7.2.1 多執行緒 159
【示例7-1】使用4個執行緒同步抓取慕課網實戰課程地址(基於深度優先策略) 159
7.2.2 多進程 161
7.2.3 分散式爬取 162
7.2.4 綜合實例:利用現有知識搭建分散式爬蟲(爬取百度貼吧中的帖子) 162
第8章 更專業的爬取數據存儲與處理:資料庫
8.1 受歡迎的關係型資料庫:MySQL 170
8.1.1 MySQL簡介 170
8.1.2 MySQL環境配置 171
8.1.3 MySQL的查詢語法 174
【示例8-1】使用MySQL查詢語句從數據表Countries中選取面積大於10000km2的歐洲國家 177
8.1.4 使用pymysql連線MySQL資料庫 178
8.1.5 導入與導出數據 179
8.2 應對海量非結構化數據:MongoDB資料庫 180
8.2.1 MongoDB 簡介 180
8.2.2 MongoDB環境配置 182
8.2.3 MongoDB基本語法 186
8.2.4 使用PyMongo連線MongoDB 188
8.2.5 導入/導出JSON檔案 189
第9章 Python檔案讀取
9.1 Python文本檔案讀寫 190
9.2 數據檔案CSV 192
9.3 數據交換格式JSON 193
9.3.1 JSON模組的使用 194
【示例9-1】請用JSON模組將data變數(包含列表、數字和字典的數組)轉換成字元串並還原 194
9.3.2 JSON模組的數據轉換 195
9.4 Excel讀寫模組:xlrd 195
9.4.1 讀取Excel檔案 196
9.4.2 寫入Excel單元格 197
9.5 PowerPoint檔案讀寫模組:pptx 197
9.5.1 讀取pptx 197
9.5.2 寫入pptx 198
9.6 重要的數據處理庫:Pandas庫 199
9.6.1 使用pandas庫處理CSV檔案 200
9.6.2 使用pandas庫處理JSON檔案 200
9.6.3 使用pandas庫處理HTML檔案 202
【示例9-2】用read_html()將某二手房網站表格中的數據提取出來 203
9.6.4 使用pandas庫處理SQL檔案 203
9.7 調用Office軟體擴展包:win32com 204
9.7.1 讀取Excel檔案 204
9.7.2 讀取Word檔案 205
9.7.3 讀取PowerPoint檔案 205
9.8 讀取PDF檔案 206
9.8.1 讀取英文PDF文檔 206
9.8.2 讀取中文PDF文檔 208
9.8.3 讀取掃描型PDF文檔 210
9.9 綜合實例:自動將網路文章轉化為PPT文檔 211
第10章 通過API獲取數據
10.1 免費財經API——TuShare 214
10.1.1 獲取股票交易數據 215
【示例10-1】獲取某股票2017年8月份的周K線數據 215
10.1.2 獲取巨觀經濟數據 217
10.1.3 獲取電影票房數據 219
10.2 新浪微博API的調用 220
10.2.1 創建套用 220
10.2.2 使用API 222
10.3 調用百度地圖API 225
10.3.1 獲取城市經緯度 226
【示例10-2】使用百度地圖API獲取南京市的經緯度信息 226
10.3.2 定位網路IP 226
【示例10-3】使用百度API定位IP位址(223.112.112.144) 226
10.3.3 獲取全景靜態圖 227
10.4 調用淘寶API 228
第11章 網路爬蟲工具
11.1 使用Excel採集網頁數據 231
11.1.1 抓取網頁中的表格 232
11.1.2 抓取非表格的結構化數據 233
11.2 使用Web Scraper外掛程式 237
11.2.1 安裝Web Scraper 237
11.2.2 Web Scraper的使用 238
【示例11-1】使用Web Scraper爬取噹噹網小說書目 238
11.3 商業化爬取工具 240
11.3.1 自定義採集 241
【示例11-2】利用網路爬蟲軟體八爪魚自定義採集噹噹網圖書信息 241
11.3.2 網站簡易採集 245
【示例11-3】利用網路爬蟲軟體八爪魚的網路簡易採集方式抓取房天下網中的合肥新房房價數據 245
第12章 數據分析工具:科學計算庫
12.1 單一類型數據高效處理:Numpy庫 248
12.1.1 ndarray數組 248
【示例12-1】對一維ndarray數組a進行讀取、修改和切片操作 249
【示例12-2】對多維ndarray數組b進行讀取、修改和切片操作 250
【示例12-3】對多維ndarray數組n進行矩陣運算(拼接、分解、轉置、行列式、
求逆和點乘) 252
12.1.2 Numpy常用函式 253
【示例12-4】對多維ndarray數組a進行統計操作 253
【示例12-5】對一維ndarray數組a進行數據處理操作(去重、直方圖統計、相關
係數、分段、多項式擬合) 256
12.1.3 Numpy性能最佳化 257
12.2 複雜數據全面處理:Pandas庫 258
12.2.1 Pandas庫中的4種基礎數據結構 258
12.2.2 Pandas使用技巧 264
【示例12-6】對比普通for循環遍歷與iterrows()遍歷方法的速度差異 264
12.3 Python機器學習庫:Scikit-learn 268
【示例12-7】以鳶尾花數據為例,使用Sklearn進行監督學習的基本建模過程(決策樹模型) 269
第13章 掌握繪圖軟體:將數據可視化
13.1 套用廣泛的數據可視化:Excel繪圖 271
13.1.1 繪製(對比)柱形圖 272
13.1.2 繪製餅圖並添加標註 273
13.1.3 其他圖形 275
13.1.4 Excel頻率分布直方圖 276
【示例13-1】利用Excel繪製全國各省市城鎮人員平均工資頻率分布直方圖 276
13.2 適合處理海量數據:Tableau繪圖 278
13.2.1 基本操作:導入數據 278
13.2.2 繪製(多重)柱狀對比圖 279
13.2.3 智慧型顯示:圖形轉換 281
13.2.4 繪製頻率分布直方圖 281
【示例13-2】利用Tableau繪製2015年我國城鎮就業人員平均工資頻率分布直方圖 281
13.3 完善的二維繪圖庫:Matplotlib/Seaborn 283
13.3.1 使用Matplotlib繪製函式圖表 283
13.3.2 使用Matplotlib繪製統計圖表 285
13.4 最佳化:Seaborn的使用 289
13.5 綜合實例:利用Matplotlib構建合肥美食地圖 293
13.5.1 繪製區域地圖 293
13.5.2 利用百度地圖Web服務API獲取美食地址 294
13.5.3 數據分析 298
13.5.4 繪製熱力圖完善美食地圖展示 300
作者簡介
郭卡,遼寧師範大學碩士畢業,安徽外國語學院計算機教師,多年從事一線計算機教學及計算機等級培訓工作,擅長計算機網路技術和教育學類數據統計分析技術,曾在中文核心期刊發表多篇技術論文。
戴亮,中南大學碩士畢業,數據挖掘從業者;在網路爬蟲、數據分析、機器學習等領域有豐富的實戰經驗,在簡書中貢獻了許多高質量的技術文章,深受讀者好評。