描述
本書特色
◎ 系統說明爬蟲和反爬蟲技術
◎ 爬蟲工程師不可錯過的武功秘笈
◎ 幫你從0到1理清爬蟲與反爬蟲的紅藍對抗
內容簡介
本書重點
爬蟲大戰,爾虞我詐,利用熟練的Python3瀏覽器知識,加上人工智慧的幫助,讓百度、微軟、Google都沒辦法從你的網站爬走一點點資料!
資訊型反爬蟲、動態繪製反爬蟲、文字混淆反爬蟲、特徵識別反爬蟲、app反爬蟲、程式混淆反爬蟲、驗證碼反爬蟲,再強大的爬蟲機器人也就地當機!
本書主要內容
本書共10 章,首先對各種反爬蟲技術進行合理的歸類,然後透過剖析多個案例幫助讀者了解各種反爬蟲技術的原理。內容包含但不限於Cookie反爬蟲、WebSocket反爬蟲、字型反爬蟲、WebDriver反爬蟲、App反爬蟲、驗證碼反爬蟲,幾乎涵蓋市面上所有的反爬蟲技術類型,內容十分詳盡。另外,還針對各種反爬蟲列出對應的繞過和破解方案。
從開發環境設定到原理,再到實際的反爬蟲案例剖析,內容循序漸進。建議讀者按照章節順序閱讀,並在閱讀過程中親自動手練習。
內容如下:
►第1 章 介紹本書所相關的大部分開發環境設定,需要時查閱即可。
►第2 章 介紹Web 網站的組成和頁面繪製。了解伺服器端、用戶端的組成,工作形式和通訊協定。
►第3 章 簡單說明動態網頁和靜態網頁對爬蟲造成的影響,並對反爬蟲概念進行介紹和約定。
►第4 章 以資訊驗證型反爬蟲為主線,說明基於HTTP 協定和WebSocket 協定對用戶端請求進行驗證的反爬蟲原理和具體實作方法,並以爬蟲工程師的角度示範繞過過程。
►第5 章 介紹常見的動態繪製反爬蟲,透過場景假設的方式來說明不同需求的應對方法。
►第6 章 介紹目前被廣泛使用的文字混淆反爬蟲知識,包含圖片偽裝、CSS 偏移、SVG 對映和字型反爬蟲等。以爬蟲工程師的角度示範繞過過程,再剖析其原理。最後討論文字混淆反爬蟲的通用解決方法。
►第7 章 介紹特徵識別反爬蟲,包含繞過過程和實現原理。特徵識別反爬蟲具有一定的隱蔽性。它在爬蟲程式發起時識別和過濾,能有效地減輕伺服器的壓力。
►第8 章 介紹App資料爬取的關鍵和常用的反爬蟲方法,包含程式混淆、參數加密和安全強化等,同時還介紹封包截取和App逆向方面的知識。
►第9 章 驗證碼相關的內容,包含市面上常見的驗證碼類型,每個驗證碼案例均以爬蟲工程師的角度示範繞過過程,再以開發者的角度示範驗證碼的實現過程。部分驗證碼的繞過用到了深度學習中的卷積神經網路和用於目標檢測的YOLO 演算法,並對商用驗證碼廠商的產品進行基本介紹和難度分析。
►第10 章 綜合知識的介紹。如常見的編碼和加密原理,並以對應的RFC 文件為基礎,說明編碼、解碼、加密和解密的過程。然後介紹常見的JavaScript 程式混淆知識,並動手實現一個簡單的混淆器。接著學習前端禁止事件方面的知識,如禁止滑鼠右鍵、禁止鍵盤按鍵等。最後透過幾個案例了解與爬蟲相關的法律知識和風險點。
適合讀者群 : 爬蟲工程師、反爬蟲工程師、開發者,或對爬蟲、反爬蟲感興趣的讀者。
作者簡介
韋世東
資深爬蟲工程師,也是Python 開發者和Rust 開發者。
2019年華為雲·雲享專家,掘金社區優秀作者,GitChat認證作者,夜幕團隊(NightTeam)成員。
擁有七年互聯網從業經驗,擅長反爬蟲的設計和繞過技巧。
目錄
前言
01 開發環境設定
1.1 作業系統的選擇
1.2 練習平台Steamboat
1.3 協力廠商函數庫的安裝
1.4 常用軟體的安裝
1.5 深度學習環境設定
1.6 Node.js 環境設定
02 Web 網站的組成和頁面繪製
2.1 nginx 伺服器
2.2 瀏覽器
2.3 網路通訊協定
03 爬蟲與反爬蟲
3.1 動態網頁與網頁原始程式碼
3.2 爬蟲知識回顧
3.3 反爬蟲的概念與定義
04 資訊驗證型反爬蟲
4.1 User-Agent 反爬蟲
4.2 Cookie 反爬蟲
4.3 簽名驗證反爬蟲
4.4 WebSocket 驗證驗證反爬蟲
4.5 WebSocket 訊息驗證反爬蟲
4.6 WebSocket Ping 反爬蟲
05 動態繪製反爬蟲
5.1 常見的動態繪製反爬蟲案例
5.2 動態繪製的通用解決辦法
06 文字混淆反爬蟲
6.1 圖片偽裝反爬蟲
6.2 CSS 偏移反爬蟲
6.3 SVG 對映反爬蟲
6.4 字型反爬蟲
6.5 文字混淆反爬蟲通用解決辦法
07 特徵識別反爬蟲
7.1 WebDriver 識別
7.2 瀏覽器特徵
7.3 爬蟲特徵
7.4 隱藏連結反爬蟲
08 App 反爬蟲
8.1 App 封包截取
8.2 APK 檔案反編譯
8.3 程式混淆反爬蟲
8.4 App 應用強化知識擴充
8.5 了解應用程式自動化測試工具
09 驗證碼
9.1 字元驗證碼
9.2 計算型驗證碼
9.3 滑動驗證碼
9.4 滑動拼圖驗證碼
9.5 文字點選驗證碼
9.6 滑鼠軌跡的檢測和原理
9.7 驗證碼產品賞析
10 綜合知識
10.1 編碼與加密
10.2 JavaScript 程式混淆
10.3 前端禁止事件
10.4 法律法規
序
前言
爬蟲是當今網際網路使用非常廣泛的技術之一,現已應用於金融、房產、貿易與科技等諸多領域。無論是大數據計算、資料分析還是機器學習,都離不開爬蟲。爬蟲工作在很多時候是企業業務開展的基礎與主線,將爬取內容進行清洗和處理,獲得的就是極具價值的資料。
爬蟲技術的門檻低,易於學習,因此成為初學者用來上手的學習目標。大數據和深度學習都需要大量的資料來支撐,而爬蟲是目前較好的資料來源方法。隨著這幾年大數據和深度學習的火熱,爬蟲技術的發展進入了高峰期,因此給伺服器帶來的壓力也成倍增長。
企業為了確保伺服器的正常運轉,或為了降低伺服器的運轉壓力與成本,不得不使出各種各樣的技術方法來阻止爬蟲工程師們毫無節制地向伺服器索取資源,我們將這種行為稱為反爬蟲。反爬蟲技術是網際網路技術中為了限制爬蟲而產生的技術總稱。無論是在技術學習還是實際工作中,反爬蟲技術都是所有爬蟲工程師要面對的問題。常見的反爬蟲原理和繞過技巧也是中、高階爬蟲工程師,尤其是在大型網際網路企業的中、高階爬蟲工程師面試中關注的焦點。同樣,作為一名開發者,了解反爬蟲原理和繞過技巧有助設計出更合理的反爬蟲策略,會使你從同行中脫穎而出,大放異彩。
在平時的交流中, 我發現很多朋友對於驗證碼識別、JavaScript 混淆、WebSocket 和字型反爬蟲有一種莫名的恐懼感,覺得這些是很難解決的問題。實際上,只要我們了解其工作原理,就能夠找到突破口。爬蟲與反爬蟲都是綜合知識的應用,單純了解某個反爬蟲的實現方法或繞過技巧是不夠的,我們應該深入了解其實現原理,這樣才能夠在爬蟲工程師的職業道路上走得更遠。
我希望透過整理並歸納以往工作中經驗,結合練習平台Steamboat,幫助更多的爬蟲工程師和開發者了解並掌握反爬蟲技術與反爬蟲繞過的技能。
本書案例均來自實際的專案,大部分知名網際網路企業在用的反爬蟲方法。由於爬蟲技術的更新速度非常快,為了確保大家的學習品質,本書為讀者準備了一個練習平台。書中介紹到的所有反爬蟲範例均收錄在練習平台中。讀者只需要跟著書本指引操作,就可以在個人電腦或雲端服務器上架設練習平台,這部分內容會在第1 章中介紹。
反爬蟲和繞過技巧相關的基礎知識非常多,且跨度較大,本書主要說明其中的原理和實作應用,讓大家在學習之後可以快速將所學知識應用到實際工作當中。除此之外,還會說明一些網路傳輸相關的知識以及一些工具的用法等。
以劍養劍,攻守兼備才能夠在技術的江湖路上任逍遙。
✤ 閱讀建議
這是一本圍繞著反爬蟲原理的書,書中提到了瀏覽器的基本結構、網頁繪製原理、加密和混淆標準,還有很多RFC 文件(Request For Comments,一系列以編號排定的網際網路協定和標準檔案)。RFC 文件分為提議性的、部分在用的和正式標準。無論是開發者還是爬蟲工程師,熟讀常見的RFC 文件對工作會有很大的幫助。
動手實作很重要,這不僅能讓你掌握書本知識,而且還有可能在練習中有新的發現。為此,本書為讀者準備了一個練習平台,其中包含21 個範例。練習平台上的範例均為本書作者撰寫,且與本書範例一一對應。因此,範例內容不會改動,並且無須擔心相關的法律問題,這確保讀者的學習能順利進行。
本書共10 章,從開發環境設定到原理,再到實際的反爬蟲案例剖析,內容循序漸進。建議讀者按照章節順序閱讀,並在閱讀過程中親自動手練習,加強所學知識。
✤ 本書內容
本書共10 章,章節內容歸納如下。
■ 第 1 章介紹本書所相關的大部分開發環境設定。本章無須完整閱讀,在需要時查閱即可。
■ 第 2 章介紹 Web 網站的組成和頁面繪製方面的知識。了解伺服器端、用戶端的組成,工作形式和通訊協定,這會為我們後面的學習打下堅實的基礎。
■ 第 3 章簡單說明動態網頁和靜態網頁對爬蟲造成的影響。回顧一些爬蟲方面的基本概念和知識,並對反爬蟲這一概念進行介紹和約定。
■ 第 4 章以資訊驗證型反爬蟲為主線,說明基於 HTTP 協定和 WebSocket 協定對用戶端請求進行驗證的反爬蟲原理和具體實作方法,並以爬蟲工程師的角度示範繞過過程。
■ 第 5 章介紹常見的動態繪製反爬蟲,深入了解其原理,並介紹幾種應對方法和多種繪製工具的基本用法。這一章透過場景假設的方式來說明不同需求的應對方法。
■ 第 6 章介紹目前被廣泛使用的文字混淆反爬蟲知識,包含圖片偽裝、CSS偏移、SVG 對映和字型反爬蟲等。每個案例均以爬蟲工程師的角度示範繞過過程,再剖析其原理。最後討論文字混淆反爬蟲的通用解決方法。
■ 第 7 章介紹特徵識別反爬蟲,包含繞過過程和實現原理。相對其他反爬蟲方法來說,特徵識別反爬蟲具有一定的隱蔽性。它在爬蟲程式發起時識別和過濾,這能夠有效地減輕伺服器的壓力。
■ 第 8 章介紹 App 資料爬取的關鍵和常用的反爬蟲方法,包含程式混淆、參數加密和安全強化等,同時還介紹封包截取和App 逆向方面的知識。
■ 第9 章是驗證碼相關的內容,包含市面上常見的驗證碼類型,例如字元驗證碼、計算型驗證碼和行為驗證碼。每個驗證碼案例均以爬蟲工程師的角度示範繞過過程,再以開發者的角度示範驗證碼的實現過程。部分驗證碼的繞過用到了深度學習中的卷積神經網路和用於目標檢測的YOLO 演算法。在最後一節中,我們對商用驗證碼廠商的產品進行基本介紹和難度分析。
■ 第 10 章是綜合知識的介紹。首先介紹常見的編碼和加密原理,並以對應的RFC 文件為基礎,說明編碼、解碼、加密和解密的過程。然後介紹常見的JavaScript 程式混淆知識,說明混淆原理和還原技巧,並動手實現一個簡單的混淆器。接著學習前端禁止事件方面的知識,如禁止滑鼠右鍵、禁止鍵盤按鍵等。最後透過幾個案例了解與爬蟲相關的法律知識和風險點。
✤ 相關資源
書中的部分程式儲存在GitHub( 詳見https://github.com/asyncins/antispider),程式與章節內容的對應關係可查閱倉庫中README.md 檔案。
我是一個爬蟲工程師,同時也是Python 開發者和Rust 開發者。我會在微信公眾號和技術部落格中更新相關的技術文章,歡迎讀者多多交流。期待和你共同進步,一起變強!