TOP
紅利積點抵現金,消費購書更貼心
Python爬蟲與反爬蟲開發從入門到精通(簡體書)
滿額折

Python爬蟲與反爬蟲開發從入門到精通(簡體書)

商品資訊

人民幣定價:99 元
定價
:NT$ 594 元
優惠價
87517
海外經銷商無庫存,到貨日平均30天至45天
下單可得紅利積點:15 點
商品簡介
作者簡介
名人/編輯推薦
目次
書摘/試閱

商品簡介

本書從零開始系統地介紹了Python網絡爬蟲與反爬蟲的開發與實戰技能,全書共分為4篇,具體內容安排如下。
第1篇:基礎篇(第1~3章)。系統地講解了Python爬蟲與反爬蟲開發環境的搭建、爬蟲與反爬蟲通用基礎知識、Python程序設計基礎。
第2篇:爬蟲篇(第4~8章)。這部分講解了網絡爬蟲的相關知識與技能,主要包括網絡爬蟲快速入門、XPath匹配網頁數據、re正則匹配資料、WebSocket資料抓取、Scrapy爬蟲框架應用與開發等。
第3篇:反爬蟲篇(第9~16章)。這部分講解了網絡反爬蟲的相關知識與技能,主要包括爬蟲與反爬蟲的區別與認識、反爬—Header信息校驗、反爬—IP限制、反爬—動態渲染頁面、反爬—文本混淆、反爬—特徵識別、反爬—驗證碼識別、反爬—APP資料抓取等。
第4篇:項目實戰篇(第17章)。本篇主要列舉了4個案例,綜合講解Python爬蟲與反爬蟲項目的實戰應用。
本書從零基礎開始講解,系統全面,案例豐富,注重實戰,既適合Python程序員和爬蟲愛好者閱讀學習,也可以作為廣大職業院校相關專業的教材或參考用書。礎操作、圖形處理基本操作、簡單圖形的繪製和物件的管理等內容。

作者簡介

劉延林,雲鏡團隊創始人,擁有多年網絡爬蟲開發經驗,著有《Python網絡爬蟲開發從入門到精通》,擅長Python網絡爬蟲、Web、資料採擷與分析、網絡安全、產品研發等領域。

名人/編輯推薦

學爬蟲:知原理,抓資料,做分析,用自動化解放雙手
會反爬:懂框架,會部署,見招拆招,攻防兼備
在攻與防的對立統一中尋求爬蟲技術突破

Python 爬蟲與反爬蟲
見招拆招,攻防兼備

關於本書
在大資料(簡稱DT)時代,尤其是人工智能浪潮的興起,爬蟲技術成了當下不可或缺的技術,被廣泛應用於金融、房地產、科技、貿易、製造、互聯網等相關行業領域中,對企業的生產、經營、管理及決策產生了很大的正向作用。在大資料架構中,資料的收集存儲與統計分析佔據了極為重要的地位,而資料的收集很大程度上依賴於爬蟲的爬取,所以網絡爬蟲也逐漸變得越來越火爆。最近兩年,在各種社交媒體上經常出現一些培訓機構宣傳推廣相關培訓課程的廣告,證明了Python在爬蟲領域的火爆程度。
從就業的角度來說,企業日益增長的資料需求創造了非常多的爬蟲崗位,而爬蟲工程師目前屬於緊缺人才,並且薪資待遇普遍較高。因此,想成為優秀的網絡爬蟲工程師,深層次地掌握這門技術,對於就業來說是非常有利的。
在眾多的網絡爬蟲工具中,Python 以其使用簡單、功能強大等優點成為網絡爬蟲開發最常用的工具。與其他語言相比,Python 是一門非常適合網絡爬蟲開發的程序設計語言,其擁有大量的框架和庫,可以輕鬆實現網絡爬蟲功能。Python 爬蟲可以做的事情很多,如廣告過濾、Ajax 資料爬取、動態渲染頁面爬取、APP資料抓取、使用代理爬取、類比登錄爬取、資料存取等,Python 爬蟲還可以用於資料分析,在資料的抓取方面可以說作用巨大!
這是市面上一本非常專業的全面講解Python爬蟲與反爬蟲技術的圖書,讓你深入理解網絡爬蟲與反爬蟲原理、技術與開發經驗,在應用中“見招拆招,攻防兼備”,可以說是爬蟲工程師從業必讀寶典!
本書特點
本書力求簡單、實用,堅持以實例為主,理論為輔的路線。全書共分17章,從環境搭建、 Python 基礎、爬蟲開發常用網絡請求庫,到爬蟲框架的使用和各種常見反爬蟲技術應對及其原理闡述,基本涵蓋了爬蟲項目開發階段的整個生命週期。本書內容有以下幾個特點。
(1)避免高深的理論,每一章均以實例為主,讀者參考源碼修改實例,就能得到自己想要的結果。目的是讓讀者看得懂、學得會、做得出。
(2)常見實訓與問答幾乎每章都有配備,以讓讀者儘快鞏固所學知識,從而能夠舉一反三。
(3)內容系統全面,實戰應用性強。適合零基礎讀者和有一定基礎的初級爬蟲工程師學習,然後逐步掌握相關知識技能,從而達到從入門到精通的學習效果。
(4)安排了豐富的實戰案例,以增強讀者的實際動手能力,從而達到學以致用的目的。


