《一篇萬字博文帶你入坑爬蟲這條不歸路 【萬字圖文】》
《兩萬字博文教你python爬蟲requests庫【詳解篇】》
《萬字博文教你python爬蟲Beautiful Soup庫【詳解篇】》
《萬字博文教你python爬蟲XPath庫【詳解篇】》
《萬字博文教你爬蟲必備->Selenium【詳解篇】(初篇)》
???????👇
👉🚔直接跳到末尾🚔👈 ——>領取專屬粉絲福利💖
?????????
?

??對應一下看看你的爬蟲技術到哪個階段了!??
- ??0.前言
- 💥(1)反爬蟲的原因有三:
- 💦(2)關于反爬蟲必須了解的一些重要概念:
- 💢(3)重點——反爬蟲三大方向:
- 💀第一個方向:基于身份識別進行反爬
- ??(1)通過headers欄位設定反爬:
- 🌀(2)通過請求引數設定反爬:
- 🎃第二個方向:基于爬蟲行為的反爬
- 🎅(1)根據爬取行為進行反爬,會在爬取源頭——請求上做分析:
- 🎉(2)根據爬取行為進行反爬,會在爬取程序——步驟上做分析:
- 🔓第三個方向:基于資料加密進行反爬
- 🍖拓展一:驗證碼的處理!
- 🍮(1)處理方案:
- 🍚(2)關于圖片識別引擎(tesseract)這一處理方案的具體操作:
- 🍏第一步:下載安裝
- 🍒第二步:使用
- 🍑拓展:大廠的圖片識別引擎(拿來直接調介面,何樂而不為~)
- 🍉(3)常見驗證碼的種類:
- 🔞拓展二:關于爬蟲程序中chrome瀏覽器騷操作
- 💣In The End!
??0.前言
💥(1)反爬蟲的原因有三:
- 爬蟲占總PV較高(PV指頁面訪問的次數,每打開或重繪一次頁面,算一個PV);
- 資料被批量抓走,會使資料擁有者喪失市場競爭力;
- 法律的灰色地帶,

💦(2)關于反爬蟲必須了解的一些重要概念:
- 爬蟲:網路爬蟲也叫網路蜘蛛,它特指一類自動批量下載網路資源的程式,這是一個比較口語化的定義,更加專業和全面對的定義是:網路爬蟲是偽裝成客戶端與服務端進行資料互動的程式,關鍵在于批量!
- 反爬蟲:使用任何技術手段,阻止別人批量獲取自己網站資訊的一種方式,關鍵也在于批量,
- 誤傷:在反爬蟲程序中,錯誤的將普通用戶識別為爬蟲,誤傷率高的反爬蟲策略,效果再好也不能用,(傷敵一千,自損八百的招式可不能用!)
- 攔截:成功阻止爬蟲訪問,這里會有攔截率的概念,通常來說,攔截率高的反爬蟲策略,誤傷的可能性就越高,因此需要權衡利與弊,
- 資源:機器成本與人力成本的總和,(做啥事都要考慮成本,畢竟——成年人的世界不容易!)

💢(3)重點——反爬蟲三大方向:
本文的重點——反爬蟲,反爬蟲,它究竟有哪些方向呢?
- 基于身份識別進行反爬;
- 基于爬蟲行為進行反爬;
- 基于資料加密進行反爬,

突然蹦出來發爬蟲的三大方向,同學們是不是感覺腦瓜子嗡嗡的,不要急不要急哈!老師下面就帶大家深入了解一下它們!(PS:拿出你們的小本本好好聽課哦!)

