《Python爬蟲項目教程(微課版)》以Python語言為基礎,介紹了爬蟲的基礎知識。
《Python爬蟲項目教程(微課版)》包括6個實戰(zhàn)項目,分別為爬取外匯網(wǎng)站數(shù)據(jù)、爬取名言網(wǎng)站數(shù)據(jù)、爬取電影網(wǎng)站數(shù)據(jù)、爬取圖書網(wǎng)站數(shù)據(jù)、爬取商城網(wǎng)站數(shù)據(jù)、爬取景區(qū)網(wǎng)站數(shù)據(jù)。
《Python爬蟲項目教程(微課版)》通過這些項目講解了Python的Web訪問技術、BeautifulSoup的數(shù)據(jù)分析與提取技術、深度優(yōu)先與廣度優(yōu)先順序爬取技術、多線程網(wǎng)頁爬取技術、scrapy分布式爬取框架技術、selenium爬蟲程序技術、AWS中的DynamoDB數(shù)據(jù)庫的NoSQL存儲技術等。
《Python爬蟲項目教程(微課版)》每個項目都遵循由淺入深的學習規(guī)律,采取理論與實踐相結合的方式來引導讀者完成實戰(zhàn)。
《Python爬蟲項目教程(微課版)》可作為計算機軟件技術專業(yè)及其相關專業(yè)的程序設計課程教材。
適讀人群 :本書可作為計算機軟件技術專業(yè)及其相關專業(yè)的程序設計教材。
緊扣學生為中心的主線,在教材中融入課程思政元素,培養(yǎng)愛黨愛國、愛崗敬業(yè)、高素質高技能的軟件人才。
使用項目驅動的形式編寫,每個項目涵蓋了不同的知識與技能點,各個項目按“任
務目標”“知識內(nèi)容”“案例實踐”的結構編寫。
名校名師20余年授課經(jīng)驗集結成書
爬蟲程序指能自動從相關網(wǎng)頁中搜索與提取所需數(shù)據(jù)的程序,提取與存儲這些數(shù)據(jù)是進行數(shù)據(jù)分析的前提與關鍵。Python語言因其簡單、易讀、可擴展的特性,在編寫爬蟲程序方面有特別的優(yōu)勢。尤其是業(yè)界有用Python編寫的各種各樣的爬蟲程序框架供學習者參考,使得Python爬蟲程序的編寫更加簡單、高效。
本書包括6個項目。項目1基于爬取外匯網(wǎng)站數(shù)據(jù),講解Python的Web訪問技術及正則表達式匹配字符串方法。項目2基于爬取名言網(wǎng)站數(shù)據(jù),講解BeautifulSoup的數(shù)據(jù)分析與提取技術。項目3基于爬取電影網(wǎng)站數(shù)據(jù),講解爬取多個網(wǎng)頁數(shù)據(jù)的方法,重點講解網(wǎng)頁的深度優(yōu)先與廣度優(yōu)先順序爬取路徑的構造方法與多線程網(wǎng)頁爬取技術。項目4基于爬取圖書網(wǎng)站數(shù)據(jù),講解目前功能強大的分布式爬取框架scrapy的程序技術。項目5基于爬取商城網(wǎng)站數(shù)據(jù),講解selenium爬蟲程序技術。項目6基于爬取景區(qū)網(wǎng)站數(shù)據(jù),講解AWS中的DynamoDB數(shù)據(jù)庫的NoSQL存儲技術。每個項目都遵循由淺人深的學習規(guī)律,理論與實踐相結合,引導讀者完成實戰(zhàn)。
學習是一個循序漸進的過程,實際的網(wǎng)站結構比較復雜,對初學者來說,一開始就編寫爬蟲程序去爬取一個實際網(wǎng)站的數(shù)據(jù)是比較困難的。因此本書的每個項目都是先指導讀者搭建一個本地模擬網(wǎng)站,再編寫爬蟲程序來爬取本地模擬網(wǎng)站的數(shù)據(jù),從而幫助讀者掌握爬蟲程序的編寫技術。這樣做的好處是使學習內(nèi)容變得簡單、易學,讀者可以先把主要精力放在爬蟲程序的編寫上,而非放在分析網(wǎng)站結構上,等有了一定的編程基礎再去爬取實際網(wǎng)站的數(shù)據(jù)就容易多了。
對于本書,建議分為54學時實施教學。
由于編者知識水平有限,書中難免出現(xiàn)疏漏與不妥之處,歡迎讀者批評指正。
黃銳軍, 深圳信息職業(yè)技術學院軟件學院副教授,研究生學歷。主要從事計算機軟件技術課程教學,有二十多年的職業(yè)教學經(jīng)歷。從事軟件開發(fā),先后為深圳市職業(yè)技能鑒定中心開發(fā)了序列應用軟件。
項目1 爬取外匯網(wǎng)站數(shù)據(jù) 1
1.1 項目任務 1
1.2 搭建爬蟲程序開發(fā)環(huán)境 1
1.2.1 理解爬蟲程序 2
1.2.2 搭建開發(fā)環(huán)境 2
1.3 使用Flask創(chuàng)建Web網(wǎng)站 3
1.3.1 安裝Flask框架 3
1.3.2 創(chuàng)建模擬外匯網(wǎng)站 4
1.3.3 編寫客戶端程序并獲取網(wǎng)站的HTML代碼 5
1.4 使用GET方法訪問Web網(wǎng)站 7
1.4.1 客戶端使用GET方法發(fā)送數(shù)據(jù) 7
1.4.2 服務器端使用GET方法獲取數(shù)據(jù) 8
1.5 使用POST方法訪問Web網(wǎng)站 9
1.5.1 客戶端使用POST方法發(fā)送數(shù)據(jù) 9
1.5.2 服務器端使用POST方法獲取數(shù)據(jù) 10
1.5.3 混合使用GET與POST方法 11
1.6 使用正則表達式匹配數(shù)據(jù) 13
1.6.1 使用正則表達式匹配字符串 14
1.6.2 使用正則表達式爬取數(shù)據(jù) 17
1.7 綜合項目 爬取模擬外匯網(wǎng)站數(shù)據(jù) 18
1.7.1 創(chuàng)建模擬外匯網(wǎng)站 18
1.7.2 解析網(wǎng)站的HTML代碼 19
1.7.3 設計存儲數(shù)據(jù)庫 19
1.7.4 編寫爬蟲程序 20
1.7.5 執(zhí)行爬蟲程序 22
1.8 實戰(zhàn)項目 爬取實際外匯網(wǎng)站數(shù)據(jù) 22
1.8.1 解析網(wǎng)站的HTML代碼 22
1.8.2 爬取網(wǎng)站外匯匯率數(shù)據(jù) 24
1.8.3 設計存儲數(shù)據(jù)庫 25
1.8.4 編寫爬蟲程序 26
1.8.5 執(zhí)行爬蟲程序 28
項目總結 29
練習1 29
項目2 爬取名言網(wǎng)站數(shù)據(jù) 30
2.1 項目任務 30
2.2 使用BeautifulSoup裝載HTML文檔 30
2.2.1 創(chuàng)建模擬名言網(wǎng)站 31
2.2.2 安裝BeautifulSoup程序包 32
2.2.3 裝載HTML文檔 32
2.3 使用BeautifulSoup查找HTML元素 34
2.3.1 使用find()函數(shù)查找 34
2.3.2 查找元素屬性與文本 37
2.3.3 使用find_all()函數(shù)查找 38
2.3.4 使用高級查找 40
2.4 使用BeautifulSoup遍歷文檔元素 42
2.4.1 獲取元素節(jié)點的父節(jié)點 42
2.4.2 獲取元素節(jié)點的直接子節(jié)點 43
2.4.3 獲取元素節(jié)點的所有子孫節(jié)點 44
2.4.4 獲取元素節(jié)點的兄弟節(jié)點 45
2.5 BeautifulSoup支持使用CSS語法進行查找 46
2.5.1 使用CSS語法查找 47
2.5.2 使用屬性的語法規(guī)則 48
2.5.3 使用select()查找子孫節(jié)點 49
2.5.4 使用select()查找直接子節(jié)點 49
2.5.5 使用select()查找兄弟節(jié)點 49
2.5.6 使用select_one()查找單一元素 50
2.6 綜合項目 爬取模擬名言網(wǎng)站數(shù)據(jù) 51
2.6.1 創(chuàng)建模擬名言網(wǎng)站 51
2.6.2 爬取名言數(shù)據(jù) 51
2.6.3 設計存儲數(shù)據(jù)庫 52
2.6.4 編寫爬蟲程序 52
2.6.5 執(zhí)行爬蟲程序 54
2.7 實戰(zhàn)項目 爬取實際名言網(wǎng)站
數(shù)據(jù) 55
2.7.1 解析網(wǎng)站的HTML代碼 55
2.7.2 爬取全部頁面的數(shù)據(jù) 56
2.7.3 編寫爬蟲程序 57
2.7.4 執(zhí)行爬蟲程序 59
項目總結 60
練習2 60
項目3 爬取電影網(wǎng)站數(shù)據(jù) 63
3.1 項目任務 63
3.2 簡單爬取網(wǎng)站數(shù)據(jù) 64
3.2.1 創(chuàng)建模擬電影網(wǎng)站 65
3.2.2 爬取網(wǎng)站數(shù)據(jù) 66
3.2.3 編寫爬蟲程序 68
3.2.4 執(zhí)行爬蟲程序 69
3.3 遞歸爬取網(wǎng)站數(shù)據(jù) 69
3.3.1 創(chuàng)建模擬電影網(wǎng)站 69
3.3.2 解析電影網(wǎng)站結構 72
3.3.3 遞歸爬取電影網(wǎng)站數(shù)據(jù) 72
3.4 深度優(yōu)先爬取網(wǎng)站數(shù)據(jù) 73
3.4.1 深度優(yōu)先法 73
3.4.2 深度優(yōu)先爬蟲程序 74
3.5 廣度優(yōu)先爬取網(wǎng)站數(shù)據(jù) 75
3.5.1 廣度優(yōu)先法 75
3.5.2 廣度優(yōu)先爬蟲程序 76
3.6 爬取翻頁網(wǎng)站數(shù)據(jù) 77
3.6.1 使用Flask模板參數(shù) 77
3.6.2 創(chuàng)建翻頁電影網(wǎng)站 81
3.6.3 編寫爬蟲程序 84
3.6.4 執(zhí)行爬蟲程序 85
3.7 爬取網(wǎng)站全部圖像 86
3.7.1 創(chuàng)建模擬電影網(wǎng)站 86
3.7.2 使用單線程程序爬取圖像 88
3.7.3 使用Python的多線程 90
3.7.4 使用多線程程序爬取圖像 93
3.8 綜合項目 爬取模擬電影網(wǎng)站數(shù)據(jù) 95
3.8.1 創(chuàng)建模擬電影網(wǎng)站 95
3.8.2 設計存儲數(shù)據(jù)庫 98
3.8.3 編寫爬蟲程序 99
3.8.4 執(zhí)行爬蟲程序 102
3.9 實戰(zhàn)項目 爬取實際電影網(wǎng)站數(shù)據(jù) 103
3.9.1 解析電影網(wǎng)站的HTML代碼 103
3.9.2 爬取電影網(wǎng)站數(shù)據(jù) 105
3.9.3 編寫爬蟲程序 107
3.9.4 執(zhí)行爬蟲程序 111
項目總結 112
練習3 112
項目4 爬取圖書網(wǎng)站數(shù)據(jù) 113
4.1 項目任務 113
4.2 使用scrapy創(chuàng)建爬蟲程序 115
4.2.1 創(chuàng)建網(wǎng)站服務器程序 115
4.2.2 安裝scrapy框架 115
4.2.3 scrapy項目的創(chuàng)建 115
4.2.4 入口函數(shù)與入口地址 118
4.2.5 Python的yield語句 118
4.3 使用BeautifulSoup爬取數(shù)據(jù) 119
4.3.1 創(chuàng)建模擬圖書網(wǎng)站 119
4.3.2 解析網(wǎng)站的HTML代碼 120
4.3.3 爬取圖書圖像 121
4.3.4 編寫爬蟲程序 122
4.3.5 執(zhí)行爬蟲程序 123
4.4 使用XPath查找元素 123
4.4.1 scrapy的XPath簡介 124
4.4.2 使用XPath查找HTML元素 125
4.4.3 使用XPath與BeautifulSoup 134
4.5 爬取關聯(lián)網(wǎng)頁數(shù)據(jù) 135
4.5.1 創(chuàng)建模擬圖書網(wǎng)站 135
4.5.2 程序爬取網(wǎng)頁的順序 137
4.5.3 理解scrapy分布式 139
4.6 使用XPath爬取數(shù)據(jù) 140
4.6.1 創(chuàng)建模擬圖書網(wǎng)站 140
4.6.2 解析網(wǎng)站的HTML代碼 142
4.6.3 爬取圖書圖像 143
4.6.4 設計數(shù)據(jù)庫存儲 144
4.6.5 編寫爬蟲程序 144
4.6.6 執(zhí)行爬蟲程序 146
4.7 使用管道存儲數(shù)據(jù) 147
4.7.1 創(chuàng)建模擬圖書網(wǎng)站 147
4.7.2 編寫數(shù)據(jù)字段類 149
4.7.3 編寫爬蟲程序類 150
4.7.4 編寫數(shù)據(jù)管道類 151
4.7.5 設置scrapy的配置文件 153
4.7.6 執(zhí)行爬蟲程序 153
4.8 綜合項目 爬取模擬圖書網(wǎng)站數(shù)據(jù) 154
4.8.1 創(chuàng)建模擬圖書網(wǎng)站 154
4.8.2 編寫數(shù)據(jù)字段類 157
4.8.3 編寫數(shù)據(jù)管道類 157
4.8.4 編寫爬蟲程序類 158
4.8.5 設置scrapy的配置文件 160
4.8.6 執(zhí)行爬蟲程序 160
4.9 實戰(zhàn)項目 爬取實際圖書網(wǎng)站數(shù)據(jù) 161
4.9.1 解析網(wǎng)站的HTML代碼 161
4.9.2 爬取網(wǎng)站圖書數(shù)據(jù) 164
4.9.3 實現(xiàn)自動翻頁 165
4.9.4 編寫爬蟲程序 167
4.9.5 執(zhí)行爬蟲程序并查看爬取結果 170
項目總結 172
練習4 172
項目5 爬取商城網(wǎng)站數(shù)據(jù) 174
5.1 項目任務 174
5.2 使用selenium編寫爬蟲程序 176
5.2.1 JavaScript程序控制網(wǎng)頁 176
5.2.2 普通爬蟲程序的問題 177
5.2.3 安裝selenium與Chrome驅動程序 178
5.2.4 編寫selenium爬蟲程序 178
5.3 使用selenium查找HTML元素 180
5.3.1 創(chuàng)建模擬商城網(wǎng)站 180
5.3.2 使用XPath查找元素 182
5.3.3 查找元素的文本與屬性 182
5.3.4 使用id值查找元素 184
5.3.5 使用name屬性值查找元素 184
5.3.6 使用CSS查找元素 184
5.3.7 使用tagName查找元素 185
5.3.8 使用文本查找超鏈接 186
5.3.9 使用class值查找元素 186
5.4 使用selenium實現(xiàn)用戶登錄 187
5.4.1 創(chuàng)建用戶登錄網(wǎng)站 187
5.4.2 使用元素動作 188
5.4.3 編寫爬蟲程序 189
5.4.4 執(zhí)行JavaScript程序 191
5.5 使用selenium爬取Ajax網(wǎng)頁數(shù)據(jù) 192
5.5.1 創(chuàng)建Ajax網(wǎng)站 192
5.5.2 理解selenium爬蟲程序 194
5.5.3 編寫爬蟲程序 197
5.5.4 執(zhí)行爬蟲程序 198
5.6 使用selenium等待HTML元素 198
5.6.1 創(chuàng)建延遲模擬網(wǎng)站 199
5.6.2 編寫爬蟲程序 200
5.6.3 selenium強制等待 200
5.6.4 selenium隱式等待 201
5.6.5 selenium循環(huán)等待與顯式等待 202
5.6.6 selenium顯式等待形式 204
5.7 綜合項目 爬取模擬商城網(wǎng)站數(shù)據(jù) 205
5.7.1 創(chuàng)建模擬商城網(wǎng)站 205
5.7.2 爬取網(wǎng)站數(shù)據(jù)并實現(xiàn)網(wǎng)頁翻頁 209
5.7.3 設計數(shù)據(jù)存儲與圖像存儲 210
5.7.4 編寫爬蟲程序 211
5.7.5 執(zhí)行爬蟲程序 214
5.8 實戰(zhàn)項目 爬取實際商城網(wǎng)站數(shù)據(jù) 215
5.8.1 解析網(wǎng)站的HTML代碼 215
5.8.2 爬取網(wǎng)站數(shù)據(jù) 218
5.8.3 實現(xiàn)網(wǎng)頁翻頁 220
5.8.4 編寫爬蟲程序 222
5.8.5 執(zhí)行爬蟲程序 226
項目總結 228
練習5 228
項目6 爬取景區(qū)網(wǎng)站數(shù)據(jù) 230
6.1 項目任務 230
6.2 使用DynamoDB存儲模擬景區(qū)網(wǎng)站數(shù)據(jù) 231
6.2.1 創(chuàng)建模擬景區(qū)網(wǎng)站 231
6.2.2 爬取網(wǎng)站數(shù)據(jù) 233
6.2.3 編寫爬蟲程序 234
6.2.4 執(zhí)行爬蟲程序 235
6.2.5 DynamoDB簡介 235
6.3 登錄AWS數(shù)據(jù)庫 236
6.3.1 登錄AWS 236
6.3.2 創(chuàng)建數(shù)據(jù)庫表 238
6.4 DynamoDB數(shù)據(jù)庫操作 240
6.4.1 存儲數(shù)據(jù) 240
6.4.2 讀取數(shù)據(jù) 241
6.4.3 修改數(shù)據(jù) 242
6.4.4 刪除數(shù)據(jù) 243
6.4.5 掃描數(shù)據(jù) 243
6.4.6 刪除數(shù)據(jù)庫表 244
6.5 綜合項目 爬取模擬景區(qū)網(wǎng)站數(shù)據(jù) 245
6.5.1 創(chuàng)建模擬景區(qū)網(wǎng)站 245
6.5.2 編寫爬蟲程序 245
6.5.3 執(zhí)行爬蟲程序 248
6.6 實戰(zhàn)項目 爬取實際景區(qū)網(wǎng)站數(shù)據(jù) 249
6.6.1 解析網(wǎng)站的HTML代碼 250
6.6.2 爬取網(wǎng)站景區(qū)數(shù)據(jù) 252
6.6.3 爬取全部頁面的數(shù)據(jù) 254
6.6.4 設計存儲數(shù)據(jù)庫 255
6.6.5 編寫爬蟲程序 255
6.6.6 執(zhí)行爬蟲程序 259
項目總結 260
練習6 260