寫給讀者的建議
如果您是零基礎,建議先從第1章的環境搭建和第3章的Python 基礎開始學習。因為學習爬蟲需要對
Python的基礎語法和結構有深刻的理解和熟練應用,這樣才能在後面的內容學習中達到事半功倍的效果。讀者需要注意的是,本書在初稿之前所使用的 Python 版本為 3.8.x。
寫爬蟲的難點不是拿下資料,而是在於在實際工作中整合各種需求業務場景,實現爬蟲合理的任務調度、性能優化等。所以在閱讀本書時,建議讀者著重於爬取思路和邏輯方面的思考,不要太過於糾結書中給出的示例代碼。針對同一個網站或APP,可以嘗試採用不同的策略和解決辦法去爬取,觀察每一種方法的優缺點並進行總結和積累。
當今的反爬蟲技術每天都在更新反覆運算,將來的爬蟲技術也會越來越難。但是萬變不離其宗,寫爬蟲是個研究性的工作,需要每天不斷地學習和研究各種案例,希望讀者多思考,勤動手。對於書中給出的一些案例代碼,讀者在閱讀本書時可能會發現所涉及的目標網站因更新升級導致案例源碼失效的問題,此時不必驚慌,可通過本書所提供的管道聯繫作者獲取最新的案例源碼或者與之相關的學習資料。
購買本書,您還能得到什麼
(1)案例源碼。提供與書中相關案例的原始程式碼,方便讀者學習參考。
(2)常用工具資源。提供書中講解時所用到的相關工具資源,幫助讀者有效學習。
(3)Python常見面試題精選(50道),旨在幫助讀者在工作面試時提升過關率。習題見附錄,具體答案可參見本書所提供的資源下載。
(4)職場高效人士學習資源大禮包,包括《微信高手技巧隨身查》《QQ 高手技巧隨身查》《手機辦公
10招就夠》三本電子書,以及《5 分鐘教你學會番茄工作法》《10 招精通超級時間整理術》兩部視頻教程, 讓您輕鬆應對職場那些事。
溫馨提示:以上資源已上傳至百度網盤,供讀者下載。請用微信掃一掃下方二維碼關注公眾號,根據提示獲取資源檔的下載位址及提取密碼。


說明:網絡爬蟲具有技術中立性,但易引起侵犯個人信息、商業秘密等信息安全問題。使用者可以根據自已的需求從互聯網上爬取合法資料,加以分析整理,應用到自己需要的方面。
本書由鳳凰高新教育策劃,劉延林老師編寫。在本書的編寫過程中,我們竭盡所能地為您呈現最好、最全的實用內容,但仍難免有疏漏和不妥之處,敬請廣大讀者不吝指正。

目次

目錄
Contents

