本書基于Python語言介紹爬蟲的基礎知識。本書包括6個項目,分別為爬取外匯網站數(shù)據(jù)、爬取名言網站數(shù)據(jù)、爬取天氣網站數(shù)據(jù)、爬取旅游網站數(shù)據(jù)、爬取圖書網站數(shù)據(jù)、爬取商城網站數(shù)據(jù),通過這些項目講解Python的Web訪問技術、BeautifulSoup的數(shù)據(jù)分析與提取技術、xpath的數(shù)據(jù)分析與提取技術、深度優(yōu)先與廣度優(yōu)先順序爬取技術、多線程網頁爬取技術、scrapy分布式爬取框架技術、selenium爬蟲程序技術等。本書每個項目的編寫均遵循由淺入深的學習規(guī)律,采取理論與實踐相結合的方式來引導讀者完成實戰(zhàn)項目。
本書可作為計算機應用技術及其相關專業(yè)程序設計課程的教材。
項目驅動,循序漸進:全書精心設計6個循序漸進的實戰(zhàn)項目,從外匯數(shù)據(jù)、名言警句到旅游、商城網站,層層遞進,幫助讀者從入門到掌握完整的爬蟲技術體系。
主流框架全面覆蓋:系統(tǒng)講解 Python 爬蟲與框架,包括requests、BeautifulSoup、xpath、多線程爬取、Scrapy分布式框架以及Selenium動態(tài)爬取,滿足多場景數(shù)據(jù)采集需求。
理論結合實踐:每個項目均配有本地模擬網站,降低學習難度,保證初學者在安全環(huán)境下掌握關鍵技術,后續(xù)輕松過渡到實際網站數(shù)據(jù)采集。
教學設計優(yōu)化升級:在第2版中對章節(jié)結構進行調整,獨立設置xpath項目,條理更清晰,學習路徑更科學,教學適用性更強。
配套精品課程:與中國大學MOOC國家精品課程配套,讀者可同步獲取課程視頻與資源,實現(xiàn)教材與課程的無縫銜接。
黃銳軍,深圳信息職業(yè)技術大學教授,從事職業(yè)教育34年,一直工作在教學第一線。主持完成2門國家精品(Python程序設計、Python網絡爬蟲程序技術)。主編出版教材9本,其中3本獲評國家十一五、十三五、十四五規(guī)劃教材。教材發(fā)行量達30余萬冊,被全國500多所院校選為教材。
項目1 爬取外匯網站數(shù)據(jù) 1
1.1 外匯網站項目任務 1
1.2 搭建爬蟲程序開發(fā)環(huán)境 2
1.2.1 認識爬蟲程序 2
1.2.2 搭建爬蟲程序開發(fā)環(huán)境 3
1.3 使用Flask創(chuàng)建Web網站 4
1.3.1 安裝Flask 4
1.3.2 創(chuàng)建模擬外匯網站 4
1.3.3 獲取網站HTML代碼 6
1.4 Flask網頁模板設計 7
1.4.1 Flask網頁模板 7
1.4.2 使用Flask模板語句 8
1.5 使用GET方法與POST方法訪問網頁 12
1.5.1 客戶端使用GET方法傳遞數(shù)據(jù) 12
1.5.2 客戶端使用POST方法傳遞數(shù)據(jù) 13
1.5.3 服務器獲取客戶端傳遞的數(shù)據(jù) 13
1.6 使用正則表達式匹配數(shù)據(jù) 14
1.6.1 使用正則表達式匹配字符串 14
1.6.2 使用正則表達式爬取數(shù)據(jù) 18
1.7 綜合項目 爬取模擬外匯網站數(shù)據(jù) 19
1.7.1 創(chuàng)建模擬外匯網站 19
1.7.2 解析網站HTML代碼 19
1.7.3 設計存儲數(shù)據(jù)庫 20
1.7.4 編寫爬蟲程序 20
1.7.5 運行爬蟲程序 22
1.8 實戰(zhàn)項目 爬取實際外匯網站數(shù)據(jù) 23
1.8.1 解析網頁HTML代碼 23
1.8.2 爬取外匯網站數(shù)據(jù) 24
1.8.3 設計存儲數(shù)據(jù)庫 26
1.8.4 編寫爬蟲程序 26
1.8.5 執(zhí)行爬蟲程序 28
項目總結 29
練習1 29
項目2 爬取名言網站數(shù)據(jù) 30
2.1 名言網站項目任務 30
2.2 使用BeautifulSoup裝載HTML文檔 31
2.2.1 創(chuà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 綜合項目 爬取模擬名言網站數(shù)據(jù) 53
2.6.1 創(chuàng)建模擬名言網站 53
2.6.2 爬取名言數(shù)據(jù) 54
2.6.3 設計存儲數(shù)據(jù)庫 55
2.6.4 編寫爬蟲程序 55
2.6.5 執(zhí)行爬蟲程序 57
2.7 實戰(zhàn)項目 爬取實際名言網站數(shù)據(jù) 58
2.7.1 解析網站HTML代碼 58
2.7.2 爬取全部頁面的數(shù)據(jù) 59
2.7.3 編寫爬蟲程序 60
2.7.4 執(zhí)行爬蟲程序 62
項目總結 63
練習2 63
項目3 爬取天氣網站數(shù)據(jù) 66
3.1 天氣網站項目任務 66
3.2 使用lxml裝載HTML文檔 67
3.2.1 創(chuà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 綜合項目 爬取模擬天氣網站數(shù)據(jù) 82
3.4.1 創(chuàng)建模擬天氣網站 82
3.4.2 爬取天氣數(shù)據(jù) 85
3.4.3 設計存儲數(shù)據(jù)庫 86
3.4.4 編寫爬蟲程序 86
3.4.5 執(zhí)行爬蟲程序 88
3.5 實戰(zhàn)項目 爬取實際天氣網站數(shù)據(jù) 89
3.5.1 解析網站HTML代碼 89
3.5.2 編寫爬蟲程序 92
3.5.3 執(zhí)行爬蟲程序 95
項目總結 97
練習3 97
項目4 爬取旅游網站數(shù)據(jù) 98
4.1 旅游網站項目任務 98
4.2 網站樹的爬取路徑 99
4.2.1 Web服務器網站 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 爬取多頁面網站數(shù)據(jù) 105
4.3.1 建立旅游網站服務器 105
4.3.2 爬取網站數(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 爬取旅游網站圖像 114
4.5.1 重新設計旅游網站 114
4.5.2 單線程爬取圖像 116
4.5.3 多線程爬取圖像 118
4.6 綜合項目 爬取模擬旅游網站數(shù)據(jù) 120
4.6.1 旅游數(shù)據(jù)存儲 120
4.6.2 編寫爬蟲程序 121
4.6.3 執(zhí)行爬蟲程序 123
4.7 實戰(zhàn)項目 爬取實際旅游網站數(shù)據(jù) 125
4.7.1 網站網頁分析 125
4.7.2 網站數(shù)據(jù)爬取 126
4.7.3 網站數(shù)據(jù)存儲 127
4.7.4 編寫爬蟲程序 128
4.7.5 執(zhí)行爬蟲程序 132
項目總結 132
練習4 133
項目5 爬取圖書網站數(shù)據(jù) 134
5.1 圖書網站項目任務 134
5.2 使用scrapy創(chuàng)建爬蟲程序 136
5.2.1 創(chuàng)建網站服務器 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結合BeautifulSoup爬取數(shù)據(jù) 140
5.3.1 創(chuàng)建模擬圖書網站 140
5.3.2 解析網站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爬取關聯(lián)網頁數(shù)據(jù) 150
5.5.1 創(chuàng)建模擬圖書網站 150
5.5.2 程序爬取網頁的順序 152
5.5.3 理解scrapy的分布式特性 155
5.6 scrapy通過xpath爬取數(shù)據(jù) 155
5.6.1 創(chuàng)建模擬圖書網站 155
5.6.2 解析網站HTML代碼 157
5.6.3 爬取圖書圖像 158
5.6.4 設計數(shù)據(jù)庫存儲 159
5.6.5 編寫爬蟲程序 159
5.6.6 執(zhí)行爬蟲程序 161
5.7 scrapy通過管道存儲數(shù)據(jù) 161
5.7.1 創(chuàng)建模擬圖書網站 161
5.7.2 編寫數(shù)據(jù)字段類 164
5.7.3 編寫爬蟲程序類 164
5.7.4 編寫數(shù)據(jù)管道類 166
5.7.5 設置scrapy的配置文件 167
5.7.6 執(zhí)行爬蟲程序 168
5.8 綜合項目 爬取模擬圖書網站數(shù)據(jù) 168
5.8.1 創(chuàng)建模擬圖書網站 169
5.8.2 編寫數(shù)據(jù)字段類 171
5.8.3 編寫數(shù)據(jù)管道類 171
5.8.4 編寫爬蟲程序類 173
5.8.5 設置scrapy的配置文件 175
5.8.6 執(zhí)行爬蟲程序 175
5.9 實戰(zhàn)項目 爬取實際圖書網站數(shù)據(jù) 175
5.9.1 解析網站HTML代碼 175
5.9.2 爬取網站圖書數(shù)據(jù) 178
5.9.3 實現(xiàn)自動翻頁 179
5.9.4 編寫爬蟲程序 181
5.9.5 執(zhí)行爬蟲程序 184
項目總結 185
練習5 185
項目6 爬取商城網站數(shù)據(jù) 187
6.1 商城網站項目任務 187
6.2 使用selenium編寫爬蟲程序 189
6.2.1 JavaScript程序控制網頁 189
6.2.2 普通爬蟲程序的問題 190
6.2.3 安裝selenium框架與Chrome驅動程序 191
6.2.4 編寫selenium爬蟲程序 192
6.3 使用selenium查找HTML元素 193
6.3.1 創(chuà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)建用戶登錄網站 200
6.4.2 使用元素動作 201
6.4.3 編寫爬蟲程序 202
6.4.4 執(zhí)行JavaScript程序 203
6.5 使用selenium爬取AJAX網頁數(shù)據(jù) 205
6.5.1 創(chuàng)建AJAX網站 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)建延遲模擬網站 211
6.6.2 編寫爬蟲程序 213
6.6.3 selenium強制等待 213
6.6.4 selenium隱式等待 214
6.6.5 selenium循環(huán)與顯式等待 214
6.6.6 selenium顯式等待形式 216
6.7 綜合項目 爬取模擬商城網站數(shù)據(jù) 217
6.7.1 創(chuàng)建模擬商城網站 217
6.7.2 爬取網站數(shù)據(jù) 221
6.7.3 設計數(shù)據(jù)存儲 222
6.7.4 編寫爬蟲程序 222
6.7.5 執(zhí)行爬蟲程序 226
6.8 實戰(zhàn)項目 爬取實際商城網站數(shù)據(jù) 226
6.8.1 解析網頁HTML代碼 226
6.8.2 爬取網頁數(shù)據(jù) 230
6.8.3 實現(xiàn)網頁翻頁 231
6.8.4 編寫爬蟲程序 233
6.8.5 執(zhí)行爬蟲程序 237
項目總結 239
練習6 239