本書首先介紹了開發(fā)環(huán)境的配置,接著討論了Web網(wǎng)站的構成和頁面渲染、動態(tài)網(wǎng)頁和靜態(tài)網(wǎng)頁對爬蟲造成的影響,緊接著詳細介紹了信息校驗型反爬蟲、動態(tài)渲染反爬蟲、文本混淆反爬蟲知識、特征識別反爬蟲的原理、實現(xiàn)和繞過,然后概覽了App數(shù)據(jù)爬取的關鍵和常用的反爬蟲手段,最后介紹了常見的編碼和加密原理、JavaScript代碼混淆知識、前端禁止事件以及與爬蟲相關的法律知識和風險點。
【人氣推薦】《Python 3 網(wǎng)絡爬蟲開發(fā)實戰(zhàn)》作者、微軟小冰工程師崔慶才作序,騰訊、馬蜂窩工程師傾力推薦。
【干貨滿滿】爬蟲工程師不可錯過的“武功秘籍”,內(nèi)容包括但不限于Cookie 反爬蟲、WebSocket 反爬蟲、字體反爬蟲、WebDriver 反爬蟲、App 反爬蟲、驗證碼反爬蟲。
【反爬蟲原理+爬蟲實戰(zhàn)】從實戰(zhàn)出發(fā),印證國內(nèi)互聯(lián)網(wǎng)企業(yè)內(nèi)部加密原理,側(cè)重講解反爬蟲的原理以及繞過方法。
【21個反爬蟲示例】結合練習平臺 Steamboat,幫助讀者隨時復現(xiàn)書中的 21個爬蟲示例,鞏固所學知識。
韋世東,資深爬蟲工程師,2019年華為云·云享專家,掘金社區(qū)優(yōu)秀作者,GitChat認證作者,夜幕團隊(NightTeam)成員。擁有七年互聯(lián)網(wǎng)從業(yè)經(jīng)驗,擅長反爬蟲的設計和繞過技巧。
第 1章 開發(fā)環(huán)境配置 1
1.1 操作系統(tǒng)的選擇 1
1.1.1 Ubuntu 簡介 1
1.1.2 VirtualBox 的安裝 2
1.1.3 安裝 Ubuntu 3
1.1.4 全屏設置 8
1.1.5 Python 設置 9
1.2 練習平臺 Steamboat 10
1.2.1 安裝 Docker 11
1.2.2 安裝 Steamboat 12
1.2.3 Steamboat 使用說明 14
1.3 第三方庫的安裝 15
1.3.1 Requests 15
1.3.2 Selenium 15
1.3.3 瀏覽器驅(qū)動 16
1.3.4 Splash 18
1.3.5 Puppeteer 18
1.3.6 PyTesseract 20
1.4 常用軟件的安裝 21
1.4.1 nginx 21
1.4.2 Charles 22
1.4.3 PC端 SSL 證書 23
1.4.4 iOS 系統(tǒng)的證書設置 26
1.4.5 Andriod 模擬器的安裝與證書設置 27
1.4.6 Postman 29
1.4.7 Google Chrome 32
1.4.8 JADX 33
1.5 深度學習環(huán)境配置 35
1.5.1 NVIDIA顯卡驅(qū)動安裝 35
1.5.2 CUDA Toolkit 的安裝 38
1.5.3 cuDNN 的安裝 40
1.5.4 深度學習庫 PyTorch 41
1.5.5 深度學習框架 Darknet 42
1.5.6 圖片標注工具 LabelImg 43
1.6 Node.js 環(huán)境配置 44
1.6.1 Node.js 的安裝 44
1.6.2 UglifyJS 的安裝 45
第 2章 Web網(wǎng)站的構成和頁面渲染 47
2.1 nginx服務器 47
2.1.1 nginx的信號 48
2.1.2 nginx配置文件 49
2.1.3 簡單的代理服務 50
2.1.4 nginx模塊與指令 52
2.1.5 nginx日志 57
2.1.6 小結 58
2.2 瀏覽器 58
2.2.1 瀏覽器的主要結構 59
2.2.2 頁面渲染 60
2.2.3 HTML DOM 62
2.2.4 瀏覽器對象BOM 65
2.2.5 小結 70
2.3 網(wǎng)絡協(xié)議 71
2.3.1 認識HTTP 71
2.3.2 資源與資源標識符 72
2.3.3 HTTP請求與響應 74
2.3.4 Cookie 77
2.3.5 了解HTTPS 80
2.3.6 認識WebSocket 81
2.3.7 WebSocket握手 81
2.3.8 數(shù)據(jù)傳輸與數(shù)據(jù)幀 83
2.3.9 WebSocket連接 85
2.3.10 連接保持 87
2.3.11 小結 88
本章總結 88
第3章 爬蟲與反爬蟲 89
3.1 動態(tài)網(wǎng)頁與網(wǎng)頁源代碼 89
3.2 爬蟲知識回顧 90
3.3 反爬蟲的概念與定義 95
本章總結 96
第4章 信息校驗型反爬蟲 97
4.1 User-Agent 反爬蟲 97
4.1.1 User-Agent 反爬蟲繞過實戰(zhàn) 97
4.1.2 User-Agent 反爬蟲的原理與實現(xiàn) 100
4.1.3 小結 103
4.2 Cookie 反爬蟲 103
4.2.1 Cookie 反爬蟲繞過實戰(zhàn) 103
4.2.2 Cookie 反爬蟲原理與實現(xiàn) 109
4.2.3 Cookie 與 JavaScript 結合 110
4.2.4 用戶過濾 112
4.2.5 小結 113
4.3 簽名驗證反爬蟲 114
4.3.1 簽名驗證反爬蟲繞過實戰(zhàn) 114
4.3.2 簽名驗證反爬蟲原理與實現(xiàn) 121
4.3.3 有道翻譯反爬蟲案例 123
4.3.4 小結 125
4.4 WebSocket 握手驗證反爬蟲 125
4.5 WebSocket 消息校驗反爬蟲 129
4.5.1 WebSocket 消息校驗反爬蟲示例 130
4.5.2 樂魚體育反爬蟲案例 132
4.6 WebSocket Ping反爬蟲 133
本章總結 134
第5章 動態(tài)渲染反爬蟲 135
5.1 常見的動態(tài)渲染反爬蟲案例 135
5.1.1 自動執(zhí)行的異步請求案例 135
5.1.2 點擊事件和計算 138
5.1.3 下拉加載和異步請求 142
5.1.4 小結 144
5.2 動態(tài)渲染的通用解決辦法 144
5.2.1 Selenium 套件 144
5.2.2 異步渲染庫 Puppeteer 148
5.2.3 異步渲染服務 Splash 150
5.2.4 通用不一定適用 154
5.2.5 渲染工具知識擴展 156
5.2.6 小結 160
本章總結 160
第6章 文本混淆反爬蟲 161
6.1 圖片偽裝反爬蟲 161
6.1.1 圖片偽裝反爬蟲繞過實戰(zhàn) 161
6.1.2 廣西人才網(wǎng)反爬蟲案例 164
6.1.3 小結 165
6.2 CSS 偏移反爬蟲 165
6.2.1 CSS 偏移反爬蟲繞過實戰(zhàn) 166
6.2.2 去哪兒網(wǎng)反爬蟲案例 172
6.2.3 小結 174
6.3 SVG 映射反爬蟲 174
6.3.1 SVG 映射反爬蟲繞過實戰(zhàn) 174
6.3.2 大眾點評反爬蟲案例 177
6.3.3 SVG 反爬蟲原理 179
6.3.4 小結 186
6.4 字體反爬蟲 186
6.4.1 字體反爬蟲示例 186
6.4.2 字體文件 WOFF 189
6.4.3 字體反爬蟲繞過實戰(zhàn) 196
6.4.4 小結 198
6.5 文本混淆反爬蟲通用解決辦法 199
6.5.1 光學字符識別 OCR 199
6.5.2 PyTesseract 的缺點 201
6.5.3 文字識別 API 202
6.5.4 小結 206
本章總結 206
第7章 特征識別反爬蟲 207
7.1 WebDriver 識別 207
7.1.1 WebDriver 識別示例 207
7.1.2 WebDriver 識別原理 210
7.1.3 WebDriver 識別的繞過方法 211
7.1.4 淘寶網(wǎng) WebDriver 案例 214
7.1.5 小結 215
7.2 瀏覽器特征 215
7.3 爬蟲特征 219
7.3.1 訪問頻率限制繞過實戰(zhàn) 219
7.3.2 訪問頻率限制的原理與實現(xiàn) 222
7.3.3 瀏覽器指紋知識擴展 223
7.3.4 淘寶網(wǎng)瀏覽器指紋案例 227
7.3.5 小結 228
7.4 隱藏鏈接反爬蟲 228
7.4.1 隱藏鏈接反爬蟲示例 228
7.4.2 隱藏鏈接反爬蟲原理與實現(xiàn) 231
7.4.3 小結 233
本章總結 234
第8章 App反爬蟲 235
8.1 App 抓包 235
8.1.1 HTTP 抓包示例 235
8.1.2 掌上英雄聯(lián)盟抓包案例(HTTP) 240
8.1.3 京東商城抓包案例(HTTPS) 243
8.1.4 小結 246
8.2 APK文件反編譯 246
8.2.1 App 簽名驗證反爬蟲示例 246
8.2.2 APK文件反編譯實戰(zhàn) 248
8.2.3 小結 251
8.3 代碼混淆反爬蟲 251
8.3.1 Android 代碼混淆原理 252
8.3.2 掘金社區(qū) App 代碼混淆案例 255
8.3.3 小結 257
8.4 App 應用加固知識擴展 257
8.5 了解應用程序自動化測試工具 260
8.5.1 了解 Appium 260
8.5.2 了解 Airtest Project 260
8.5.3 小結 262
本章總結 262
第9章 驗證碼 263
9.1 字符驗證碼 263
9.1.1 字符驗證碼示例 263
9.1.2 實現(xiàn)字符驗證碼 266
9.1.3 深度學習的概念 269
9.1.4 卷積神經(jīng)網(wǎng)絡的概念 272
9.1.5 使用卷積神經(jīng)網(wǎng)絡預測驗證碼 276
9.1.6 小結 286
9.2 計算型驗證碼 286
9.2.1 計算型驗證碼示例 286
9.2.2 實現(xiàn)計算型驗證碼 288
9.2.3 小結 291
9.3 滑動驗證碼 291
9.3.1 滑動驗證碼示例 291
9.3.2 實現(xiàn)滑動驗證碼 295
9.3.3 小結 298
9.4 滑動拼圖驗證碼 298
9.4.1 滑動拼圖驗證碼示例 299
9.4.2 實現(xiàn)滑動拼圖驗證碼 302
9.4.3 難度升級 307
9.4.4 圖片中的缺口位置識別 308
9.4.5 小結 310
9.5 文字點選驗證碼 310
9.5.1 文字點選驗證碼示例 310
9.5.2 實現(xiàn)文字點選驗證碼 312
9.5.3 目標檢測的概念 316
9.5.4 深度學習實現(xiàn)文字定位 317
9.5.5 批量檢測與坐標輸出 323
9.5.6 小結 330
9.6 鼠標軌跡的檢測和原理 330
9.7 驗證碼產(chǎn)品賞析 336
9.7.1 滑動驗證碼 336
9.7.2 圖標驗證碼 337
9.7.3 空間推理驗證碼 338
9.7.4 小結 338
本章總結 338
第 10章 綜合知識 339
10.1 編碼與加密 339
10.1.1 ASCII 編碼 339
10.1.2 詳解 Base64 342
10.1.3 基于編碼的反爬蟲設計 344
10.1.4 MD5消息摘要算法 347
10.1.5 對稱加密與 AES 352
10.1.6 非對稱加密與 RSA 357
10.1.7 小結 360
10.2 JavaScript 代碼混淆 360
10.2.1 常見的混淆方法 361
10.2.2 混淆代碼的還原 363
10.2.3 混淆原理 365
10.2.4 實現(xiàn)一個簡單的混淆器 366
10.2.5 小結 369
10.3 前端禁止事件 369
10.3.1 禁止鼠標事件 370
10.3.2 禁止鍵盤事件 371
10.3.3 小結 372
10.4 法律法規(guī) 372
10.4.1 數(shù)據(jù)安全管理辦法征求意見稿 374
10.4.2 爬蟲協(xié)議 Robots 375
10.4.3 與爬蟲相關的法律法規(guī) 376
10.4.4 小結 377
本章總結 377