本書基于Python語言介紹爬蟲的基礎(chǔ)知識。本書包括6個項目,分別為爬取外匯網(wǎng)站數(shù)據(jù)、爬取名言網(wǎng)站數(shù)據(jù)、爬取天氣網(wǎng)站數(shù)據(jù)、爬取旅游網(wǎng)站數(shù)據(jù)、爬取圖書網(wǎng)站數(shù)據(jù)、爬取商城網(wǎng)站數(shù)據(jù),通過這些項目講解Python的Web訪問技術(shù)、BeautifulSoup的數(shù)據(jù)分析與提取技術(shù)、xpath的數(shù)據(jù)分析與提取技術(shù)、深度優(yōu)先與廣度優(yōu)先順序爬取技術(shù)、多線程網(wǎng)頁爬取技術(shù)、scrapy分布式爬取框架技術(shù)、selenium爬蟲程序技術(shù)等。本書每個項目的編寫均遵循由淺入深的學(xué)習(xí)規(guī)律,采取理論與實踐相結(jié)合的方式來引導(dǎo)讀者完成實戰(zhàn)項目。
本書可作為計算機(jī)應(yīng)用技術(shù)及其相關(guān)專業(yè)程序設(shè)計課程的教材。
項目驅(qū)動,循序漸進(jìn):全書精心設(shè)計6個循序漸進(jìn)的實戰(zhàn)項目,從外匯數(shù)據(jù)、名言警句到旅游、商城網(wǎng)站,層層遞進(jìn),幫助讀者從入門到掌握完整的爬蟲技術(shù)體系。
主流框架全面覆蓋:系統(tǒng)講解 Python 爬蟲與框架,包括requests、BeautifulSoup、xpath、多線程爬取、Scrapy分布式框架以及Selenium動態(tài)爬取,滿足多場景數(shù)據(jù)采集需求。
理論結(jié)合實踐:每個項目均配有本地模擬網(wǎng)站,降低學(xué)習(xí)難度,保證初學(xué)者在安全環(huán)境下掌握關(guān)鍵技術(shù),后續(xù)輕松過渡到實際網(wǎng)站數(shù)據(jù)采集。
教學(xué)設(shè)計優(yōu)化升級:在第2版中對章節(jié)結(jié)構(gòu)進(jìn)行調(diào)整,獨立設(shè)置xpath項目,條理更清晰,學(xué)習(xí)路徑更科學(xué),教學(xué)適用性更強(qiáng)。
配套精品課程:與中國大學(xué)MOOC國家精品課程配套,讀者可同步獲取課程視頻與資源,實現(xiàn)教材與課程的無縫銜接。
黃銳軍,深圳信息職業(yè)技術(shù)大學(xué)教授,從事職業(yè)教育34年,一直工作在教學(xué)第一線。主持完成2門國家精品(Python程序設(shè)計、Python網(wǎng)絡(luò)爬蟲程序技術(shù))。主編出版教材9本,其中3本獲評國家十一五、十三五、十四五規(guī)劃教材。教材發(fā)行量達(dá)30余萬冊,被全國500多所院校選為教材。
項目1 爬取外匯網(wǎng)站數(shù)據(jù) 1
1.1 外匯網(wǎng)站項目任務(wù) 1
1.2 搭建爬蟲程序開發(fā)環(huán)境 2
1.2.1 認(rèn)識爬蟲程序 2
1.2.2 搭建爬蟲程序開發(fā)環(huán)境 3
1.3 使用Flask創(chuàng)建Web網(wǎng)站 4
1.3.1 安裝Flask 4
1.3.2 創(chuàng)建模擬外匯網(wǎng)站 4
1.3.3 獲取網(wǎng)站HTML代碼 6
1.4 Flask網(wǎng)頁模板設(shè)計 7
1.4.1 Flask網(wǎng)頁模板 7
1.4.2 使用Flask模板語句 8
1.5 使用GET方法與POST方法訪問網(wǎng)頁 12
1.5.1 客戶端使用GET方法傳遞數(shù)據(jù) 12
1.5.2 客戶端使用POST方法傳遞數(shù)據(jù) 13
1.5.3 服務(wù)器獲取客戶端傳遞的數(shù)據(jù) 13
1.6 使用正則表達(dá)式匹配數(shù)據(jù) 14
1.6.1 使用正則表達(dá)式匹配字符串 14
1.6.2 使用正則表達(dá)式爬取數(shù)據(jù) 18
1.7 綜合項目 爬取模擬外匯網(wǎng)站數(shù)據(jù) 19
1.7.1 創(chuàng)建模擬外匯網(wǎng)站 19
1.7.2 解析網(wǎng)站HTML代碼 19
1.7.3 設(shè)計存儲數(shù)據(jù)庫 20
1.7.4 編寫爬蟲程序 20
1.7.5 運行爬蟲程序 22
1.8 實戰(zhàn)項目 爬取實際外匯網(wǎng)站數(shù)據(jù) 23
1.8.1 解析網(wǎng)頁HTML代碼 23
1.8.2 爬取外匯網(wǎng)站數(shù)據(jù) 24
1.8.3 設(shè)計存儲數(shù)據(jù)庫 26
1.8.4 編寫爬蟲程序 26
1.8.5 執(zhí)行爬蟲程序 28
項目總結(jié) 29
練習(xí)1 29
項目2 爬取名言網(wǎng)站數(shù)據(jù) 30
2.1 名言網(wǎng)站項目任務(wù) 30
2.2 使用BeautifulSoup裝載HTML文檔 31
2.2.1 創(chuàng)建模擬名言網(wǎng)站 31
2.2.2 安裝BeautifulSoup庫 32
2.2.3 裝載HTML文檔 33
2.3 使用BeautifulSoup查找HTML元素 36
2.3.1 使用find()函數(shù)查找 36
2.3.2 查找元素屬性與文本 39
2.3.3 使用find_all()函數(shù)查找 40
2.3.4 使用高級查找 42
2.4 使用BeautifulSoup遍歷文檔元素 43
2.4.1 獲取元素節(jié)點的父節(jié)點 44
2.4.2 獲取元素節(jié)點的直接子節(jié)點 44
2.4.3 獲取元素節(jié)點的所有子孫節(jié)點 46
2.4.4 獲取元素節(jié)點的兄弟節(jié)點 46
2.5 BeautifulSoup使用CSS語法查找 48
2.5.1 使用CSS語法查找 48
2.5.2 使用CSS屬性語法規(guī)則查找 50
2.5.3 使用select()查找子孫節(jié)點 50
2.5.4 使用select()查找直接子節(jié)點 51
2.5.5 使用select()查找兄弟節(jié)點 51
2.5.6 使用select_one()函數(shù)查找單一元素 52
2.6 綜合項目 爬取模擬名言網(wǎng)站數(shù)據(jù) 53
2.6.1 創(chuàng)建模擬名言網(wǎng)站 53
2.6.2 爬取名言數(shù)據(jù) 54
2.6.3 設(shè)計存儲數(shù)據(jù)庫 55
2.6.4 編寫爬蟲程序 55
2.6.5 執(zhí)行爬蟲程序 57
2.7 實戰(zhàn)項目 爬取實際名言網(wǎng)站數(shù)據(jù) 58
2.7.1 解析網(wǎng)站HTML代碼 58
2.7.2 爬取全部頁面的數(shù)據(jù) 59
2.7.3 編寫爬蟲程序 60
2.7.4 執(zhí)行爬蟲程序 62
項目總結(jié) 63
練習(xí)2 63
項目3 爬取天氣網(wǎng)站數(shù)據(jù) 66
3.1 天氣網(wǎng)站項目任務(wù) 66
3.2 使用lxml裝載HTML文檔 67
3.2.1 創(chuàng)建模擬網(wǎng)站 67
3.2.2 裝載HTML文檔 68
3.3 使用xpath查找HTML元素 71
3.3.1 lxml元素類型 71
3.3.2 使用xpath查找元素的規(guī)則 72
3.3.3 xpath與特殊元素 81
3.4 綜合項目 爬取模擬天氣網(wǎng)站數(shù)據(jù) 82
3.4.1 創(chuàng)建模擬天氣網(wǎng)站 82
3.4.2 爬取天氣數(shù)據(jù) 85
3.4.3 設(shè)計存儲數(shù)據(jù)庫 86
3.4.4 編寫爬蟲程序 86
3.4.5 執(zhí)行爬蟲程序 88
3.5 實戰(zhàn)項目 爬取實際天氣網(wǎng)站數(shù)據(jù) 89
3.5.1 解析網(wǎng)站HTML代碼 89
3.5.2 編寫爬蟲程序 92
3.5.3 執(zhí)行爬蟲程序 95
項目總結(jié) 97
練習(xí)3 97
項目4 爬取旅游網(wǎng)站數(shù)據(jù) 98
4.1 旅游網(wǎng)站項目任務(wù) 98
4.2 網(wǎng)站樹的爬取路徑 99
4.2.1 Web服務(wù)器網(wǎng)站 100
4.2.2 使用遞歸程序爬取數(shù)據(jù) 101
4.2.3 深度優(yōu)先爬取數(shù)據(jù) 102
4.2.4 廣度優(yōu)先爬取數(shù)據(jù) 104
4.3 爬取多頁面網(wǎng)站數(shù)據(jù) 105
4.3.1 建立旅游網(wǎng)站服務(wù)器 105
4.3.2 爬取網(wǎng)站數(shù)據(jù) 108
4.3.3 編寫爬蟲程序 108
4.4 Python實現(xiàn)多線程 110
4.4.1 Python的Daemon線程 110
4.4.2 線程的等待 111
4.4.3 多線程與資源 112
4.5 爬取旅游網(wǎng)站圖像 114
4.5.1 重新設(shè)計旅游網(wǎng)站 114
4.5.2 單線程爬取圖像 116
4.5.3 多線程爬取圖像 118
4.6 綜合項目 爬取模擬旅游網(wǎng)站數(shù)據(jù) 120
4.6.1 旅游數(shù)據(jù)存儲 120
4.6.2 編寫爬蟲程序 121
4.6.3 執(zhí)行爬蟲程序 123
4.7 實戰(zhàn)項目 爬取實際旅游網(wǎng)站數(shù)據(jù) 125
4.7.1 網(wǎng)站網(wǎng)頁分析 125
4.7.2 網(wǎng)站數(shù)據(jù)爬取 126
4.7.3 網(wǎng)站數(shù)據(jù)存儲 127
4.7.4 編寫爬蟲程序 128
4.7.5 執(zhí)行爬蟲程序 132
項目總結(jié) 132
練習(xí)4 133
項目5 爬取圖書網(wǎng)站數(shù)據(jù) 134
5.1 圖書網(wǎng)站項目任務(wù) 134
5.2 使用scrapy創(chuàng)建爬蟲程序 136
5.2.1 創(chuàng)建網(wǎng)站服務(wù)器 136
5.2.2 安裝scrapy框架 136
5.2.3 創(chuàng)建scrapy項目 136
5.2.4 程序入口位置 138
5.2.5 Python的yield語句 139
5.3 scrapy結(jié)合BeautifulSoup爬取數(shù)據(jù) 140
5.3.1 創(chuàng)建模擬圖書網(wǎng)站 140
5.3.2 解析網(wǎng)站HTML代碼 141
5.3.3 爬取圖書圖像 142
5.3.4 編寫爬蟲程序 143
5.3.5 執(zhí)行爬蟲程序 144
5.4 scrapy通過xpath查找元素 144
5.4.1 scrapy的xpath簡介 144
5.4.2 使用xpath查找HTML元素 146
5.4.3 使用xpath與BeautifulSoup 150
5.5 scrapy爬取關(guān)聯(lián)網(wǎng)頁數(shù)據(jù) 150
5.5.1 創(chuàng)建模擬圖書網(wǎng)站 150
5.5.2 程序爬取網(wǎng)頁的順序 152
5.5.3 理解scrapy的分布式特性 155
5.6 scrapy通過xpath爬取數(shù)據(jù) 155
5.6.1 創(chuàng)建模擬圖書網(wǎng)站 155
5.6.2 解析網(wǎng)站HTML代碼 157
5.6.3 爬取圖書圖像 158
5.6.4 設(shè)計數(shù)據(jù)庫存儲 159
5.6.5 編寫爬蟲程序 159
5.6.6 執(zhí)行爬蟲程序 161
5.7 scrapy通過管道存儲數(shù)據(jù) 161
5.7.1 創(chuàng)建模擬圖書網(wǎng)站 161
5.7.2 編寫數(shù)據(jù)字段類 164
5.7.3 編寫爬蟲程序類 164
5.7.4 編寫數(shù)據(jù)管道類 166
5.7.5 設(shè)置scrapy的配置文件 167
5.7.6 執(zhí)行爬蟲程序 168
5.8 綜合項目 爬取模擬圖書網(wǎng)站數(shù)據(jù) 168
5.8.1 創(chuàng)建模擬圖書網(wǎng)站 169
5.8.2 編寫數(shù)據(jù)字段類 171
5.8.3 編寫數(shù)據(jù)管道類 171
5.8.4 編寫爬蟲程序類 173
5.8.5 設(shè)置scrapy的配置文件 175
5.8.6 執(zhí)行爬蟲程序 175
5.9 實戰(zhàn)項目 爬取實際圖書網(wǎng)站數(shù)據(jù) 175
5.9.1 解析網(wǎng)站HTML代碼 175
5.9.2 爬取網(wǎng)站圖書數(shù)據(jù) 178
5.9.3 實現(xiàn)自動翻頁 179
5.9.4 編寫爬蟲程序 181
5.9.5 執(zhí)行爬蟲程序 184
項目總結(jié) 185
練習(xí)5 185
項目6 爬取商城網(wǎng)站數(shù)據(jù) 187
6.1 商城網(wǎng)站項目任務(wù) 187
6.2 使用selenium編寫爬蟲程序 189
6.2.1 JavaScript程序控制網(wǎng)頁 189
6.2.2 普通爬蟲程序的問題 190
6.2.3 安裝selenium框架與Chrome驅(qū)動程序 191
6.2.4 編寫selenium爬蟲程序 192
6.3 使用selenium查找HTML元素 193
6.3.1 創(chuàng)建模擬商城網(wǎng)站 193
6.3.2 使用xpath查找元素 195
6.3.3 查找元素的文本與屬性 195
6.3.4 使用id值查找元素 197
6.3.5 使用name屬性值查找元素 197
6.3.6 使用CSS查找元素 197
6.3.7 使用tagName查找元素 198
6.3.8 使用文本查找超鏈接 198
6.3.9 使用class值查找元素 199
6.4 使用selenium實現(xiàn)用戶登錄 200
6.4.1 創(chuàng)建用戶登錄網(wǎng)站 200
6.4.2 使用元素動作 201
6.4.3 編寫爬蟲程序 202
6.4.4 執(zhí)行JavaScript程序 203
6.5 使用selenium爬取AJAX網(wǎng)頁數(shù)據(jù) 205
6.5.1 創(chuàng)建AJAX網(wǎng)站 205
6.5.2 理解selenium爬蟲程序 207
6.5.3 編寫爬蟲程序 210
6.5.4 執(zhí)行爬蟲程序 211
6.6 使用selenium等待HTML元素 211
6.6.1 創(chuàng)建延遲模擬網(wǎng)站 211
6.6.2 編寫爬蟲程序 213
6.6.3 selenium強(qiáng)制等待 213
6.6.4 selenium隱式等待 214
6.6.5 selenium循環(huán)與顯式等待 214
6.6.6 selenium顯式等待形式 216
6.7 綜合項目 爬取模擬商城網(wǎng)站數(shù)據(jù) 217
6.7.1 創(chuàng)建模擬商城網(wǎng)站 217
6.7.2 爬取網(wǎng)站數(shù)據(jù) 221
6.7.3 設(shè)計數(shù)據(jù)存儲 222
6.7.4 編寫爬蟲程序 222
6.7.5 執(zhí)行爬蟲程序 226
6.8 實戰(zhàn)項目 爬取實際商城網(wǎng)站數(shù)據(jù) 226
6.8.1 解析網(wǎng)頁HTML代碼 226
6.8.2 爬取網(wǎng)頁數(shù)據(jù) 230
6.8.3 實現(xiàn)網(wǎng)頁翻頁 231
6.8.4 編寫爬蟲程序 233
6.8.5 執(zhí)行爬蟲程序 237
項目總結(jié) 239
練習(xí)6 239