一、為什麼要反爬蟲?
在設計反爬蟲系統之前,我們先來看看爬蟲會為網站帶來什麼問題?
#本質上來說,網路上可以供人們瀏覽、查看和使用的網站及其網站上的數據,都是公開和允許獲取的,所以並不存在於所謂的「非法授權存取」問題。
爬蟲程式存取網頁和人訪問網頁沒有本質區別,都是由客戶端向網站伺服器發起HTTP請求,網站伺服器接收到請求之後將內容回應傳回給客戶端。
只要是發起請求,網站伺服器必然要回應,要進行回應,必然要消耗伺服器的資源。
網站的訪客與網站之間是互相互惠互利的關係,網站為訪客提供了自己所需要的必要的資訊和服務,而訪客也為網站帶來了流量、訪客、活躍度。因此,網站所有者會願意使用伺服器的頻寬、磁碟和內存,以便為訪客提供服務。
而爬蟲程序呢?無異於白嫖黨。成倍地消耗網站伺服器資源、佔用伺服器頻寬,卻不會為網站帶來一絲的利益,甚至於,最後的結果是有損於網站本身的。
爬蟲,可能算是網路裡的非洲鬣狗了,也難怪遭網站的擁有者討厭了。
二、辨識爬蟲
既然討厭爬蟲,所以要將爬蟲拒於網站的門外了。要拒絕爬蟲的訪問,首先當然要識別出網路訪客中的爬蟲程式。如何識別呢?
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. 协议里申明权利
网站的所有者必须在网站协议或用户协议里申明,允许正常的浏览、访问和数据获取,对于异常、高频、威胁网站服务器稳定的行为,将保留进一步处理的权利。
以上是Python反爬蟲的知識點有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!