💀第一個方向:基于身份識別進行反爬
關于反爬蟲三大方向放在第一位的是——基于身份識別進行反爬,這是我們在進行爬蟲的時候所遇到的第一層障礙,
同時也是最容易解決的一個哦!如果你能熟練攻破此類問題,那么你就是個合格的入門級爬蟲工程師啦!!!
??(1)通過headers欄位設定反爬:
-
通過headers中的user-agent欄位來反爬
🔒反爬原理:爬蟲默認情況下沒有user-agent欄位,而是使用模塊默認設定,我們在爬取某網站時就會被直接識破是爬蟲而不是用戶操作!
🔑解決方法:請求之前添加user-agent即可,更好的方式是使用user-agent池來解決(收集一堆的user-agent的方式,或者是隨機生成user-agent)! -
通過referer欄位或者是其他欄位來反爬
🔒反爬原理:爬蟲默認情況下不會帶上referer欄位,服務器通過判斷請求發起的源頭,以此判斷請求是否合法,
🔑 解決方法:添加referer欄位! -
通過cookie來反爬
🔒反爬原理:通過檢查cookies來查看發起請求用戶是否具備相應權限,以此來進行反爬,
🔑解決方案:進行模擬登錄,成功獲取cookies之后在進行資料爬取!
🌀(2)通過請求引數設定反爬:
-
通過從html靜態檔案中獲取請求資料
🔒反爬原理:通過增加獲取請求引數的難度進行反爬,
🔑解決方法:仔細分析抓包得到的每一個包,搞清楚之間的聯系! -
通過發送請求獲取請求資料
🔒反爬原理:通過增加獲取請求引數的難度進行反爬,
🔑解決方法:仔細分析抓包得到的每一個包,搞清楚之間的聯系,搞清楚請求引數的來源! -
通過js生成請求引數(JS滲透實戰:百度翻譯實戰;咪咕登錄實戰;獲取網易云評論實戰)
🔒反爬原理:js生成了請求引數,
🔑解決方法:分析js,觀察加密實作的程序,通過js2py獲取js的執行結果,或者使用selenium來實作! -
通過驗證碼來反爬(三大常用驗證碼:解決圖形驗證碼;解決點觸驗證碼;解決滑塊驗證碼)
🔒反爬原理:對方服務器通過彈出驗證碼強制檢驗用戶瀏覽行為,
🔑解決方法:打碼平臺或者是機器學習的方法識別驗證碼,其中打碼平臺(比如:超級鷹…)廉價易用,更值得推薦!
🎃第二個方向:基于爬蟲行為的反爬
關于反爬蟲三大方向放在第二位的是——基于爬蟲行為的反爬,這是我們在進行爬蟲的時候所遇到的第二層障礙,
需要使用到爬蟲進階的操作進行解決!如果你能熟練攻破此類問題,那么你就是個合格的中級級爬蟲工程師啦!!!
🎅(1)根據爬取行為進行反爬,會在爬取源頭——請求上做分析:
-
基于請求頻率或總請求數量
🔒反爬原理:正常瀏覽器請求網站,速度不會太快,同一個IP/賬號大量請求了對方服務器,有更大可能性會被識別為爬蟲,
🔑解決方法:對應的通過購買高質量的IP的方式能夠解決問題/IP代理池! -
通過同一IP/賬號請求之間的間隔進行反爬
🔒反爬原理:正常人操作瀏覽器瀏覽網站,請求之間的時間間隔是隨機的,而爬蟲前后兩個請求之間時間間隔通常比較固定同時時間間隔比較短,因此可以用來做反爬,
🔑解決方法:請求之間進行隨機等待,模擬真實用戶操作,在添加時間間隔之后,為了能夠高速獲取資料,盡量使用IP代理池,如果是賬號,則將賬號請求之間設定隨機休眠! -
通過對請求IP/賬號每天請求次數設定值進行反爬
🔒反爬原理:正常的瀏覽器行為,其一天的請求次數是有限的,通常超過夠一個值,服務器就會拒絕回應,
🔑解決方法:對應的通過購買高質量的IP的方法/多賬號,同時設定請求間隨機休眠!
🎉(2)根據爬取行為進行反爬,會在爬取程序——步驟上做分析:
-
通過js實作跳轉來反爬
🔒反爬原理:js實作頁面跳轉,無法在原始碼中獲取下一頁url,
🔑解決方法:多次抓包獲取多條url,分析規律! -
通過蜜罐(陷阱)獲取爬蟲IP(或者代理IP),進行反爬
🔒 反爬原理:在爬蟲獲取鏈接請求的程序中,爬蟲會根據正則,xpath,css等方式進行后續鏈接的提取,此時服務器端可以設定一個陷阱url,會被提取規則獲取,但是正常用戶無法獲取,這樣就能有效的區分爬蟲和正常用戶,
🔑解決方法:完成爬蟲的撰寫之后,使用代理批量爬取測驗/仔細分析回應內容結構,找出頁面中存在的陷阱! -
通過假資料反爬
🔒反爬原理:向回傳的回應中添加假資料污染資料庫,通常假資料不會被正常用戶看見,
🔑解決方法:長期運行,核對資料庫中資料同實際頁面中資料對應情況,如果存在問題,分析回應內容! -
阻塞任務佇列
🔒反爬原理:通過生成大量垃圾url,從而阻塞任務佇列,降低爬蟲的實際作業效率,
🔑解決方法:觀察運行程序中請求回應狀態,仔細分析原始碼獲取的垃圾url生成規則,對url進行過濾! -
阻塞網路IO
🔒反爬原理:發送請求獲取回應的程序實際上就是下載的程序,在任務佇列中混入一個大檔案的url,當爬蟲在進行該請求時將會占用網路io,如果是有多執行緒,則會占用執行緒,
🔑解決方法:觀察爬蟲運行狀態/多執行緒請求執行緒計時! -
運維平臺綜合審計
🔒反爬原理:通過運維平臺綜合管理,通常采用復合型反爬蟲策略,多種手段同時使用,
🔑解決方法:仔細觀察分析,長期運行測驗目標網站,檢查資料采集速度,多方面綜合處理!
🔓第三個方向:基于資料加密進行反爬
(手段:對回應中含有的資料進行特殊化處理!)
關于反爬蟲三大方向放在第三位的是——基于資料加密進行反爬,這是我們在進行爬蟲的時候所遇到的第三層障礙,
需要使用到爬蟲高級的操作進行解決!如果你能熟練攻破此類問題,那么你就是個合格的高級爬蟲工程師啦!!!
-
通過自定義字體來反爬(處理字體反爬(以解決58同城官網字體反爬為例))
🔒反爬思路:使用自定義字體檔案,
🔑解決思路:切換到手機版,決議字體檔案進行翻譯/仔細分析所抓取的所有包,找到對應的字體檔案,決議這個字體檔案進行翻譯!
(下圖是爬取58同城官網的資料)

