內容簡介
《Python網路爬蟲技術手冊:基礎·實戰·強化》是“計算機科學與技術手冊系列”圖書之一,該系列圖書內容全面,以理論聯繫實際、能學到並做到為宗旨,以技術為核心,以案例為輔助,引領讀者全面學習基礎技術、代碼編寫方法和具體套用項目,旨在為想要進入相應領域或者已經在該領域深耕多年的技術人員提供新而全的技術性內容及案例。
本書是一本側重編程基礎+實踐的Python爬蟲圖書,從基礎、實戰、強化三個層次循序漸進地介紹了網路爬蟲入門必備知識:基礎篇主要講解網路爬蟲的基礎內容;實戰篇主要講解目前套用最廣的各類資料庫爬蟲相關技術和案例;強化篇結合資料庫、數據分析、可視化等進行大型項目綜合實戰練習。本書內容充實,給讀者提供了較為豐富全面的技術支持和案例強化,通過各種示例將學習與套用相結合,打造輕鬆學習、零壓力學習的環境,通過案例對所學知識進行綜合套用,通過開發實際項目將網路爬蟲的各項技能套用到實際工作中,幫助讀者實現學以致用,快速掌握網路爬蟲的各項技能。
本書提供豐富的資源,包含109個實例、13個實戰案例、2個套用強化項目,力求為讀者打造一本基礎+實戰+強化一體化的、精彩的Python網路爬蟲圖書。
本書不僅適合初學者、數據採集相關技術人員、對數據感興趣的人員,而且適合從事其他崗位想掌握一定的數據採集能力的職場人員閱讀參考。
圖書目錄
第1篇 基礎篇
第1章 爬蟲基礎
1.1 什麼是網路爬蟲 2
1.2 網路爬蟲的分類 3
1.3 網路爬蟲的原理 3
1.4 HTTP基本原理 3
1.4.1 什麼是URL 3
1.4.2 HTTP協定 4
1.4.3 HTTP與Web伺服器 4
1.4.4 瀏覽器中的請求和回響 5
1.5 網頁的基本結構 6
1.5.1 了解HTML 6
1.5.2 了解CSS 6
1.5.3 了解JavaScript 8
第2章 搭建網路爬蟲開發環境
2.1 Anaconda的安裝 10
2.2 下載與安裝PyCharm 13
2.3 配置PyCharm 16
2.4 測試PyCharm 18
第3章 網路請求urllib模組
3.1 了解urllib 20
3.2 傳送網路請求 20
3.2.1 傳送GET請求 21
實例3.1 演示常用的方法與屬性 21
3.2.2 傳送POST請求 22
實例3.2 傳送POST請求 22
3.2.3 請求逾時 22
實例3.3 處理網路逾時 23
3.2.4 設定請求頭 23
實例3.4 設定請求頭 24
3.2.5 獲取與設定Cookie 25
實例3.5 模擬登錄 25
實例3.6 獲取Cookie 27
實例3.7 保存Cookie檔案 27
實例3.8 獲取登錄後頁面中的信息 28
3.2.6 代理IP的設定 29
實例3.9 設定代理IP 29
3.3 處理請求異常 29
實例3.10 處理URLError異常 29
實例3.11 使用HTTPError類捕獲異常 30
實例3.12 雙重異常的捕獲 31
3.4 解析URL 31
3.4.1 URL的拆分(urlparse、urlsplit) 31
實例3.13 使用urlparse()方法拆分URL 32
實例3.14 使用urlsplit()方法拆分URL 32
3.4.2 URL的組合(urlunparse、urlunsplit) 33
實例3.15 使用urlunparse()方法組合URL 33
實例3.16 使用urlunsplit()方法組合URL 34
3.4.3 URL的連線(urljoin) 34
實例3.17 使用urljoin()方法連線URL 34
3.4.4 URL的編碼與解碼(urlencode、quote、unquote) 35
實例3.18 使用urlencode()方法編碼請求參數 35
實例3.19 使用quote()方法編碼字元串參數 35
實例3.20 使用unquote()方法解碼請求參數 36
3.4.5 URL的參數轉換 36
實例3.21 使用parse_qs()方法將參數轉換為字典類型 36
實例3.22 使用parse_qsl()方法將參數轉換為元組所組成的列表 36
3.5 綜合案例——爬取“百度熱搜” 37
3.5.1 分析數據 37
3.5.2 實現網路爬蟲 37
3.6 實戰練習 39
第4章 網路請求urllib3模組
4.1 了解urllib3 40
4.2 傳送網路請求 41
4.2.1 傳送GET請求 41
實例4.1 傳送GET請求 41
實例4.2 傳送多個請求 41
4.2.2 傳送POST請求 42
實例4.3 傳送POST請求 42
4.2.3 重試請求 43
實例4.4 重試請求 43
4.2.4 獲得回響內容 43
實例4.5 獲取回響頭信息 43
實例4.6 處理伺服器返回的JSON信息 44
實例4.7 處理伺服器返回二進制數據 44
4.2.5 設定請求頭 45
實例4.8 設定請求頭 45
4.2.6 設定逾時 46
實例4.9 設定逾時 46
4.2.7 設定代理IP 47
實例4.10 設定代理IP 47
4.3 上傳檔案 47
實例4.11 上傳文本檔案 47
實例4.12 上傳圖片檔案 48
4.4 綜合案例——爬取必應壁紙 48
4.4.1 分析數據 48
4.4.2 實現網路爬蟲 49
4.5 實戰練習 51
第5章 網路請求requests模組
5.1 基本請求方式 52
5.1.1 傳送GET請求 53
實例5.1 傳送GET請求不帶參數 53
5.1.2 設定編碼 53
實例5.2 獲取網頁源碼 53
5.1.3 二進制數據的爬取 54
實例5.3 下載百度logo圖片 54
5.1.4 傳送GET(帶參數)請求 54
5.1.5 傳送POST請求 55
實例5.4 傳送POST請求 55
5.2 高級請求方式 56
5.2.1 設定請求頭 56
實例5.5 設定請求頭 56
5.2.2 Cookie的驗證 57
實例5.6 模擬豆瓣登錄 57
5.2.3 會話請求 58
實例5.7 會話請求 58
5.2.4 驗證請求 58
實例5.8 驗證請求 59
5.2.5 網路逾時與異常 59
實例5.9 網路逾時與異常 59
實例5.10 判斷網路異常 60
5.2.6 檔案上傳 60
實例5.11 上傳圖片檔案 60
5.2.7 代理的套用 61
實例5.12 使用代理IP傳送請求 61
5.3 綜合案例——爬取糗事百科(視頻) 62
5.3.1 分析數據 62
5.3.2 實現爬蟲 63
5.4 實戰練習 64
第6章 requests模組的兩大擴展
6.1 安裝requests-cache模組 65
6.2 爬蟲快取的套用 66
6.3 多功能requests-html模組 68
6.3.1 傳送網路請求 68
6.3.2 提取數據 70
實例6.1 爬取即時新聞 70
6.3.3 獲取動態渲染的數據 73
實例6.2 獲取動態渲染的數據 73
6.4 綜合案例——爬取百度天氣 75
6.4.1 分析數據 75
6.4.2 實現爬蟲 76
6.5 實戰練習 77
第7章 正則表達式解析
7.1 通過search()匹配字元串 78
7.1.1 匹配指定開頭的字元串 79
實例7.1 搜尋第一個以“mr_”開頭的字元串 79
7.1.2 可選匹配字元串中的內容 79
實例7.2 可選匹配字元串中的內容 79
7.1.3 使用“b”匹配字元串的邊界 80
實例7.3 使用“b”匹配字元串的邊界 80
7.2 通過findall()匹配字元串 80
7.2.1 匹配所有以指定字元開頭的字元串 81
實例7.4 匹配所有以“mr_”開頭的字元串 81
7.2.2 貪婪匹配法 81
實例7.5 使用“.*”實現貪婪匹配字元串 81
7.2.3 非貪婪匹配法 82
實例7.6 使用“.*?”實現非貪婪匹配字元串 82
7.3 處理字元串 83
7.3.1 使用sub()方法替換字元串 83
實例7.7 使用sub()方法替換字元串 83
7.3.2 使用split()方法分割字元串 84
實例7.8 使用split()方法分割字元串 84
7.4 綜合案例——爬取QQ音樂熱歌榜 85
7.4.1 分析數據 85
7.4.2 實現爬蟲 85
7.5 實戰練習 86
第8章 lxml解析模組
8.1 了解XPath 87
8.2 XPath的基本操作 88
8.2.1 HTML的解析 88
實例8.1 解析本地的HTML檔案 88
實例8.2 解析字元串類型的HTML代碼 88
實例8.3 解析伺服器返回的HTML代碼 89
8.2.2 獲取所有標籤 90
實例8.4 獲取HTML代碼的所有標籤 90
8.2.3 獲取子標籤 91
實例8.5 獲取一個標籤中的子標籤 91
實例8.6 獲取子孫標籤 92
8.2.4 獲取父標籤 92
實例8.7 獲取一個標籤的父標籤 92
8.2.5 獲取文本 93
實例8.8 獲取HTML代碼中的文本 93
8.2.6 屬性匹配 94
實例8.9 使用“【@...】”實現標籤屬性的匹配 94
實例8.10 屬性多值匹配 94
實例8.11 一個標籤中多個屬性的匹配 95
8.2.7 獲取屬性值 96
實例8.12 獲取屬性所對應的值 96
實例8.13 使用索引按序獲取屬性對應的值 97
8.2.8 使用標籤軸獲取標籤內容 98
實例8.14 使用標籤軸的方式獲取標籤內容 98
8.3 綜合案例——爬取豆瓣新書速遞 99
8.3.1 分析數據 99
8.3.2 實現爬蟲 99
8.4 實戰練習 100
第9章 BeautifulSoup解析模組
9.1 BeautifulSoup的基礎套用 101
9.1.1 安裝BeautifulSoup 101
9.1.2 解析器的區別 102
9.1.3 解析HTML 103
實例9.1 解析HTML代碼 103
9.2 獲取標籤內容 103
9.2.1 獲取標籤對應的代碼 104
實例9.2 獲取標籤對應的代碼 104
9.2.2 獲取標籤屬性 105
實例9.3 獲取標籤屬性 105
9.2.3 獲取標籤內的文本 106
9.2.4 嵌套獲取標籤內容 106
實例9.4 嵌套獲取標籤內容 106
9.2.5 關聯獲取 107
實例9.5 獲取子標籤 107
實例9.6 獲取子孫標籤 108
實例9.7 獲取父標籤 109
實例9.8 獲取兄弟標籤 109
9.3 利用方法獲取內容 111
9.3.1 find_all()方法 111
實例9.9 find_all(name)通過標籤名稱獲取內容 111
實例9.10 find_all(attrs)通過指定屬性獲取內容 112
實例9.11 find_all(text)獲取標籤中的文本 112
9.3.2 find()方法 113
實例9.12 獲取第一個匹配的標籤內容 113
9.3.3 其他方法 114
9.4 CSS選擇器 114
實例9.13 使用CSS選擇器獲取標籤內容 115
9.5 綜合案例——爬取百度貼吧(熱議榜) 116
9.5.1 分析數據 116
9.5.2 實現爬蟲 116
9.6 實戰練習 117
第10章 爬取動態渲染的數據
10.1 selenium模組 118
10.1.1 配置selenium環境 118
10.1.2 下載瀏覽器驅動 119
10.1.3 selenium的套用 119
實例10.1 獲取京東商品信息 119
10.1.4 selenium的常用方法 120
10.2 Splash服務 121
10.2.1 搭建Splash環境 122
10.2.2 Splash的API接口 123
實例10.2 獲取百度首頁logo圖片的連結 123
實例10.3 獲取百度首頁截圖 124
實例10.4 獲取請求頁面的json信息 125
10.2.3 自定義lua腳本 125
實例10.5 獲取百度渲染後的HTML代碼 125
10.3 綜合案例——爬取豆瓣閱讀(連載榜) 127
10.3.1 分析數據 127
10.3.2 實現爬蟲 128
10.4 實戰練習 128
第11章 數據清洗與檔案存儲
11.1 使用pandas進行數據清洗 130
11.1.1 常見的兩種數據結構 130
11.1.2 pandas數據的基本操作 134
11.1.3 處理NaN數據 138
11.1.4 重複數據的篩選 140
11.2 常見檔案的基本操作 142
11.2.1 存取TXT檔案 142
實例11.1 TXT檔案存儲 143
實例11.2 讀取message.txt檔案中的前9個字元 143
實例11.3 從檔案的第14個字元開始讀取8個字元 144
實例11.4 讀取一行 144
實例11.5 讀取全部行 145
11.2.2 存取CSV檔案 146
11.2.3 存取Excel檔案 148
11.3 綜合案例——爬取豆瓣小組(討論精選) 148
11.3.1 分析數據 149
11.3.2 實現爬蟲 149
11.4 實戰練習 149
第12章 資料庫存儲
12.1 SQLite資料庫 151
12.1.1 創建資料庫檔案 151
12.1.2 操作SQLite 152
12.2 MySQL資料庫 153
12.2.1 下載MySQL 153
12.2.2 安裝MySQL伺服器 154
12.2.3 配置MySQL 158
12.2.4 安裝PyMySQL資料庫操作模組 159
12.2.5 資料庫的連線 160
實例12.1 連線資料庫 160
12.2.6 數據表的創建 160
實例12.2 創建數據表 161
12.2.7 數據表的基本操作 161
實例12.3 運算元據表 161
12.3 綜合案例——爬取下廚房(家常選單) 162
12.3.1 分析數據 162
12.3.2 實現爬蟲 162
12.4 實戰練習 164
第13章 App抓包
13.1 下載與安裝Charles抓包工具 165
13.2 PC端證書的安裝 167
13.3 設定SSL代理 169
13.4 網路配置 169
13.5 手機證書的安裝 170
13.6 綜合案例——抓取手機微信新聞的地址 172
13.7 實戰練習 173
第14章 驗證碼識別
14.1 字元驗證碼 174
14.1.1 配置OCR 174
14.1.2 下載驗證碼圖片 175
實例14.1 下載驗證碼圖片 175
14.1.3 識別圖片驗證碼 176
實例14.2 識別圖片驗證碼 176
14.2 第三方驗證碼識別 178
實例14.3 第三方打碼平台 178
14.3 滑動拼圖驗證碼 181
實例14.4 滑動拼圖驗證碼 181
14.4 綜合案例——識別隨機生成的驗證碼 182
14.5 實戰練習 183
第15章 Scrapy爬蟲框架的基本套用
15.1 了解Scrapy爬蟲框架 184
15.2 配置Scrapy爬蟲框架 185
15.2.1 使用Anaconda安裝Scrapy 185
15.2.2 Windows系統下配置Scrapy 186
15.3 Scrapy的基本用法 187
15.3.1 創建項目 187
15.3.2 創建爬蟲 188
實例15.1 爬取網頁代碼並保存HTML檔案 188
15.3.3 提取數據 190
實例15.2 使用XPath表達式獲取多條信息 191
實例15.3 翻頁提取數據 191
實例15.4 包裝結構化數據 192
15.4 綜合案例——爬取NBA得分排名 192
15.4.1 分析數據 193
15.4.2 實現爬蟲 193
15.5 實戰練習 194
第16章 Scrapy爬蟲框架的高級套用
16.1 編寫Item Pipeline 195
16.1.1 Item Pipeline的核心方法 195
16.1.2 將信息存儲到資料庫中 196
實例16.1 將京東數據存儲至資料庫 196
16.2 檔案下載 199
實例16.2 下載京東外設商品圖片 200
16.3 自定義中間件 201
16.3.1 設定隨機請求頭 201
實例16.3 設定隨機請求頭 202
16.3.2 設定Cookies 203
實例16.4 通過Cookies模擬自動登錄 204
16.3.3 設定代理IP 205
實例16.5 隨機代理中間件 206
16.4 綜合案例——爬取NBA球員資料 207
16.4.1 分析數據 207
16.4.2 實現爬蟲 208
16.5 實戰練習 211
第2篇 實戰篇
第17章 基於正則表達式爬取編程e學網視頻(requests+re)
17.1 案例效果預覽 213
17.2 案例準備 214
17.3 業務流程 214
17.4 實現過程 214
17.4.1 查找視頻頁面 214
17.4.2 分析視頻地址 215
17.4.3 實現視頻下載 215
第18章 基於正則表達式爬取免費代理IP(requests+pandas+re+random)
18.1 案例效果預覽 217
18.2 案例準備 218
18.3 業務流程 218
18.4 實現過程 219
18.4.1 分析請求地址 219
18.4.2 確認數據所在位置 219
18.4.3 爬取代理IP並保存 220
18.4.4 檢測代理IP 221
第19章 基於beautifulsoup4爬取酷狗TOP500音樂榜單(requests+bs4+time+random)
19.1 案例效果預覽 224
19.2 案例準備 225
19.3 業務流程 225
19.4 實現過程 225
19.4.1 分析每頁的請求地址 225
19.4.2 分析信息所在標籤位置 226
19.4.3 編寫爬蟲代碼 227
第20章 基於beautifulsoup4爬取段子網(requests+beautifulsoup4+time+random)
20.1 案例效果預覽 229
20.2 案例準備 230
20.3 業務流程 230
20.4 實現過程 230
20.4.1 分析每頁請求地址 230
20.4.2 分析詳情頁請求地址 231
20.4.3 確認段子各種信息的HTML代碼位置 232
20.4.4 編寫爬蟲代碼 232
第21章 基於beautifulsoup4爬取汽車之家圖片(beautifulsoup4+Pillow+PyQt5+urllib)
21.1 案例效果預覽 234
21.2 案例準備 235
21.3 業務流程 235
21.4 實現過程 236
21.4.1 登錄窗體 236
21.4.2 設計主窗體 237
21.4.3 編寫爬蟲 237
21.4.4 啟動爬蟲 239
21.4.5 查看原圖 241
第22章 使用多進程爬取電影資源(requests+bs4+multiprocessing +re+time)
22.1 案例效果預覽 242
22.2 案例準備 242
22.3 業務流程 243
22.4 實現過程 243
22.4.1 分析請求地址 243
22.4.2 爬取電影詳情頁地址 244
22.4.3 爬取電影信息與下載地址 245
第23章 基於多進程實現二手房數據查詢(requests_html+pandas+matplotlib+multiprocessing)
23.1 案例效果預覽 248
23.2 案例準備 249
23.3 業務流程 249
23.4 實現過程 250
23.4.1 確認二手房數據位置 250
23.4.2 二手房數據的爬取 251
23.4.3 數據可視化顯示 253
第24章 基於動態渲染頁面爬取京東圖書銷量排行榜(requests_html+sqlite3+os)
24.1 案例效果預覽 256
24.2 案例準備 257
24.3 業務流程 257
24.4 實現過程 257
24.4.1 分析請求地址 257
24.4.2 確認數據在網頁HTML代碼中的位置 257
24.4.3 編寫爬蟲程式 258
第25章 爬取中關村線上中的手機數據(requests_html+pymysql+random+time)
25.1 案例效果預覽 260
25.2 案例準備 260
25.3 業務流程 261
25.4 實現過程 261
25.4.1 分析手機主頁中每頁地址 261
25.4.2 分析每個手機的詳情頁地址 262
25.4.3 確認詳情頁手機數據位置 262
25.4.4 創建MySQL數據表 262
25.4.5 編寫爬蟲程式 263
第26章 基於異步請求爬取北、上、廣、深租房信息(requests+lxml+pandas+aiohttp+asyncio)
26.1 案例效果預覽 267
26.2 案例準備 267
26.3 業務流程 268
26.4 實現過程 268
26.4.1 獲取租房信息總頁數 268
26.4.2 確認數據所在的HTML代碼位置 271
26.4.3 編寫爬蟲提取數據 272
第27章 基於XPath爬取豆瓣電影Top250(requests+lxml+time+random)
27.1 案例效果預覽 274
27.2 案例準備 275
27.3 業務流程 275
27.4 實現過程 275
27.4.1 分析請求地址 275
27.4.2 分析信息位置 276
27.4.3 爬蟲代碼的實現 277
第28章 分散式爬取新聞數據(scrapy+ pymysql+scrapy-redis正則表達式)
28.1 案例效果預覽 279
28.2 案例準備 280
28.3 業務流程 280
28.4 實現過程 280
28.4.1 Redis資料庫的安裝 280
28.4.2 安裝scrapy-redis模組 281
28.4.3 分析請求地址 282
28.4.4 創建數據表(MySQL) 282
28.4.5 創建Scrapy項目 283
28.4.6 分散式爬蟲的啟動 286
第29章 微信智慧型機器人(Flask+小米球ngrok)
29.1 案例效果預覽 290
29.2 案例準備 291
29.3 業務流程 291
29.4 微信公眾平台開發必備 291
29.4.1 註冊訂閱號 291
29.4.2 公眾號基本配置 292
29.5 區域網路穿透工具 293
29.5.1 區域網路穿透工具簡介 293
29.5.2 下載安裝 293
29.5.3 測試外網域名 294
29.6 爬取糗事百科笑話 295
29.6.1 頁面分析 295
29.6.2 隨機爬取一條笑話 295
29.7 爬取天氣信息 296
29.7.1 頁面分析 296
29.7.2 爬取天氣信息 297
29.8 微信智慧型機器人的實現 298
29.8.1 校驗簽名 298
29.8.2 填寫配置信息 299
29.8.3 接收文本訊息 299
29.8.4 整合笑話和天氣功能 300
第3篇 強化篇
第30章 電商管家(PyQt5+pyqt5-tools+requests+pymysql+matplotlib)
30.1 系統需求分析 303
30.1.1 系統概述 303
30.1.2 系統可行性分析 304
30.1.3 系統用戶角色分配 304
30.1.4 功能性需求分析 304
30.1.5 非功能性需求分析 304
30.2 系統設計 304
30.2.1 系統功能結構 304
30.2.2 系統業務流程 305
30.2.3 系統預覽 305
30.3 系統開發必備 306
30.3.1 開發工具準備 306
30.3.2 資料夾組織結構 306
30.4 主窗體的UI設計 306
30.4.1 主窗體的布局 306
30.4.2 主窗體顯示效果 308
30.5 設計資料庫表結構 308
30.6 爬取數據 309
30.6.1 獲取京東商品熱賣排行信息 309
30.6.2 獲取價格信息 313
30.6.3 獲取評價信息 314
30.6.4 定義資料庫操作檔案 316
30.7 主窗體的數據展示 319
30.7.1 顯示前10名熱賣榜圖文信息 319
30.7.2 顯示關注商品列表 322
30.7.3 顯示商品分類比例餅圖 327
30.8 外設產品熱賣榜 330
30.9 商品預警 332
30.9.1 關注商品中、差評預警 332
30.9.2 關注商品價格變化預警 334
30.9.3 更新關注商品信息 336
30.10 系統功能 337
第31章 火車票智慧型分析工具(PyQt5+matplotlib +requests+json+sys+time)?
31.1 系統需求分析 339
31.1.1 系統概述 339
31.1.2 系統可行性分析 340
31.1.3 系統用戶角色分配 340
31.1.4 功能性需求分析 340
31.1.5 非功能性需求分析 340
31.2 系統設計 341
31.2.1 系統功能結構 341
31.2.2 系統業務流程 341
31.2.3 系統預覽 341
31.3 系統開發必備 342
31.3.1 開發工具準備 342
31.3.2 資料夾組織結構 342
31.4 主窗體的UI設計 343
31.4.1 主窗體的布局 343
31.4.2 主窗體顯示效果 347
31.5 爬取數據 347
31.5.1 獲取請求地址與參數 347
31.5.2 下載數據檔案 348
31.5.3 查詢所有車票信息 352
31.5.4 臥鋪票的查詢與分析 354
31.5.5 查詢車票起售時間 356
31.6 主窗體的數據顯示 358
31.6.1 車票查詢區域的數據顯示 358
31.6.2 臥鋪售票分析區域的數據顯示 364
31.6.3 臥鋪車票數量走勢圖的顯示 366
31.6.4 查詢車票起售時間的數據顯示 369
附錄
附錄1 數據解析速查表 371
附錄2 PyCharm 常用快捷鍵 377
附錄3 PyCharm 常用設定 378