第1章 最佳拍檔:網(wǎng)絡(luò)爬蟲與Python語言
1.1 什么是網(wǎng)絡(luò)爬蟲 1
1.1.1 網(wǎng)絡(luò)爬蟲的定義 2
1.1.2 網(wǎng)絡(luò)爬蟲的工作流程 2
1.1.3 網(wǎng)絡(luò)爬蟲的分類 3
1.1.4 為什么選擇用Python編寫網(wǎng)絡(luò)爬蟲 4
1.1.5 編寫爬蟲的注意事項(xiàng) 4
1.2 Python環(huán)境配置 5
1.2.1 Python的安裝 5
1.2.2 Python第三方庫的安裝 6
【示例1-1】使用包管理器安裝科學(xué)計(jì)算庫numpy 6
【示例1-2】源代碼方式安裝xlrd庫(使用setup.py文件) 7
【示例1-3】源代碼方式安裝xlrd庫(使用whl文件) 8
1.2.3 Python開發(fā)工具的選擇 8
【示例1-4】將文本編輯器配置成Python開發(fā)工具(以Notepad++為例) 12
1.3 Python基本語法 13
1.3.1 Python書寫規(guī)則 13
1.3.2 Python基本數(shù)據(jù)類型 18
【示例1-5】以列表a = ['a','a','b','c','d','d','e']為例講解List的基本操作 21
【示例1-6】以列表a = [1,2,3,4,5,6,7,8]為例講解數(shù)據(jù)型列表的屬性分析 23
【示例1-7】以字典a為例,講解字典的基本操作 25
1.3.3 Python獨(dú)有數(shù)據(jù)生成方式:推導(dǎo)式 29
1.3.4 函數(shù) 30
【示例1-8】局部變量與全局變量重名的運(yùn)行結(jié)果與解決方案 31
1.3.5 條件與循環(huán) 34
1.3.6 類與對(duì)象 35
【示例1-9】請(qǐng)輸出學(xué)生信息中某學(xué)生的班級(jí)、姓名和總分?jǐn)?shù) 35
1.3.7 Python 2代碼轉(zhuǎn)為Python 3代碼 36
【示例1-10】以文件test.py為例,介紹Python 2代碼到Python 3代碼的轉(zhuǎn)化 37
第2章 應(yīng)知應(yīng)會(huì):網(wǎng)絡(luò)爬蟲基本知識(shí)
2.1 網(wǎng)頁的構(gòu)成 38
2.1.1 HTML基本知識(shí) 39
2.1.2 網(wǎng)頁中各元素的排布 46
【示例2-1】以新浪博客文本為例,學(xué)習(xí)各類元素的排布規(guī)則 46
2.2 正則表達(dá)式 48
2.2.1 正則表達(dá)式簡介 48
2.2.2 Python語言中的正則表達(dá)式 49
【示例2-2】正則表達(dá)式應(yīng)用中,當(dāng)匹配次數(shù)達(dá)到10萬時(shí),預(yù)先編譯對(duì)正則表達(dá)式性能的提升 51
2.2.3 綜合實(shí)例:正則表達(dá)式的實(shí)際應(yīng)用——在二手房網(wǎng)站中提取有用信息 52
2.3 漢字編碼問題 54
2.3.1 常見編碼簡介 54
2.3.2 常用編程環(huán)境的默認(rèn)編碼 55
2.3.3 網(wǎng)頁編碼 56
2.3.4 編碼轉(zhuǎn)換 56
2.4 網(wǎng)絡(luò)爬蟲的行為準(zhǔn)則 57
2.4.1 遵循Robots協(xié)議 57
2.4.2 網(wǎng)絡(luò)爬蟲的合法性 59
第3章 靜態(tài)網(wǎng)頁爬取
3.1 Python常用網(wǎng)絡(luò)庫 61
3.1.1 urllib庫 62
【示例3-1】從眾多代理IP中選取可用的IP 63
【示例3-2】百度搜索“Python”url演示Parse模塊應(yīng)用 66
3.1.2 綜合實(shí)例:批量獲取高清壁紙 68
3.1.3 requests庫 71
【示例3-3】用requests實(shí)現(xiàn)豆瓣網(wǎng)站模擬登錄 72
3.1.4 綜合實(shí)例:爬取歷史天氣數(shù)據(jù)預(yù)測天氣變化 74
3.2 網(wǎng)頁解析工具 77
3.2.1 更易上手:BeautifulSoup 77
【示例3-4】解析HTML文檔(以豆瓣讀書《解憂雜貨店》為例) 78
3.2.2 更快速度:lxml 81
3.2.3 BeautifulSoup與lxml對(duì)比 82
【示例3-5】爬取豆瓣讀書中近5年出版的評(píng)分7分以上的漫畫 82
【示例3-6】BeautifulSoup和lxml解析同樣網(wǎng)頁速度測試(基于網(wǎng)易新聞首頁) 85
3.2.4 綜合實(shí)例:在前程無憂中搜索并抓取不同編程語言崗位的平均收入 85
第4章 動(dòng)態(tài)網(wǎng)頁爬取
4.1 AJAX技術(shù) 89
4.1.1 獲取AJAX請(qǐng)求 90
4.1.2 綜合實(shí)例:抓取簡書百萬用戶個(gè)人主頁 91
4.2 Selenium操作瀏覽器 97
4.2.1 驅(qū)動(dòng)常規(guī)瀏覽器 97
4.2.2 驅(qū)動(dòng)無界面瀏覽器 100
4.2.3 綜合實(shí)例:模擬登錄新浪微博并下載短視頻 101
4.3 爬取移動(dòng)端數(shù)據(jù) 103
4.3.1 Fiddler工具配置 103
4.3.2 綜合實(shí)例:Fiddle實(shí)際應(yīng)用——爬取大角蟲漫畫信息 105
第5章 統(tǒng)一架構(gòu)與規(guī)范:網(wǎng)絡(luò)爬蟲框架
5.1 最流行的網(wǎng)絡(luò)爬蟲框架:Scrapy 111
5.1.1 安裝須知與錯(cuò)誤解決方案 111
5.1.2 Scrapy的組成與功能 112
5.2 綜合實(shí)例:使用Scrapy構(gòu)建觀影指南 118
5.2.1 網(wǎng)絡(luò)爬蟲準(zhǔn)備工作 119
5.2.2 編寫Spider 121
5.2.3 處理Item 123
5.2.4 運(yùn)行網(wǎng)絡(luò)爬蟲 124
5.2.5 數(shù)據(jù)分析 124
5.3 更易上手的網(wǎng)絡(luò)爬蟲框架:Pyspider 126
5.3.1 創(chuàng)建Pyspider項(xiàng)目 127
【示例5-1】利用Pyspider創(chuàng)建抓取煎蛋網(wǎng)項(xiàng)目并測試代碼 127
5.3.2 運(yùn)行Pyspider項(xiàng)目 129
第6章 反爬蟲應(yīng)對(duì)策略
6.1 設(shè)置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 驗(yàn)證碼識(shí)別 140
6.3.1 識(shí)別簡單的驗(yàn)證碼 141
【示例6-1】通過pytesseract庫識(shí)別8個(gè)簡單的驗(yàn)證碼,并逐步提升準(zhǔn)確率 141
6.3.2 識(shí)別漢字驗(yàn)證碼 146
6.3.3 人工識(shí)別復(fù)雜驗(yàn)證碼 146
6.3.4 利用Cookie繞過驗(yàn)證碼 149
第7章 提升網(wǎng)絡(luò)爬蟲效率
7.1 網(wǎng)絡(luò)爬蟲策略 152
7.1.1 廣度優(yōu)先策略 153
7.1.2 深度優(yōu)先策略 153
7.1.3 按網(wǎng)頁權(quán)重決定爬取優(yōu)先級(jí) 154
7.1.4 綜合實(shí)例:深度優(yōu)先和廣度優(yōu)先策略效率對(duì)比
(抓取慕課網(wǎng)實(shí)戰(zhàn)課程地址) 154
7.2 提升網(wǎng)絡(luò)爬蟲的速度 158
7.2.1 多線程 159
【示例7-1】使用4個(gè)線程同步抓取慕課網(wǎng)實(shí)戰(zhàn)課程地址(基于深度優(yōu)先策略) 159
7.2.2 多進(jìn)程 161
7.2.3 分布式爬取 162
7.2.4 綜合實(shí)例:利用現(xiàn)有知識(shí)搭建分布式爬蟲(爬取百度貼吧中的帖子) 162
第8章 更專業(yè)的爬取數(shù)據(jù)存儲(chǔ)與處理:數(shù)據(jù)庫
8.1 受歡迎的關(guān)系型數(shù)據(jù)庫:MySQL 170
8.1.1 MySQL簡介 170
8.1.2 MySQL環(huán)境配置 171
8.1.3 MySQL的查詢語法 174
【示例8-1】使用MySQL查詢語句從數(shù)據(jù)表Countries中選取面積大于10000km2的歐洲國家 177
8.1.4 使用pymysql連接MySQL數(shù)據(jù)庫 178
8.1.5 導(dǎo)入與導(dǎo)出數(shù)據(jù) 179
8.2 應(yīng)對(duì)海量非結(jié)構(gòu)化數(shù)據(jù):MongoDB數(shù)據(jù)庫 180
8.2.1 MongoDB 簡介 180
8.2.2 MongoDB環(huán)境配置 182
8.2.3 MongoDB基本語法 186
8.2.4 使用PyMongo連接MongoDB 188
8.2.5 導(dǎo)入/導(dǎo)出JSON文件 189
第9章 Python文件讀取
9.1 Python文本文件讀寫 190
9.2 數(shù)據(jù)文件CSV 192
9.3 數(shù)據(jù)交換格式JSON 193
9.3.1 JSON模塊的使用 194
【示例9-1】請(qǐng)用JSON模塊將data變量(包含列表、數(shù)字和字典的數(shù)組)轉(zhuǎn)換成字符串并還原 194
9.3.2 JSON模塊的數(shù)據(jù)轉(zhuǎn)換 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 重要的數(shù)據(jù)處理庫:Pandas庫 199
9.6.1 使用pandas庫處理CSV文件 200
9.6.2 使用pandas庫處理JSON文件 200
9.6.3 使用pandas庫處理HTML文件 202
【示例9-2】用read_html()將某二手房網(wǎng)站表格中的數(shù)據(jù)提取出來 203
9.6.4 使用pandas庫處理SQL文件 203
9.7 調(diào)用Office軟件擴(kuò)展包: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 綜合實(shí)例:自動(dòng)將網(wǎng)絡(luò)文章轉(zhuǎn)化為PPT文檔 211
第10章 通過API獲取數(shù)據(jù)
10.1 免費(fèi)財(cái)經(jīng)API——TuShare 214
10.1.1 獲取股票交易數(shù)據(jù) 215
【示例10-1】獲取某股票2017年8月份的周K線數(shù)據(jù) 215
10.1.2 獲取宏觀經(jīng)濟(jì)數(shù)據(jù) 217
10.1.3 獲取電影票房數(shù)據(jù) 219
10.2 新浪微博API的調(diào)用 220
10.2.1 創(chuàng)建應(yīng)用 220
10.2.2 使用API 222
10.3 調(diào)用百度地圖API 225
10.3.1 獲取城市經(jīng)緯度 226
【示例10-2】使用百度地圖API獲取南京市的經(jīng)緯度信息 226
10.3.2 定位網(wǎng)絡(luò)IP 226
【示例10-3】使用百度API定位IP地址(223.112.112.144) 226
10.3.3 獲取全景靜態(tài)圖 227
10.4 調(diào)用淘寶API 228
第11章 網(wǎng)絡(luò)爬蟲工具
11.1 使用Excel采集網(wǎng)頁數(shù)據(jù) 231
11.1.1 抓取網(wǎng)頁中的表格 232
11.1.2 抓取非表格的結(jié)構(gòu)化數(shù)據(jù) 233
11.2 使用Web Scraper插件 237
11.2.1 安裝Web Scraper 237
11.2.2 Web Scraper的使用 238
【示例11-1】使用Web Scraper爬取當(dāng)當(dāng)網(wǎng)小說書目 238
11.3 商業(yè)化爬取工具 240
11.3.1 自定義采集 241
【示例11-2】利用網(wǎng)絡(luò)爬蟲軟件八爪魚自定義采集當(dāng)當(dāng)網(wǎng)圖書信息 241
11.3.2 網(wǎng)站簡易采集 245
【示例11-3】利用網(wǎng)絡(luò)爬蟲軟件八爪魚的網(wǎng)絡(luò)簡易采集方式抓取房天下網(wǎng)中的合肥新房房價(jià)數(shù)據(jù) 245
第12章 數(shù)據(jù)分析工具:科學(xué)計(jì)算庫
12.1 單一類型數(shù)據(jù)高效處理:Numpy庫 248
12.1.1 ndarray數(shù)組 248
【示例12-1】對(duì)一維ndarray數(shù)組a進(jìn)行讀取、修改和切片操作 249
【示例12-2】對(duì)多維ndarray數(shù)組b進(jìn)行讀取、修改和切片操作 250
【示例12-3】對(duì)多維ndarray數(shù)組n進(jìn)行矩陣運(yùn)算(拼接、分解、轉(zhuǎn)置、行列式、
求逆和點(diǎn)乘) 252
12.1.2 Numpy常用函數(shù) 253
【示例12-4】對(duì)多維ndarray數(shù)組a進(jìn)行統(tǒng)計(jì)操作 253
【示例12-5】對(duì)一維ndarray數(shù)組a進(jìn)行數(shù)據(jù)處理操作(去重、直方圖統(tǒng)計(jì)、相關(guān)
系數(shù)、分段、多項(xiàng)式擬合) 256
12.1.3 Numpy性能優(yōu)化 257
12.2 復(fù)雜數(shù)據(jù)全面處理:Pandas庫 258
12.2.1 Pandas庫中的4種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu) 258
12.2.2 Pandas使用技巧 264
【示例12-6】對(duì)比普通for循環(huán)遍歷與iterrows()遍歷方法的速度差異 264
12.3 Python機(jī)器學(xué)習(xí)庫:Scikit-learn 268
【示例12-7】以鳶尾花數(shù)據(jù)為例,使用Sklearn進(jìn)行監(jiān)督學(xué)習(xí)的基本建模過程(決策樹模型) 269
第13章 掌握繪圖軟件:將數(shù)據(jù)可視化
13.1 應(yīng)用廣泛的數(shù)據(jù)可視化:Excel繪圖 271
13.1.1 繪制(對(duì)比)柱形圖 272
13.1.2 繪制餅圖并添加標(biāo)注 273
13.1.3 其他圖形 275
13.1.4 Excel頻率分布直方圖 276
【示例13-1】利用Excel繪制全國各省市城鎮(zhèn)人員平均工資頻率分布直方圖 276
13.2 適合處理海量數(shù)據(jù):Tableau繪圖 278
13.2.1 基本操作:導(dǎo)入數(shù)據(jù) 278
13.2.2 繪制(多重)柱狀對(duì)比圖 279
13.2.3 智能顯示:圖形轉(zhuǎn)換 281
13.2.4 繪制頻率分布直方圖 281
【示例13-2】利用Tableau繪制2015年我國城鎮(zhèn)就業(yè)人員平均工資頻率分布直方圖 281
13.3 完善的二維繪圖庫:Matplotlib/Seaborn 283
13.3.1 使用Matplotlib繪制函數(shù)圖表 283
13.3.2 使用Matplotlib繪制統(tǒng)計(jì)圖表 285
13.4 優(yōu)化:Seaborn的使用 289
13.5 綜合實(shí)例:利用Matplotlib構(gòu)建合肥美食地圖 293
13.5.1 繪制區(qū)域地圖 293
13.5.2 利用百度地圖Web服務(wù)API獲取美食地址 294
13.5.3 數(shù)據(jù)分析 298
13.5.4 繪制熱力圖完善美食地圖展示 300