-
通過css來反爬
🔒反爬原理:原始碼資料不為真實資料,需要通過css位移才能產生真實資料,
🔑解決方法:計算css的偏移! -
通過js動態生成資料進行反爬:
🔒反爬原理:網頁部分資料通過js動態生成,
🔑解決思路:決議關鍵js,獲得資料生成流程,模擬生成資料! -
通過資料圖片化反爬
🔒反爬原理:將資料圖片化,
🔑解決思路:通過使用圖片決議引擎從圖片中獲取資料! -
通過編碼格式進行反爬
🔒反爬原理:不使用默認編碼格式,在獲取回應之后,通常爬蟲使用utf-8格式進行解碼,此時解碼結果將會是亂碼或者報錯,
🔑解決思路:根據原始碼進行多格式解碼,獲取真正的解碼格式!
🍖拓展一:驗證碼的處理!
我們在登錄注冊時頻繁發送請求,服務器彈出圖片驗證碼進行驗證!不過現在大多網站哪怕你第一次發送請求,它也蹦出圖片驗證碼要求你驗證!
🍮(1)處理方案:
- 手動輸入,但僅限于登錄一次,無法持續;
- 圖片識別引擎,使用光學識別引擎處理圖片中的資料,目前常用于圖片資料提取,較少用于驗證碼處理;
- 打碼平臺,爬蟲常用解決驗證碼的方案,
🍚(2)關于圖片識別引擎(tesseract)這一處理方案的具體操作:
🍏第一步:下載安裝
專案地址:https://github.com/tesseract-ocr/tesseract
引擎安裝:
(1)mac環境下直接執行命令:
brew install --with-training-tools tesseract
(2)windows環境下的安裝,可以通過exe安裝包安裝,下載地址:GitHub專案中的wiki找到,安裝完成后將tesseract執行檔案的目錄加入到path環境變數中,方便呼叫!
(3)linux環境下安裝
sudo apt-get install tesseract-ocr
🍒第二步:使用
圖片識別引擎tesseract通過python使用,(以下代碼沒有對圖片進行任何處理,效果不佳!)
戰前準備:
(1)PIL用于打開圖片檔案
pip install pillow
(2)pytesseract模塊用于從圖片中決議資料
pip install pytesseract