第1篇 基礎篇
第1章 爬蟲與反爬蟲開發環境搭建 /2
1.1 Python 3環境搭建 /3
1.1.1 下載Python 3安裝包 /3
1.1.2 安裝Python /4
1.1.3 pip包管理工具 /6
1.2 PyCharm的安裝與基本使用 /7
1.2.1 安裝PyCharm /7
1.2.2 創建Python項目 /8
1.2.3 debug調試代碼 /12
1.2.4 創建venv虛擬環境 /14
1.3 Tesseract-OCR /16
1.3.1 下載 /16
1.3.2 安裝 /17
1.3.3 配置環境變數 /18
1.4 mitmproxy /18
1.4.1 下載 /19
1.4.2 安裝 /20
1.4.3 安裝SSL證書 /21
1.5 JDK 1.8 /22
1.5.1 下載JDK /22
1.5.2 安裝 /22
1.5.3 測試是否安裝成功 /23
本章小結 /24

第2章 爬蟲與反爬蟲通用基礎知識 /25
2.1 網頁基礎 /26
2.1.1 網頁的組成 /26
2.1.2 網頁的類型 /28
2.2 網絡傳輸協定 /28
2.2.1 認識HTTP /29
2.2.2 HTTPS /29
2.2.3 HTTP與HTTPS請求過程示例 /29
2.3 Session和Cookies /31
2.3.1 Cookie /31
2.3.2 Session /33
2.3.3 Session和Cookie的區別 /33
2.3.4 常見誤區 /33
2.4 Nginx服務器 /34
2.4.1 Nginx信號 /34
2.4.2 反向代理 /35
2.4.3 Nginx中實現反向代理 /35
2.5 代理IP /36
2.5.1 原理 /36
2.5.2 分類 /37
2.5.3 獲取途徑 /37
2.6 HTTP接口概念 /40
2.7 新手問答 /40
本章小結 /41

第3章 Python程序設計基礎 /42
3.1 Python的基礎語法 /43
3.1.1 第一個Python程式 /43
3.1.2 運行程式 /43
3.1.3 注釋 /46
3.1.4 行與縮進 /46
3.1.5 多行語句 /47
3.1.6 import 與 from...import導入模組 /48
3.1.7 變數 /48
3.2 基底資料型別 /49
3.2.1 Number /49
3.2.2 String /50
3.2.3 List /50
3.2.4 Tuple /52
3.2.5 Dictionary /52
3.2.6 Set /53
3.2.7 布林類型 /54
3.3 流程控制 /55
3.3.1 條件控制 /55
3.3.2 迴圈 /56
3.3.3 range()函數 /58
3.3.4 break和continue語句 /58
3.3.5 pass /59
3.4 函數 /60
3.4.1 定義一個函數 /60
3.4.2 調用函數 /60
3.5 檔操作 /61
3.5.1 txt檔讀寫 /61
3.5.2 csv文件讀寫 /62
3.6 物件導向 /64
3.6.1 類 /64
3.6.2 類物件 /65
3.6.3 類方法 /66
3.6.4 繼承 /67
3.7 多執行緒 /68
3.7.1 threading /68
3.7.2 多執行緒裝飾器封裝 /69
3.8 新手實訓 /70
3.9 新手問答 /71
本章小結 /72

第2篇 爬蟲篇
第4章 網絡爬蟲快速入門 /74
4.1 爬蟲的基本結構及工作流程 /75
4.2 urllib網絡請求庫 /75
4.2.1 請求一個簡單的網頁 /75
4.2.2 設置請求超時 /78
4.2.3 使用data參數提交資料 /78
4.2.4 Request /79
4.3 requests網絡請求庫 /82
4.3.1 requests模組的安裝 /82
4.3.2 請求第一個網頁 /82
4.3.3 get和post請求 /84
4.3.4 參數提交 /86
4.4 urllib3網絡請求庫 /86
4.4.1 發起請求 /87
4.4.2 響應內容 /88
4.4.3 查詢參數 /88
4.4.4 表單數據 /89
4.4.5 提交JSON資料 /89
4.5 Postman接口測試工具 /90
4.5.1 請求接口 /90
4.5.2 常用功能介紹 /93
4.6 新手實訓 /95
4.7 新手問答 /95
本章小結 /96

