面試官竟然開門見山就問反爬蟲措施與解決方案,這誰頂得住啊!

精彩預告:
一名學生捲入夢境,被面試官”押“入刑場直面反爬蟲措施與解決方案,被迫無奈開啓學霸模式,完成驚天大逆轉,被成功錄取的故事,請看下文,精彩正在爲你揭曉。

前景摘要

士不可以不弘毅,任重而道遠。在2020年這個疫情爆發的年代,全國人民借這句古言持續鏖戰,讓這場全民狙擊戰,逐漸接近尾聲。大大小小的街道開始解封,人們又能嚮往來一樣,走在街頭,再也不用擔心受怕,而我們這些程序員終於能夠出去找工作了,這是第一次去找工作,給了自己一萬個理由鼓勵自己,最終“坐”在了面試官的面前。
在這裏插入圖片描述
看看這坐姿,像是慌的人嗎?
嘿嘿,其實挺慌的,畢竟第一次

精彩正文

面試官清了清嗓子,問道:說一下你以前做過的項目,如果github上有最好
然後還好我前段時間臨時抱佛腳,在別人github上找了幾個爬蟲項目,然後弄清了爬蟲項目的構架,以及業務邏輯,使用了哪些爬蟲技術等.
由於我事先有點準備,覺得自己還答的可以
於是面試管又問了我,你做過最好的爬蟲項目是哪個,有什麼特別之處
我就隨便挑了我臨時抱佛腳的幾個項目中挑了一個,由於慌了,挑的項目不太熟,我預料到不好的事情發生,於是我又隨便說了下特別之處,估計勉強通過
溫馨提示
給面試官說項目的時候,一定要選擇最熟悉的項目,否則留下破綻。切記不要耍小聰明。
於是面試官經過打探了一下我的底細之後,直接開門見山問我,遇到過的哪些反爬蟲的策略,你是如何解決的

想難住我,沒門,於是我用盡此生最後一次開掛模式,我直接說道:

信息校驗碼型反爬蟲

:信息就是指客戶端發起網絡請求時的請求頭,而這個校驗是指服務端通過對信息的正確性,完整性,或唯一性進行驗證或判斷,從而區分是用戶所爲還是爬蟲程序所爲。
如下圖所示這個信息校驗型反爬蟲又分爲六種。
在這裏插入圖片描述
總結:信息校驗型反爬蟲分爲User-Agent反爬蟲,cookie反爬蟲,簽名驗證反爬蟲,WebSocket握手驗證反爬蟲,WebSocket消息校驗反爬蟲,WebSocket Ping反爬蟲

信息校驗碼型反爬蟲的解決方案

User-Agent反爬蟲

User-Agent是幹什麼的呢
:服務器可以從User-Agen對應的值識別客戶端使用的操作系統,cpu類型,遊覽器類型,遊覽器使用的引擎等信息
解決方案是什麼呢?
:在自定義請求頭中加上Postman身份標識,requests是允許自定義請求頭的。

Cookie反爬蟲

什麼是cookie?
cookie不僅用於web服務器的用戶身份信息存儲或狀態保持,還應用與反爬蟲,因爲爬蟲程序只獲取html數據,並不會保存遊覽器中的cookie值
解決方案
:在自定義請求頭中加上cookie信息

簽名驗證反爬蟲

這個簽名驗證反爬蟲是幹什麼的?
:簽名是根據數據源進行計算或者加密的過程,這個簽名就具有唯一性和一致性的字符串。用來防止惡意連接,或者數據被篡改。
解決方案
:通過在文件的查詢參數中,看需要的參數,部分加密的參數可能在在網站js腳本中,尋找線索,看js怎麼生成這個的這個參數。模擬js生成這個值,一般來說由客戶端生成一些隨機值和不可逆的md5加密,此時服務器也會使用相同的方式,進行生成這個值,然後客戶端的這個值與自己生成的這個值進行比較,如果超出一定的範圍,則被認定爲反爬蟲。

WebSocket握手校驗反爬蟲

這個握手校驗反爬蟲是什麼
:客戶端按照WebSocket規範生成握手信息並向服務器發送握手請求,然後服務器會讀取並驗證信息,並且客戶端和服務器端可以不遵守WebSocket規範,比如,在校驗信息時,可以同時對referer及User-Agent驗證,如果信息裏面沒有這些東西就會返回403,導致爬取失敗。
解決方案
:在請求頭中加上相關驗證信息即可

WebSocket消息校驗反爬蟲

WebSocket消息校驗反爬蟲?
:客戶端與服務端互發消息時,對客戶端的身份進行校驗。如果服務器端不主動推送,那麼客戶端就無法獲取信息,可以在服務器端新增一個邏輯:握手結束後客戶端發送特定的消息,服務器端對該消息進行校驗,校驗通過則將服務器端的數據推送給客戶端,否則不做處理

解決方案
:客戶端發送的新消息修改爲數據倉庫中沒有的鍵,那麼服務器端就不會給客戶端推送消息

WebSocket Ping反爬蟲

什麼是 WebSocket Ping反爬蟲?
:服務器端可以向客戶端發送 Ping 幀,當客戶端收到 Ping 幀時應當回覆 Pong 幀,如果客戶端不回覆或者回復的並不是 Pong 幀,那麼服務器端就可以人爲客戶端異常,主動關閉該連接。
解決方案
:通常,Ping 幀和 Pong 幀的 Plyload Data 中是沒有內容的,所以只要目標服務器發送 Ping 幀時,客戶端回覆沒有任何內容的 Pong 幀即可。

