-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
Python爬蟲與反爬蟲開發從入門到精通 版權信息
- ISBN:9787301322697
- 條形碼:9787301322697 ; 978-7-301-32269-7
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>
Python爬蟲與反爬蟲開發從入門到精通 本書特色
學爬蟲:知原理,抓數據,做分析,用自動化解放雙手 會反爬:懂框架,會部署,見招拆招,攻防兼備 在攻與防的對立統一中尋求爬蟲技術突破
Python爬蟲與反爬蟲開發從入門到精通 內容簡介
隨著網絡技術的迅速發展,如何有效地提取并利用信息,以及如何有效地防止信息被爬取,已成為一個巨大的挑戰。本書從零開始系統地介紹了Python網絡爬蟲與反爬蟲的開發與實戰技能,全書共分為4篇,具體內容安排如下。 篇:基礎篇(~3章)。系統地講解了Python爬蟲與反爬蟲開發環境的搭建、爬蟲與反爬蟲通用基礎知識、Python編程基礎。 第2篇:爬蟲篇(第4~8章)。這部分講解了網絡爬蟲的相關知識與技能,主要包括網絡爬蟲快速入門、XPath匹配網頁數據、re正則匹配數據、WebSocket數據抓取、Scrapy爬蟲框架應用與開發等。 第3篇:反爬蟲篇(第9~16章)。這部分講解了網絡反爬蟲的相關知識與技能,主要包括爬蟲與反爬蟲的區別與認識、反爬—Header信息校驗、反爬—IP、反爬—動態渲染頁面、反爬—文本混淆、反爬—特征識別、反爬—驗證碼識別、反爬—APP數據抓取等。 第4篇:實戰篇(7章)。本篇主要列舉了4個案例,綜合講解Python爬蟲與反爬蟲項目的實戰應用。 本書從零基礎開始講解,系統全面,案例豐富,注重實戰,既適合Python程序員和爬蟲愛好者閱讀學習,也可以作為廣大職業院校相關專業的教材或參考用書。
Python爬蟲與反爬蟲開發從入門到精通 目錄
目錄
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
Python爬蟲與反爬蟲開發從入門到精通 節選
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 地址我們可以連接代理服務器或對其傳 輸數據等。
Python爬蟲與反爬蟲開發從入門到精通 作者簡介
劉延林,云鏡團隊創始人,擁有多年網絡爬蟲開發經驗,著有《Python網絡爬蟲開發從入門到精通》,擅長Python網絡爬蟲、Web、數據挖掘與分析、網絡安全、產品研發等領域。
- >
名家帶你讀魯迅:故事新編
- >
煙與鏡
- >
名家帶你讀魯迅:朝花夕拾
- >
中國人在烏蘇里邊疆區:歷史與人類學概述
- >
上帝之肋:男人的真實旅程
- >
伯納黛特,你要去哪(2021新版)
- >
唐代進士錄
- >
龍榆生:詞曲概論/大家小書