第5章 XPath匹配網頁數據 /97
5.1 安裝XPath /98
5.2 XPath的基礎語法 /98
5.3 在Python中使用XPath匹配資料 /99
5.3.1 根據class屬性進行匹配 /100
5.3.2 根據id屬性進行匹配 /101
5.3.3 根據name屬性進行匹配 /102
5.4 XPath運算式技巧 /103
5.5 擴展補充知識點 /105
5.5.1 Selector /105
5.5.2 Beautiful Soup /106
5.6 新手實訓 /107
5.7 新手問答 /109
本章小結 /109

第6章 re正則匹配資料 /110
6.1 re.compile函數 /111
6.2 re.match函數 /111
6.3 re.search函數 /113
6.4 re.match與re.search的區別 /114
6.5 檢索和替換 /114
6.6 findall函數 /115
6.7 常見規則運算式寫法 /116
6.8 新手實訓 /117
6.9 新手問答 /119
本章小結 /120

第7章 WebSocket資料抓取 /121
7.1 WebSocket通信原理 /122
7.2 使用aioWebSocket獲取資料 /122
7.2.1 安裝AioWebSocket /123
7.2.2 分析WebSocket請求 /123
7.2.3 編寫代碼獲取資料 /126
7.3 新手實訓 /129
7.4 新手問答 /131
本章小結 /131

第8章 Scrapy爬蟲框架應用與開發 /132
8.1 Scrapy框架的基本架構 /133
8.1.1 Scrapy的基本元件 /133
8.1.2 工作原理 /133
8.2 安裝Scrapy /134
8.3 創建項目 /135
8.4 定義Item /135
8.5 編寫第一個Spider /136
8.6 運行爬蟲 /137
8.7 提取Item /137
8.8 在Shell中嘗試Selector選擇器 /138
8.9 提取資料 /139
8.10 使用Item /140
8.11 Item Pipeline /141
8.12 將Item寫入JSON文件 /142
8.13 新手實訓 /143
8.14 新手問答 /146
本章小結 /146

第3篇 反爬蟲篇
第9章 爬蟲與反爬蟲 /148
9.1 爬蟲知識的回顧與總結 /149
9.1.1 爬蟲的爬取過程 /149
9.1.2 案例演示 /149
9.2 反爬蟲的概念與定義 /154
本章小結 /155

第10章 反爬—Header信息校驗 /156
10.1 User-Agent /157
10.1.1 如何應對User-Agent反爬 /157
10.1.2 User-Agent反爬原理 /161
10.2 Cookie校驗 /162
10.2.1 如何應對Cookie反爬 /162
10.2.2 Cookie反爬原理 /163
10.3 Referer校驗 /165
10.3.1 Referer的反爬原理 /165
10.3.2 應對方法 /165
10.4 簽名校驗 /166
10.4.1 簽名反爬原理 /166
10.4.2 應對方法 /166
10.5 新手實訓 /170
10.6 新手問答 /176
本章小結 /176

第11章 反爬—IP限制 /177
11.1 代理設置 /178
11.1.1 urllib代理設置 /178
11.1.2 requests代理設置 /179


11.2 代理池構建 /17911.2.1 獲取IP /180
11.2.2 驗證代理是否可用 /181
11.2.3 使用代理池 /182
11.3 搭建自己的代理服務器 /183
11.3.1 什麼是ADSL /183
11.3.2 購買代理雲主機 /183
11.3.3 測試撥號 /185
11.3.4 設置代理服務器 /188
11.3.5 動態獲取IP /190
11.3.6 使用Python實現撥號 /192
11.4 使用Nginx實現封禁IP /194
11.5 新手問答 /195
本章小結 /196