from PIL import Image
import pytesseract
im = Image.open('download.png')
result = pytesseract.image_to_string(im)
print(result)
🍑拓展:大廠的圖片識別引擎(拿來直接調介面,何樂而不為~)
其他OCR平臺
(1)微軟Azure影像識別:
https://azure.microsoft.com/zh-cn/services/cognitive-services/computer-vi
(2)有道智云文字識別:
http://aidemo.youdao.com/ocrdemo
(3)阿里云圖文識別:
https://www.aliyun.com/product/cdi/
(4)騰訊OCR文字識別:
https://cloud.tencent.com/product/ocr
🍉(3)常見驗證碼的種類:
第一種:url地址不變,驗證碼不變;
第二種:url地址不變,驗證碼變化,
🐮關于驗證碼這一部分,同學們是不是一直有個疑問:對方服務器是如何判斷當前我輸入的驗證碼是顯示在我螢屏上的驗證碼?🐮
💘其實這就是通過cookie來實作的,對應的,在請求頁面,請求驗證碼,需要保證cookie的一致性,使用requests.session來解決,💘
🔞拓展二:關于爬蟲程序中chrome瀏覽器騷操作
(使用隱身視窗,首次打開網站,不會帶上cookie,能夠觀察頁面的獲取情況,包括對方服務器如何設定cookie在本地!)
-
js的決議:
1.確定js的位置 ①觀察按鈕的系結js事件(此法不保證一定能找到) ②通過initiator定位到js檔案 ③通過serach 搜索關鍵字定位到js檔案 ④通過元素系結的事件監聽函式找到js檔案 2.在chrome瀏覽器,檢查,通過consle執行部分js代碼,決議部分js代碼代表的含義 3.模擬重現 ①使用 js2py 翻譯工具,python程式重現; ②還有 pyv8,executejs,splash 原理與 js2py 相似; ③純python的實作 ; -
思路:
在了解js內容和執行順序之后,通過python來完成js執行程序,得到結果; 在了解js內容和執行順序之后,使用類似 js2py 的模塊來執行js代碼,得到結果,
💣In The End!

| 從現在做起,堅持下去,一天進步一小點,不久的將來,你會感謝曾經努力的你! |
?本博主會持續更新爬蟲基礎分欄及爬蟲實戰分欄,認真仔細看完本文的小伙伴們,可以點贊收藏并評論出你們的讀后感,并可關注本博主,在今后的日子里閱讀更多爬蟲文!
如有錯誤或者言語不恰當的地方可在評論區指出,謝謝!
如轉載此文請聯系我說明用以意并標注出處及本博主名,謝謝!
?
??可通過點擊下面——>添加私人VX號—>請標明來自CSDN,會拉你進入技術交流群(群內涉及各個領域大佬級人物,任何問題都可討論~)—>互相學習&&共同進步(非誠勿擾):
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/302839.html
標籤:其他
下一篇:服務治理在資源中心的實踐