動態渲染反爬蟲

什麼是動態渲染反爬蟲呢
:就是使用js來提升用戶體驗,常見的就是異步請求,下拉加載等

動態渲染反爬蟲解決方案

:使用selenium套件,這是個測試web應用程序的工具,遇到異步加載,等待數秒之後,或者等待關鍵節點出現之後再獲取數據,下拉加載的解決就是模仿用戶滑動滾動條加載數據。還可以使用Puppeteer以及異步渲染服務Splash,將Splash配置到雲服務器上,再加上負載均衡,多個爬蟲程序可以使用一個API接口渲染頁面

文本混淆反爬蟲

在這裏插入圖片描述
總結:文本混淆反爬蟲又分爲四種,圖片僞裝反爬蟲,CSS偏移反爬蟲,SVG映射反爬蟲,字體反爬蟲

圖片僞裝反爬蟲

什麼是圖片僞裝反爬蟲?
:將帶有文字的圖片與正常文字混合在一起,讓你難辨真假。

CSS偏移反爬蟲

什麼是css偏移反爬蟲?
:利用css樣式將亂序的文字排版爲人類正常閱讀的順序的行爲

SVG映射反爬蟲

什麼是SVG映射反爬蟲?
:SVG是用來描述二維矢量的一種圖片格式,對圖片的放大或縮小都不會影響圖形的質量。不會影響人正常閱讀,而爬蟲程序無法像讀文字那樣獲取SVG圖形中的內容。

字體反爬蟲

什麼是字體反爬蟲
:在 CSS3 時代,開發者可以使用@font-face 爲網頁指定字體,對用戶計算機字體的依賴。開發者可將心儀的字體文件放在 Web 服務器上,並在 CSS 樣式中使用它。用戶使用瀏覽器訪問 Web 應用時,對應的字體會被瀏覽器下載到用戶的計算機上。 CSS 的作用是修飾 HTML ,所以在頁面渲染的時候不會改變 HTML 文檔內容。由於字體的加載和映射工作是由 CSS 完成的,所以即使我們藉助 Splash、Selenium 和 Puppeteer 工具也無法獲得對應的文字內容。使得爬蟲程序無法獲得正確的數據。

文本混餚反爬蟲通用解決方案

:使用python連接到Splah到目標網頁進行截圖,拿到圖之後保存本地,使用PyTesseract庫進行識別指定的圖片。

特徵識別反爬蟲

什麼是特徵識別反爬蟲?
:通過對客戶端的特徵,屬性或者用戶的行爲特點來區分正常用戶和爬蟲程序的手段,最典型的例子,就是selenium對csdn的賬號密碼登陸,對網頁任何操作都會直接被認定爲程序,因爲webdirver特徵的泄露被識別,已經判定爲爬蟲程序。

特徵識別反爬蟲的解決方案

:webdriver的識別依賴navigator.webdriver的返回值,我們可以在verify_webdriver方法觸發之前將navigator.webdriver的值改爲正常的。使用selenium中的執行js代碼的方法,進行強行修改值。

驗證碼

在這裏插入圖片描述
總結:驗證碼分爲五種,字符驗證碼,計算型驗證碼,滑動驗證碼,滑動拼圖驗證碼,文字點選驗證碼

驗證碼的解決方案

字符驗證碼是什麼樣的?
:這種驗證碼主要是通過用戶輸入圖片中的字母、數字、漢字等進行驗證
如何解決
:這種是最簡單的一種,只要識別出裏面的內容,然後填入到輸入框中即可。這種識別技術叫OCR,這裏我們推薦使用Python的第三方庫,tesserocr。對於沒有什麼背影影響的驗證碼,直接通過這個庫來識別就可以。但是對於有嘈雜的背景的驗證碼這種,直接識別識別率會很低,遇到這種我們就得需要先處理一下圖片,先對圖片進行灰度化,然後再進行二值化,再去識別,這樣識別率會大大提高。
什麼是計算型驗證碼
: 計算型驗證碼就是在字符驗證碼的基礎上增加了數學運算。
解決辦法
答:跟字符驗證碼的解決辦法一樣,只不過獲取數字之後要進行數學運算
什麼是滑動驗證碼
:通過滑動滑塊進行驗證的驗證碼
如何解決
:通過selenium庫進行選中滑塊進行模擬人的行爲進行滑動
什麼是滑動拼圖驗證碼
再滑動驗證碼的基礎上增加了隨機滑動距離,需要人找到圖片的缺口,然後將滑塊滑過去進行填補的驗證方式
我們的解決方案是什麼呢?
:在selenium的基礎上增加一個庫Pillow,圖像識別,找到滑塊的位置和缺口的位置,計算缺口偏移量,然後模擬鼠標拖動,將滑塊拖到缺口位置
什麼是文字點選驗證碼
:比滑動拼圖驗證碼更難的驗證碼,需要按照要求來按照順序點擊文字的驗證碼
解決辦法
:這是最難的驗證碼,目前比較好的辦法就是使用第三方接口,接口返回的座標,用selenium模擬進行點擊

面試官直接打斷我的話,說:哥你過了,我給你登記信息,籤合同把。。。

直接把我驚醒,還有這種好事,這不才開始問嗎,嘿嘿

夢醒時分

突然,媽媽拍打着我的腦袋,說道:兒子,起牀了,怎麼睡着睡着,還笑呢,夢見啥開心事,給媽說說。
在這裏插入圖片描述
原來這一切都是…
好好了,覺得作者用心了,留下你的👍
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章