第12章 反爬—動態渲染頁面 /197
12.1 動態渲染案例介紹 /198
12.1.1 按一下事件 /198
12.1.2 非同步載入資料 /199
12.1.3 焦點事件 /200
12.2 常見應對動態渲染頁面的解決辦法 /201
12.3 使用Selenium爬取動態渲染頁面 /201
12.3.1 安裝Selenium庫 /202
12.3.2 Selenium定位方法 /203
12.3.3 控制流覽器操作 /204
12.3.4 WebDriver常用方法 /206
12.3.5 其他常用方法 /207
12.3.6 滑鼠鍵盤事件 /208
12.3.7 獲取斷言 /211
12.3.8 設置元素等待 /212
12.3.9 多表單切換 /214
12.3.10 下拉清單選擇 /215
12.3.11 調用JavaScript代碼 /216
12.3.12 窗口截圖 /217
12.3.13 無頭模式 /217
12.4 獲取流覽器Network請求和響應 /218
12.4.1 Browsermob-Proxy /219
12.4.2 獲取接口返回資料 /220
12.4.3 二級代理 /222
12.5 新手實訓 /222
12.6 新手問答 /224
本章小結 /225

第13章 反爬—文本混淆 /226
13.1 圖片偽裝反爬 /227
13.1.1 飛常準航班動態信息 /227
13.1.2 分析網站 /228
13.1.3 應對方案 /230
13.1.4 代碼實現 /230
13.2 CSS偏移反爬 /231
13.2.1 去哪兒網 /231
13.2.2 分析網站 /232
13.2.3 代碼實現 /235
13.3 編碼映射反爬 /238
13.3.1 大眾點評網 /238
13.3.2 分析網站 /239
13.3.3 代碼實現 /240
13.4 字體反爬 /242
13.4.1 美團手機版網頁 /242
13.4.2 分析網站 /243
13.4.3 代碼實現 /247
13.5 新手實訓 /248
13.6 新手問答 /252
本章小結 /252

第14章 反爬—特徵識別 /253
14.1 流覽器指紋 /254
14.1.1 流覽器指紋實現技術有哪些 /254
14.1.2 防止流覽器指紋檢測方法 /254
14.1.3 防用戶端追蹤措施 /255
14.2 WebDriver驅動識別 /255
14.2.1 WebDriver識別示例 /255
14.2.2 WebDriver識別原理 /257
14.2.3 如何繞過被識別 /259
14.3 使用mitmproxy /262
14.3.1 認識mitmproxy /262
14.3.2 工作原理 /263
14.3.3 使用mitmproxy繞過驅動檢測 /263
14.4 網頁精靈 /269
14.4.1 安裝網頁精靈 /270
14.4.2 網頁精靈的簡單使用 /271
14.5 新手實訓 /275
14.6 新手問答 /277
本章小結 /277

第15章 反爬—驗證碼識別 /278
15.1 普通圖形驗證碼 /279
15.1.1 識別圖形驗證碼的解決方案 /279
15.1.2 OCR識別圖形驗證碼 /279
15.1.3 採用協力廠商打碼平臺識別 /280
15.2 滑動驗證碼 /281
15.2.1 分析思路 /282
15.2.2 使用Selenium實現模擬淘寶登錄的拖動驗證 /282
15.3 滑動拼圖驗證碼 /285
15.3.1 分析思路 /285
15.3.2 使用代碼實現滑動 /285
15.3.3 運行測試 /291
15.4 新手實訓 /292
15.5 新手問答 /294
本章小結 /295

第16章 反爬—APP數據抓取 /296
16.1 APP的抓包分析 /297
16.1.1 Fiddler抓包工具 /297
16.1.2 Fiddler設置 /297
16.1.3 使用Fiddler抓包獵聘APP測試 /299
16.1.4 Charles抓包工具 /300
16.1.5 Charles設置 /301
16.1.6 Charles抓包 /304
16.1.7 Charles分析 /307
16.1.8 Charles重發 /309
16.2 Appium自動化 /310
16.2.1 安裝Appium /311
16.2.2 Android開發環境配置 /312
16.2.3 啟動APP /313
16.2.4 appPackage和appActivity參數獲取方法 /322
16.3 APK安裝包反編譯 /324
16.3.1 準備工作 /324
16.3.2 反編譯得到源碼 /324
16.4 APK反編譯知識補充 /327
16.5 新手實訓 /327
16.6 新手問答 /332
本章小結 /332

