《Python爬蟲項(xiàng)目教程(微課版)》以Python語(yǔ)言為基礎(chǔ),介紹了爬蟲的基礎(chǔ)知識(shí)。
《Python爬蟲項(xiàng)目教程(微課版)》包括6個(gè)實(shí)戰(zhàn)項(xiàng)目,分別為爬取外匯網(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爬蟲項(xiàng)目教程(微課版)》通過(guò)這些項(xiàng)目講解了Python的Web訪問(wèn)技術(shù)、BeautifulSoup的數(shù)據(jù)分析與提取技術(shù)、深度優(yōu)先與廣度優(yōu)先順序爬取技術(shù)、多線程網(wǎng)頁(yè)爬取技術(shù)、scrapy分布式爬取框架技術(shù)、selenium爬蟲程序技術(shù)、AWS中的DynamoDB數(shù)據(jù)庫(kù)的NoSQL存儲(chǔ)技術(shù)等。
《Python爬蟲項(xiàng)目教程(微課版)》每個(gè)項(xiàng)目都遵循由淺入深的學(xué)習(xí)規(guī)律,采取理論與實(shí)踐相結(jié)合的方式來(lái)引導(dǎo)讀者完成實(shí)戰(zhàn)。
《Python爬蟲項(xiàng)目教程(微課版)》可作為計(jì)算機(jī)軟件技術(shù)專業(yè)及其相關(guān)專業(yè)的程序設(shè)計(jì)課程教材。
適讀人群 :本書可作為計(jì)算機(jī)軟件技術(shù)專業(yè)及其相關(guān)專業(yè)的程序設(shè)計(jì)教材。
緊扣學(xué)生為中心的主線,在教材中融入課程思政元素,培養(yǎng)愛黨愛國(guó)、愛崗敬業(yè)、高素質(zhì)高技能的軟件人才。
使用項(xiàng)目驅(qū)動(dòng)的形式編寫,每個(gè)項(xiàng)目涵蓋了不同的知識(shí)與技能點(diǎn),各個(gè)項(xiàng)目按“任
務(wù)目標(biāo)”“知識(shí)內(nèi)容”“案例實(shí)踐”的結(jié)構(gòu)編寫。
名校名師20余年授課經(jīng)驗(yàn)集結(jié)成書
爬蟲程序指能自動(dòng)從相關(guān)網(wǎng)頁(yè)中搜索與提取所需數(shù)據(jù)的程序,提取與存儲(chǔ)這些數(shù)據(jù)是進(jìn)行數(shù)據(jù)分析的前提與關(guān)鍵。Python語(yǔ)言因其簡(jiǎn)單、易讀、可擴(kuò)展的特性,在編寫爬蟲程序方面有特別的優(yōu)勢(shì)。尤其是業(yè)界有用Python編寫的各種各樣的爬蟲程序框架供學(xué)習(xí)者參考,使得Python爬蟲程序的編寫更加簡(jiǎn)單、高效。
本書包括6個(gè)項(xiàng)目。項(xiàng)目1基于爬取外匯網(wǎng)站數(shù)據(jù),講解Python的Web訪問(wèn)技術(shù)及正則表達(dá)式匹配字符串方法。項(xiàng)目2基于爬取名言網(wǎng)站數(shù)據(jù),講解BeautifulSoup的數(shù)據(jù)分析與提取技術(shù)。項(xiàng)目3基于爬取電影網(wǎng)站數(shù)據(jù),講解爬取多個(gè)網(wǎng)頁(yè)數(shù)據(jù)的方法,重點(diǎn)講解網(wǎng)頁(yè)的深度優(yōu)先與廣度優(yōu)先順序爬取路徑的構(gòu)造方法與多線程網(wǎng)頁(yè)爬取技術(shù)。項(xiàng)目4基于爬取圖書網(wǎng)站數(shù)據(jù),講解目前功能強(qiáng)大的分布式爬取框架scrapy的程序技術(shù)。項(xiàng)目5基于爬取商城網(wǎng)站數(shù)據(jù),講解selenium爬蟲程序技術(shù)。項(xiàng)目6基于爬取景區(qū)網(wǎng)站數(shù)據(jù),講解AWS中的DynamoDB數(shù)據(jù)庫(kù)的NoSQL存儲(chǔ)技術(shù)。每個(gè)項(xiàng)目都遵循由淺人深的學(xué)習(xí)規(guī)律,理論與實(shí)踐相結(jié)合,引導(dǎo)讀者完成實(shí)戰(zhàn)。
學(xué)習(xí)是一個(gè)循序漸進(jìn)的過(guò)程,實(shí)際的網(wǎng)站結(jié)構(gòu)比較復(fù)雜,對(duì)初學(xué)者來(lái)說(shuō),一開始就編寫爬蟲程序去爬取一個(gè)實(shí)際網(wǎng)站的數(shù)據(jù)是比較困難的。因此本書的每個(gè)項(xiàng)目都是先指導(dǎo)讀者搭建一個(gè)本地模擬網(wǎng)站,再編寫爬蟲程序來(lái)爬取本地模擬網(wǎng)站的數(shù)據(jù),從而幫助讀者掌握爬蟲程序的編寫技術(shù)。這樣做的好處是使學(xué)習(xí)內(nèi)容變得簡(jiǎn)單、易學(xué),讀者可以先把主要精力放在爬蟲程序的編寫上,而非放在分析網(wǎng)站結(jié)構(gòu)上,等有了一定的編程基礎(chǔ)再去爬取實(shí)際網(wǎng)站的數(shù)據(jù)就容易多了。
對(duì)于本書,建議分為54學(xué)時(shí)實(shí)施教學(xué)。
由于編者知識(shí)水平有限,書中難免出現(xiàn)疏漏與不妥之處,歡迎讀者批評(píng)指正。
黃銳軍, 深圳信息職業(yè)技術(shù)學(xué)院軟件學(xué)院副教授,研究生學(xué)歷。主要從事計(jì)算機(jī)軟件技術(shù)課程教學(xué),有二十多年的職業(yè)教學(xué)經(jīng)歷。從事軟件開發(fā),先后為深圳市職業(yè)技能鑒定中心開發(fā)了序列應(yīng)用軟件。
項(xiàng)目1 爬取外匯網(wǎng)站數(shù)據(jù) 1
1.1 項(xiàng)目任務(wù) 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方法訪問(wèn)Web網(wǎng)站 7
1.4.1 客戶端使用GET方法發(fā)送數(shù)據(jù) 7
1.4.2 服務(wù)器端使用GET方法獲取數(shù)據(jù) 8
1.5 使用POST方法訪問(wèn)Web網(wǎng)站 9
1.5.1 客戶端使用POST方法發(fā)送數(shù)據(jù) 9
1.5.2 服務(wù)器端使用POST方法獲取數(shù)據(jù) 10
1.5.3 混合使用GET與POST方法 11
1.6 使用正則表達(dá)式匹配數(shù)據(jù) 13
1.6.1 使用正則表達(dá)式匹配字符串 14
1.6.2 使用正則表達(dá)式爬取數(shù)據(jù) 17
1.7 綜合項(xiàng)目 爬取模擬外匯網(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ì)存儲(chǔ)數(shù)據(jù)庫(kù) 19
1.7.4 編寫爬蟲程序 20
1.7.5 執(zhí)行爬蟲程序 22
1.8 實(shí)戰(zhàn)項(xiàng)目 爬取實(shí)際外匯網(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ì)存儲(chǔ)數(shù)據(jù)庫(kù) 25
1.8.4 編寫爬蟲程序 26
1.8.5 執(zhí)行爬蟲程序 28
項(xiàng)目總結(jié) 29
練習(xí)1 29
項(xiàng)目2 爬取名言網(wǎng)站數(shù)據(jù) 30
2.1 項(xiàng)目任務(wù) 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 使用高級(jí)查找 40
2.4 使用BeautifulSoup遍歷文檔元素 42
2.4.1 獲取元素節(jié)點(diǎn)的父節(jié)點(diǎn) 42
2.4.2 獲取元素節(jié)點(diǎn)的直接子節(jié)點(diǎn) 43
2.4.3 獲取元素節(jié)點(diǎn)的所有子孫節(jié)點(diǎn) 44
2.4.4 獲取元素節(jié)點(diǎn)的兄弟節(jié)點(diǎn) 45
2.5 BeautifulSoup支持使用CSS語(yǔ)法進(jìn)行查找 46
2.5.1 使用CSS語(yǔ)法查找 47
2.5.2 使用屬性的語(yǔ)法規(guī)則 48
2.5.3 使用select()查找子孫節(jié)點(diǎn) 49
2.5.4 使用select()查找直接子節(jié)點(diǎn) 49
2.5.5 使用select()查找兄弟節(jié)點(diǎn) 49
2.5.6 使用select_one()查找單一元素 50
2.6 綜合項(xiàng)目 爬取模擬名言網(wǎng)站數(shù)據(jù) 51
2.6.1 創(chuàng)建模擬名言網(wǎng)站 51
2.6.2 爬取名言數(shù)據(jù) 51
2.6.3 設(shè)計(jì)存儲(chǔ)數(shù)據(jù)庫(kù) 52
2.6.4 編寫爬蟲程序 52
2.6.5 執(zhí)行爬蟲程序 54
2.7 實(shí)戰(zhàn)項(xiàng)目 爬取實(shí)際名言網(wǎng)站
數(shù)據(jù) 55
2.7.1 解析網(wǎng)站的HTML代碼 55
2.7.2 爬取全部頁(yè)面的數(shù)據(jù) 56
2.7.3 編寫爬蟲程序 57
2.7.4 執(zhí)行爬蟲程序 59
項(xiàng)目總結(jié) 60
練習(xí)2 60
項(xiàng)目3 爬取電影網(wǎng)站數(shù)據(jù) 63
3.1 項(xiàng)目任務(wù) 63
3.2 簡(jiǎn)單爬取網(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)站結(jié)構(gòu) 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 爬取翻頁(yè)網(wǎng)站數(shù)據(jù) 77
3.6.1 使用Flask模板參數(shù) 77
3.6.2 創(chuàng)建翻頁(yè)電影網(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 綜合項(xiàng)目 爬取模擬電影網(wǎng)站數(shù)據(jù) 95
3.8.1 創(chuàng)建模擬電影網(wǎng)站 95
3.8.2 設(shè)計(jì)存儲(chǔ)數(shù)據(jù)庫(kù) 98
3.8.3 編寫爬蟲程序 99
3.8.4 執(zhí)行爬蟲程序 102
3.9 實(shí)戰(zhàn)項(xiàng)目 爬取實(shí)際電影網(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
項(xiàng)目總結(jié) 112
練習(xí)3 112
項(xiàng)目4 爬取圖書網(wǎng)站數(shù)據(jù) 113
4.1 項(xiàng)目任務(wù) 113
4.2 使用scrapy創(chuàng)建爬蟲程序 115
4.2.1 創(chuàng)建網(wǎng)站服務(wù)器程序 115
4.2.2 安裝scrapy框架 115
4.2.3 scrapy項(xiàng)目的創(chuàng)建 115
4.2.4 入口函數(shù)與入口地址 118
4.2.5 Python的yield語(yǔ)句 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簡(jiǎn)介 124
4.4.2 使用XPath查找HTML元素 125
4.4.3 使用XPath與BeautifulSoup 134
4.5 爬取關(guān)聯(lián)網(wǎng)頁(yè)數(shù)據(jù) 135
4.5.1 創(chuàng)建模擬圖書網(wǎng)站 135
4.5.2 程序爬取網(wǎng)頁(yè)的順序 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ì)數(shù)據(jù)庫(kù)存儲(chǔ) 144
4.6.5 編寫爬蟲程序 144
4.6.6 執(zhí)行爬蟲程序 146
4.7 使用管道存儲(chǔ)數(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 設(shè)置scrapy的配置文件 153
4.7.6 執(zhí)行爬蟲程序 153
4.8 綜合項(xiàng)目 爬取模擬圖書網(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 設(shè)置scrapy的配置文件 160
4.8.6 執(zhí)行爬蟲程序 160
4.9 實(shí)戰(zhàn)項(xiàng)目 爬取實(shí)際圖書網(wǎng)站數(shù)據(jù) 161
4.9.1 解析網(wǎng)站的HTML代碼 161
4.9.2 爬取網(wǎng)站圖書數(shù)據(jù) 164
4.9.3 實(shí)現(xiàn)自動(dòng)翻頁(yè) 165
4.9.4 編寫爬蟲程序 167
4.9.5 執(zhí)行爬蟲程序并查看爬取結(jié)果 170
項(xiàng)目總結(jié) 172
練習(xí)4 172
項(xiàng)目5 爬取商城網(wǎng)站數(shù)據(jù) 174
5.1 項(xiàng)目任務(wù) 174
5.2 使用selenium編寫爬蟲程序 176
5.2.1 JavaScript程序控制網(wǎng)頁(yè) 176
5.2.2 普通爬蟲程序的問(wèn)題 177
5.2.3 安裝selenium與Chrome驅(qū)動(dòng)程序 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實(shí)現(xiàn)用戶登錄 187
5.4.1 創(chuàng)建用戶登錄網(wǎng)站 187
5.4.2 使用元素動(dòng)作 188
5.4.3 編寫爬蟲程序 189
5.4.4 執(zhí)行JavaScript程序 191
5.5 使用selenium爬取Ajax網(wǎng)頁(yè)數(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強(qiáng)制等待 200
5.6.4 selenium隱式等待 201
5.6.5 selenium循環(huán)等待與顯式等待 202
5.6.6 selenium顯式等待形式 204
5.7 綜合項(xiàng)目 爬取模擬商城網(wǎng)站數(shù)據(jù) 205
5.7.1 創(chuàng)建模擬商城網(wǎng)站 205
5.7.2 爬取網(wǎng)站數(shù)據(jù)并實(shí)現(xiàn)網(wǎng)頁(yè)翻頁(yè) 209
5.7.3 設(shè)計(jì)數(shù)據(jù)存儲(chǔ)與圖像存儲(chǔ) 210
5.7.4 編寫爬蟲程序 211
5.7.5 執(zhí)行爬蟲程序 214
5.8 實(shí)戰(zhàn)項(xiàng)目 爬取實(shí)際商城網(wǎng)站數(shù)據(jù) 215
5.8.1 解析網(wǎng)站的HTML代碼 215
5.8.2 爬取網(wǎng)站數(shù)據(jù) 218
5.8.3 實(shí)現(xiàn)網(wǎng)頁(yè)翻頁(yè) 220
5.8.4 編寫爬蟲程序 222
5.8.5 執(zhí)行爬蟲程序 226
項(xiàng)目總結(jié) 228
練習(xí)5 228
項(xiàng)目6 爬取景區(qū)網(wǎng)站數(shù)據(jù) 230
6.1 項(xiàng)目任務(wù) 230
6.2 使用DynamoDB存儲(chǔ)模擬景區(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簡(jiǎn)介 235
6.3 登錄AWS數(shù)據(jù)庫(kù) 236
6.3.1 登錄AWS 236
6.3.2 創(chuàng)建數(shù)據(jù)庫(kù)表 238
6.4 DynamoDB數(shù)據(jù)庫(kù)操作 240
6.4.1 存儲(chǔ)數(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ù)庫(kù)表 244
6.5 綜合項(xiàng)目 爬取模擬景區(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 實(shí)戰(zhàn)項(xiàng)目 爬取實(shí)際景區(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 爬取全部頁(yè)面的數(shù)據(jù) 254
6.6.4 設(shè)計(jì)存儲(chǔ)數(shù)據(jù)庫(kù) 255
6.6.5 編寫爬蟲程序 255
6.6.6 執(zhí)行爬蟲程序 259
項(xiàng)目總結(jié) 260
練習(xí)6 260