一、為什么要反爬蟲?
在設計反爬蟲系統之前,我們先來看看爬蟲會給網站帶來什么問題?
本質上來說,互聯網上可以供人們瀏覽、查看和使用的網站及其網站上的數據,都是公開和允許獲取的,所以并不存在于所謂的“非法授權訪問”問題。
爬蟲程序訪問網頁和人訪問網頁沒有本質區別,都是由客戶端向網站服務器發起http請求,網站服務器接收到請求之后將內容響應返回給客戶端。
只要是發起請求,網站服務器必然要進行響應,要進行響應,必然要消耗服務器的資源。
立即學習“Python免費學習筆記(深入)”;
網站的訪問者與網站之間是互相互惠互利的關系,網站為訪問者提供了自己所需要的必要的信息和服務,而訪問者也為網站帶來了流量、訪客、活躍度。因此,網站所有者會愿意使用服務器的帶寬、磁盤和內存,以便為訪問者提供服務。
而爬蟲程序呢?無異于白嫖黨。成倍地消耗網站服務器資源、占用服務器帶寬,卻不會為網站帶來一絲的利益,甚至于,最后的結果是有損于網站本身的。
爬蟲,可能算得上是互聯網里的非洲鬣狗了,也難怪遭網站的所有者討厭了。
二、識別爬蟲
既然討厭爬蟲,所以要將爬蟲拒之于網站的門外了。要拒絕爬蟲的訪問,首先當然要識別出網絡訪問者中的爬蟲程序。如何識別呢?
1. HTTP請求頭
一般的網絡訪問者會使用瀏覽器對網站進行訪問,因此這個識別是針對最基礎的網絡爬蟲的。而瀏覽器都會帶上自己的請求頭以表明自己的基礎信息。HTTP請求頭容易被爬蟲程序突破,因為任何人都可以修改和偽造。
2. Cookie值
Cookie通常被用于識別網站訪問者的身份,類似于手中的一張臨時身份證。并憑著這個憑著與網站服務器進行身份的校對。很遺憾,Cookie保存在客戶端,并且能夠被修改和偽造。
3. 訪問頻率
當一個訪問者每秒鐘請求網站的某個頁面,或者在幾秒內請求了數百次這個頁面時。這個訪問者不是爬蟲程序就有鬼了。有哪個人類可以快速和頻繁地點擊鼠標來訪問一個頁面?他是否患有帕金森氏癥或者是八爪魚轉世?
通過訪問頻率來識別爬蟲程序是可行的,但是爬蟲程序也能通過使用大量的代理IP來實現一個IP地址只訪問了一次的效果,也可以通過隨機的請求時間間隔規避。
4. 鼠標行為軌跡
普通的人類訪問者在瀏覽網頁時,不會像機器一樣按部就班地移動鼠標并點擊。而鼠標的移動和點擊,是可以通過JS腳本捕獲到的,所以可以通過判斷訪問者的鼠標行為軌跡來判斷訪問者是否為爬蟲程序。
5. Token值
許多網站現在采用前后端分離的開發方式,由后端接口返回數據給前端,前端在拿到數據后再結合頁面進行渲染。所以很多爬蟲程序都直接找數據接口,而不是傻傻地請求頁面了。token就用在驗證這些后端數據接口上。通常,Token是由某些數據經過時間和網頁密鑰的組合加密而成的。
還有更多地識別爬蟲的手段在此就不一一進行介紹。可惜的是,無論上述何種方式用于辨認網絡爬蟲,都存在可能被爬蟲欺騙或穿透的風險。
三、拒絕爬蟲
就像沒有一勞永逸的網站安全防護一樣,十年前把3389端口一關,就能防止服務器成為肉雞,如今各種防火墻、各種安全措施都加上了,還有可能因為某個0Day漏洞被勒索。
爬蟲與反爬蟲之間,也永遠都在斗爭和升級。網絡攻防和反爬蟲之間的區別在于,前者是一場無限制的搏斗,而后者則像參加奧運會的拳擊選手那樣戴著手套和頭盔。
網站為了運營,勢必要對外開放內容,而開放的內容就像是飄忽在非洲大草原的腐肉和血腥味,直勾勾地吸引著鬣狗的到來。
在開放內容和避免淪為爬蟲的數據礦池之間平衡,是一個難事。
1. 內容上限制內容的開放
開放的內容是獲取用戶、流量的基礎,所以內容必須是開放的。但是內容的開放并不是無限制的開放。未注冊用戶可以查看一到兩篇內容,但無法無限制地瀏覽所有內容。這種限制可以采取登錄、掃碼驗證或接入谷歌驗證碼等點擊驗證機制。
現在已經有越來越多的網站采用了有限內容開放的機制,比如微博、知乎、淘寶等,你可以看到一頁兩頁的內容,但是如果還想繼續,對不起請登錄。
2. 行為上記錄用戶操作
需要訪問者進行登錄并不能解決問題,因為模擬登錄一直是網絡爬蟲程序的一個熱門發展分支,無論是圖片驗證碼、拼圖、滑塊還是點選漢字,都會被突破。編寫APP及爬蟲程序可以讓短信驗證碼與網站進行通信。
所以記錄用戶行為必不可少,用戶的一切操作和訪問行為都需要記錄在案,這是分析和處理爬蟲的基礎。
3. 控制上嚴厲打擊高頻行為
從實際上來看,也有很多爬蟲程序的運行并非是為了往死里薅網站的數據和內容,僅僅是為了方便進行手工的收集和整理工作,這種類型的爬蟲行為一般會比人工瀏覽的頻次要高,但是又顯著低于鬣狗般的高頻爬蟲,對這種類型的爬蟲行為可以忽略掉。做人留一線,日后好相見。
但是對于影響網站服務器運行的高頻爬蟲行為,必須采取措施。結合用戶和IP信息,對相關用戶或IP進行處理。
4. 協議里申明權利
網站的所有者必須在網站協議或用戶協議里申明,允許正常的瀏覽、訪問和數據獲取,對于異常、高頻、威脅網站服務器穩定的行為,將保留進一步處理的權利。