第4篇 實戰篇
第17章 項目實戰 /334
17.1 土地市場網——地塊公示 /335
17.1.1 分析網站 /336
17.1.2 代碼實現 /342
17.1.3 實例總結 /348
17.2 紐約工商資料獲取 /348
17.2.1 分析網站 /348
17.2.2 編寫代碼爬取 /351
17.2.3 實例總結 /356
17.3 攜程旅行火車票票價資料獲取 /356
17.3.1 分析網站 /358
17.3.2 編寫代碼爬取 /360
17.3.3 實例總結 /361
17.4 智聯招聘資料獲取 /361
17.4.1 分析網站 /362
17.4.2 編寫代碼爬取 /365
17.4.3 實例總結 /367

附錄A 爬蟲法律法規 /368
附錄B 實驗環境的搭建方法及說明 /371
附錄C Python常見面試題精選 /375

書摘/試閱

2.3 Session和Cookies
在流覽網站的過程中,我們經常會遇到需要登錄的情況,有些頁面需要登錄之後才能訪問,而
且登錄之後可以連續很多次訪問該網站,但是有的時候過一段時間就需要重新登錄。還有一些網站
在打開流覽器的時候就自動登錄了,而且很長時間都不會失效,這種情況是什麼原因呢?因為這裡
面涉及會話(Session)和Cookies 的相關知識,下面就來揭開它們的神秘面紗。
2.3.1 Cookie
Cookie 實際上是一小段的文本信息,通過鍵值對格式(key-value)來表示。其原理是用戶端向
服務器發起請求,如果服務器需要記錄該使用者狀態,就在響應用戶端的時候向用戶端流覽器發送一
個Cookie,用戶端流覽器會把Cookie 保存起來。當流覽器再請求該網站時,流覽器把請求的網址
32
Python 爬蟲與反爬蟲開發從入門到精通
連同該Cookie 一同提交給服務器。服務器檢查該Cookie,以此來辨認使用者狀態。
所以這就是為什麼我們在訪問某些網站的時候,輸入用戶名、密碼進行了登錄,幾天後再次打
開計算機訪問該網站時就會自動登錄。這是因為流覽器保存了我們的Cookie 到一個檔中。當我們
重新訪問頁面,它會自動讀取上次保存的Cookie 檔中的內容並且傳給了服務端。如果手動清除
了流覽器歷史訪問記錄,也會清除相關的Cookie 檔,當再次訪問頁面的時候,就需要重新登錄了。
Cookie 在使用的時候,是攜帶在用戶端流覽器向服務端發起請求的Header 裡面,格式如下:
Key=value Cookie
裡面會包含多個參數,參數之間使用分號間隔,如圖2-5 所示。
圖2-5 飛常準Cookie
圖2-5 展示的是“飛常準”手機版的一個頁面,請求裡面攜帶了Cookie 信息,至於如何查看
Cookie,將會在後面的章節中講到,這裡讀者只需要理解Cookie 的基本概念即可。Cookie 中有幾
個比較重要的屬性,如表2-1 所示。
表2-1 Cookie 的基本屬性
屬性屬性介紹
Name=value 鍵值對,可以設置要保存的 Key/Value,注意這裡的 NAME 不能和其他屬性項的名字一樣
Expires 過期時間,在設置的某個時間點後該 Cookie 就會失效
Domain 生成該 Cookie 的功能變數名稱,如 domain="www.lyl.com"
Path 指該Cookie 是在當前的哪個路徑下生成的,如 path=/wp-admin/
Secure 如果設置了這個屬性,那麼只會在 SSH 連接時才會回傳該 Cookie
第2 章 爬蟲與反爬蟲通用基礎知識
33
2.3.2 Session
Session 代表服務器與流覽器的一次會話過程,這個過程是連續的,也可以時斷時續。Session
是一種服務器端的機制,Session 物件用來存儲特定使用者會話所需的信息。Session 由服務端生成,
保存在服務器的內存、緩存、硬碟或資料庫中。
它的主要工作原理是:當用戶訪問到一個服務器,如果服務器啟用Session,服務器就要為該
用戶創建一個Session,在創建這個Session 的時候,服務器首先檢查這個用戶發來的請求裡是否包
含了一個Session ID,如果包含了一個Session ID,則說明之前該用戶已經登錄過並為此用戶創建
過Session,那服務器就按照這個Session ID 在服務器的內存中查找(如果查找不到,就有可能為
它新創建一個),如果用戶端請求裡不包含Session ID,則為該用戶端創建一個Session 並生成一
個與此Session 相關的Session ID。這個Session ID 是唯一的、不重複的、不容易找到規律的字串,
它將在本次響應中被返回到用戶端保存,而保存這個Session ID 的正是Cookie,這樣在交互過程中
流覽器可以自動按照規則把這個標識發送給服務器。
2.3.3 Session和Cookie的區別
瞭解了Session 和Cookie 的基本原理,接下來再來淺談一下它們之間的區別。Session 是存儲
在服務器端的,Cookie 是存儲在用戶端的,所以Session 的安全性要高於Cookie。再者,我們獲取
的Session 裡的信息是通過存放在會話Cookie 裡的Session ID 獲取的,因為Session 是存放在服務
器裡的,所以Session 裡的東西不斷增加會加重服務器的負擔。因此,我們可以把一些重要的東西
放在Session 裡,不太重要的放在用戶端Cookie 裡。Cookie 分為兩大類,分別是會話Cookie 和持
久化Cookie,它們的生命週期和流覽器是一致的,流覽器關了,會話Cookie 也就消失了,而持久
化Cookie 會存儲在用戶端硬碟中。當流覽器關閉的時候會話Cookie 也會消失,所以我們的Session
也就消失了。Session 在什麼情況下會丟失呢?就是在服務器關閉的時候,或者是Session 過期(默
認30 分鐘)了。
2.3.4 常見誤區
在談論會話機制的時候,常常會有這樣的誤解:“只要關閉流覽器,會話就消失了。”可以想
象一下銀行卡的例子,除非客戶主動銷卡,否則銀行絕對不會輕易銷卡,刪除客戶的資料信息。對
於會話機制來說也是一樣,除非程式通知服務器刪除一個會話,否則服務器會一直保留。
當我們關閉流覽器時,流覽器不會在關閉之前主動通知服務器它將會關閉,所以服務器根本就
不知道流覽器即將關閉。之所以會有“只要關閉流覽器,會話就消失了”這種錯覺,是因為大部分
會話機制都會使用會話Cookie 來保存會話ID 信息,而關閉流覽器之後Cookies 就消失了,再次連
接服務器時,也就無法找到原來的會話了。如果服務器設置的Cookies 保存到硬碟上,或者使用某
種手段改寫流覽器發出的HTTP 請求頭,把原來的Cookies 發送給服務器,再次打開流覽器,仍然
能夠找到原來的會話ID,依舊還是可以保持登錄狀態的。
34
Python 爬蟲與反爬蟲開發從入門到精通
而且正是由於關閉流覽器不會導致會話被刪除,這就需要服務器為會話Cookie 設置一個失效
時間,當距離用戶端上一次使用會話的時間超過這個失效時間時,服務器就可以認為用戶端已經停
止了活動,才會把會話刪除,以節省存儲空間。
2.4 Nginx服務器
Nginx 是一個高性能的HTTP 和反向代理Web 服務器,我們日常所見的大多數網站或APP 後
臺服務接口都有用到Nginx。當然除了Nginx,其他還有很多常見的Web 服務器,如Apache、
Tomcat、IIS 等。有興趣的讀者可以上網瞭解一下,這裡不一一進行講解。在這裡只是簡單地介紹
一下關於Nginx 的一些常見知識點和應用場景,目的是有利於讀者對後面將要學習的章節內容有一
些瞭解。
2.4.1 Nginx信號
通過信號可以來控制Nginx 的工作狀態,也可以理解為傳達命令。它可以在終端控制Nginx 的
啟動、停止、重載等。其語法格式如下:
nginx -s 信號名稱
常用的信號名稱有以下幾種。
(1)stop:快速關閉Nginx 服務。
(2)reload:重新載入設定檔啟動Nginx。
(3)start:快速啟動Nginx。
(4)quit:正常流程關閉Nginx 服務。
如果我們需要停止Nginx 服務,可以在終端向Nginx 發送一個信號進行關閉,根據實際情況選
擇關閉名稱。
快速地關閉命令如下:
nginx -s stop
反之,如果要通過正常流程關閉,則命令如下:
nginx -s quit
當Nginx 的設定檔被更改或添加了新的配置內容時,它們不會立即生效,如果想要配置立即
生效,就需要將Nginx 關閉重啟或通過重新載入設定檔啟動的方式實現。假如我們希望Nginx 在
不影響當前任務執行的情況下重新載入配置,使用reload 信號即可,命令如下:
nginx -s reload
第2 章 爬蟲與反爬蟲通用基礎知識
35
Nginx 在收到重新載入配置的信號之後,它會首先檢查設定檔的語法是否有效,並且嘗試應
用其中的配置,如果成功,Nginx 將會啟動一個新的進程進行工作,同時會發一個信號去關閉舊的
的工作進程。如果失敗,它則會回滾任務,並繼續使用舊的設定檔執行舊的工作任務。如果讀者
想瞭解Nginx 更多的相關的知識,可以前往Nginx 官方網站查閱。
2.4.2 反向代理
反向代理出現的作用是隱藏真實服務器的IP 位址等信息。其原理是用戶端在訪問網站獲取數
據的時候,發送的請求會先經過反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料後,
再返回給用戶端。此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地
址,隱藏了真實的服務器IP 地址。
例如,這裡有兩臺服務器,假如A 服務器是代理服務器,其IP 位址為192.168.1.1,B 服務器
上部署了網站真實的後臺服務,其IP 位址為192.168.1.2。未使用反向代理之前,按照正常的邏輯,
我們要訪問網站的服務器,直接請求192.168.1.2 位址就可以了,響應給我們的請求頭信息裡面會
包含服務器B 的IP 位址。反之,如果使用反向代理,則我們請求的位址應該是服務器A,A 服務
器接到我們的請求之後,會去B 那兒獲取資料,並返回給我們,然而此時返回的響應請求頭信息
中顯示的IP 位址為A 的位址,同時也拿到了我們需要的資料。但是,我們並不能直接看到請求的
這個資料真實的來源是哪裡。
可以通俗地理解,就跟我們委託別人幫買東西一樣,我們表達了需要什麼東西並且把錢給他之
後,他就去買了,但是他將東西交給我們的時候,我們並不知道他是從哪個商鋪買的。反向代理的
原理也是如此,如圖2-6 所示。
圖2-6 反向代理原理
2.4.3 Nginx中實現反向代理
要使用Nginx 實現反向代理,只需要在反向代理服務器上的Nginx 設定檔中添加一項簡單的
配置即可,如下所示。
36
Python 爬蟲與反爬蟲開發從入門到精通
server {
listen 80;
server_name www.liuyanlin.cn;
location/{
proxy_pass http://127.0.0.1:5000;
index index.html;
}
}
通過配置重載Nginx 之後,在流覽器中訪問www.liuyanlin.cn 這個網站,將會跳轉到筆者本機
計算機運行的一個網站服務http://127.0.0.1:5000 上,至此就實現了一個簡單的反向代理過程。
2.5 代理IP
在2.4 節中,我們瞭解了Nginx 實現反向代理的原理及基本概念,接著趁熱打鐵再來瞭解一下
代理IP。代理IP 在我們後面章節所要學習的爬蟲中起著至關重要的作用。接下來將對代理的基本
原理和分類做一個簡單的講解。
2.5.1 原理
代理服務器的工作機制很像我們生活中常常提及的代理商,假設你的機器為A 機,你想獲得的
資料由B 機提供,代理服務器為C 機,那麼具體的連接過程是這樣的:首先,你的A 機需要B 機的
資料,它就要與C 機建立連接,C 機接收到A 機的資料請求之後,與B 機建立連接,根據A 機發送
的請求去B 機上下載相應的資料到本地,再將此資料發送至A 機,完成代理任務。其原理如圖2-7
所示。
圖2-7 代理原理圖
第2 章 爬蟲與反爬蟲通用基礎知識
37
那麼代理IP 就是指的代理服務器的IP 位址,通過IP 位址我們可以連接代理服務器或對其傳
輸資料等。

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 517
海外經銷商無庫存,到貨日平均30天至45天

暢銷榜

客服中心

收藏

會員專區