有哪些有趣的反爬蟲機制嗎?

陳良昱


IP

網站檢測網絡抓取活動的最簡單方法之一是通過IP跟蹤。該網站可以根據其行為識別IP是否是機器人。當網站發現定期 或在 短時間內 從單個 IP地址 發送了 大量請求 時, 很有可能該IP被阻止,因為它被懷疑是機器人。在這種情況下,構建一個防爬蟲真正重要的是 每單位時間的訪問次數 和 訪問頻率。這是您可能會遇到的一些情況。

方案1:幾秒鐘內進行多次訪問。真正的人無法快速瀏覽。因此,如果您的搜尋器頻繁向網站發送請求,則該網站肯定會阻止將該IP識別為機器人的IP。

解決方案:降低爬蟲速度。在執行或增加兩個步驟之間的等待時間之前設置延遲時間(例如“睡眠”功能)將始終有效。

方案2:以完全相同的速度訪問網站。真實的人類不會一遍又一遍地重複相同的行為模式。一些網站會監視請求的頻率,如果以完全相同的模式(例如每秒一次)定期發送請求,則很可能會激活防抓取機制。

解決方案:為搜尋器的每個步驟設置隨機延遲時間。以隨機的抓取速度,爬蟲的行為將更像人類瀏覽網站的方式。

方案3:某些高級防爬技術將採用複雜的算法來跟蹤來自不同IP的請求並分析其平均請求。如果IP的請求異常,例如每天發送相同數量的請求或在同一時間訪問相同的網站,則會被阻止。

解決方案:定期更改您的IP。大多數VPN服務,雲服務器和代理服務都可以提供輪換IP。通過這些旋轉的IP發送請求時,爬網程序的行為不像漫遊器,這可以減少被阻止的風險。

登錄

許多網站,尤其是諸如Twitter和Facebook之類的社交媒體平臺,僅在您登錄網站後才向您顯示信息。為了對此類站點進行爬網,爬網程序還需要模擬日誌記錄步驟。

登錄網站後,搜尋器需要保存cookie。Cookie是一小段數據,用於存儲用戶的瀏覽數據。如果沒有Cookie,該網站會忘記您已經登錄,並要求您再次登錄。

此外,某些具有嚴格抓取機制的網站可能僅允許部分訪問數據,例如即使登錄後每天也有1000行數據。

您的漫遊器需要知道如何登錄

1)模擬鍵盤和鼠標操作。搜尋器應模擬登錄過程,其中包括使用鼠標單擊文本框和“登錄”按鈕,或使用鍵盤輸入帳戶和密碼信息的步驟。

2)首先登錄,然後保存 cookie。對於允許cookie的網站,他們會通過保存cookie來記住用戶。有了這些Cookie,您無需在短期內再次登錄該網站。由於採用了這種機制,您的搜尋器可以避免繁瑣的登錄步驟,並且無需收集所需的信息。

3)不幸的是,如果遇到上述嚴格的轉義機制,則可以安排抓取工具以固定頻率(例如每天一次)來監視網站。計劃搜尋器在一段時間內抓取最新的1000行數據並累積最新的數據。

UA

UA代表的是User-Agent,它是網站的標頭,用於識別用戶的訪問方式。它包含諸如操作系統及其版本,CPU類型,瀏覽器及其版本,瀏覽器語言,瀏覽器插件等信息。

UA示例:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_7_0)AppleWebKit / 535.11(KHTML,例如Gecko)Chrome / 17.0.963.56 Safari / 535.11

抓取網站時,如果您的搜尋器不包含標題,則只會將其自身標識為腳本(例如,如果使用python來構建搜尋器,則它將自身聲明為python腳本)。網站肯定會阻止腳本發出的請求。在這種情況下,搜尋器必須偽裝成帶有UA標頭的瀏覽器,以便網站可以為其提供訪問權限。

有時,即使您輸入具有相同URL的網站,網站也會向不同的瀏覽器或不同的版本顯示不同的頁面或信息。機會是與一個瀏覽器兼容而其他瀏覽器被阻止的信息。因此,為了確保您可以進入正確的頁面,將需要多個瀏覽器和版本。

在不同的UA之間切換以避免被阻止

更改UA信息,直到找到正確的信息。如果長時間使用相同的UA,則應用了複雜的防爬網技術的某些敏感網站甚至可能阻止訪問。在這種情況下,您需要定期更改UA信息。

5.AJAX

如今,更多的網站是使用AJAX開發的,而不是傳統的Web開發技術。AJAX代表異步JavaScript和XML,這是一種異步更新網站的技術。簡而言之,當頁面內僅進行少量更改時,無需重新加載整個網站。

那麼您怎麼知道一個網站是否適用AJAX?

沒有AJAX的網站:即使您僅在網站上進行了很小的更改,整個頁面也會被刷新。通常,會出現加載符號,並且URL會更改。對於這些網站,我們可以利用該機制並嘗試找到URL更改方式的模式。然後,您可以批量生成URL,並直接通過這些URL提取信息,而不必教您的爬蟲如何導航類似人類的網站。

帶有AJAX的網站:僅更改您單擊的位置,並且不會出現加載標誌。通常,Web URL不會更改,因此搜尋器必須以直接的方式進行處理。

對於AJAX開發的某些複雜網站,將需要特殊的技術來找出那些網站上獨特的加密方式並提取加密數據。解決此問題可能很耗時,因為加密的方式在不同的頁面上會有所不同。如果您可以找到帶有內置JS操作的瀏覽器,那麼它可以自動解密網站並提取數據。


大魔王Hacker


說下我以前爬某電影評分網站時遇到的反爬機制吧,感覺還挺有趣的。

爬數據時遇到的問題

首先來說說我在爬數據時遇到的問題,看圖:

頁面上正確顯示了評分為9.5,按F12打開調試模式,找到該元素節點時發現顯示的是兩個框框,再打開源碼發現是一串亂碼。

頁面數字顯示正常,在源碼中卻顯示亂碼,可以肯定該網站肯定採取了反爬蟲機制,有點意思!

反爬蟲機制原理

下面分析一下這個反爬蟲機制的原理。

做過web前端開發的人知道顯示框框一般都是由於引用了字體文件引起,那麼這個網站反爬蟲機制會不會跟字體文件有關呢?

刷新一下頁面,發現一個字體文件的請求:

我們手動將這個字體文件下載下來,使用字體編輯工具打開:

雖然我不是太懂字體文件的原理,但是按我的理解其實就是一個字符和數字關係映射文件,例如字符E282對應數字9、字符F11B對應數字5。

現在我們再來看一下源碼裡的亂碼:

有沒有看出什麼端倪?

是的,它們並不是什麼亂碼,而是而字體文件裡的字符一一對應的!

根據對應關係可以推斷出亂碼“.”對應數字9.5,正好和頁面上顯示的是一致的。

總結

這個反爬蟲機制的現象是頁面顯示數字正常,但是源碼裡顯示亂碼;這個反爬蟲機制的工作原理就是通過字體文件將亂碼和數字建立好映射關係。


分享到:


相關文章: