python爬蟲泛濫的解決方法詳解
我們可以把互聯(lián)網(wǎng)上搬運數(shù)據(jù)的程序看成小螞蟻,它們需要采集不同的食物帶回洞里存儲。但是大家也知道白蟻泛濫的事件,在我們的網(wǎng)絡(luò)環(huán)境里,如果爬蟲都集中在某幾個位置,最直接的結(jié)果就是這個網(wǎng)站的擁擠。對于我們這些網(wǎng)站訪問者而言也不是好事情,首先網(wǎng)頁的頁面會被卡住。網(wǎng)站的管理人員面對爬蟲過多,這時候就要進行一系列的限制措施了,這里小編分了兩個大的應(yīng)對方向,從不同的角度進 行分析爬蟲過多的解決思路。
一、識別爬蟲
1. HTTP請求頭
這算是最基礎(chǔ)的網(wǎng)絡(luò)爬蟲識別了,正常的網(wǎng)絡(luò)訪問者都是通過瀏覽器對網(wǎng)站進行訪問的。而瀏覽器都會帶上自己的請求頭以表明自己的基礎(chǔ)信息。而這也是最容易被爬蟲程序突破的識別手段,因為HTTP請求頭誰都可以進行修改和偽造。
2. Cookie值
Cookie通常用來標(biāo)識網(wǎng)站訪問者的身份,就像是手上的一張臨時憑證。并憑著這個憑著與網(wǎng)站服務(wù)器進行身份的校對。很遺憾,Cookie是保存在客戶端的數(shù)據(jù),也可以被修改和偽造。
3. 訪問頻率
如果一個訪問者,每隔1秒請求一次網(wǎng)站的某個頁面,或者一秒鐘請求了幾百次這個頁面。這個訪問者不是爬蟲程序就有鬼了。試問人類中有誰能快速和頻繁地點擊鼠標(biāo)訪問一個頁面?他是得了帕金森綜合征還是八爪魚轉(zhuǎn)世?
通過訪問頻率來識別爬蟲程序是可行的,但是爬蟲程序也能通過使用大量的代理IP來實現(xiàn)一個IP地址只訪問了一次的效果,也可以通過隨機的請求時間間隔規(guī)避。
4. 鼠標(biāo)行為軌跡
正常人類訪問者瀏覽網(wǎng)頁勢必不會像機器一樣,機械地移動和點擊鼠標(biāo)。而鼠標(biāo)的移動和點擊,是可以通過JS腳本捕獲到的,所以可以通過判斷訪問者的鼠標(biāo)行為軌跡來判斷訪問者是否為爬蟲程序。
5. token值
現(xiàn)在很多網(wǎng)站都是前后端分離開發(fā)的,數(shù)據(jù)通過后端接口返回給前端,前端拿到數(shù)據(jù)再結(jié)合頁面進行渲染。所以很多爬蟲程序都直接找數(shù)據(jù)接口,而不是傻傻地請求頁面了。token就用在驗證這些后端數(shù)據(jù)接口上。token一般通過網(wǎng)頁上的某個密鑰加上時間再加上某些數(shù)據(jù)組合加密而成。
還有更多地識別爬蟲的手段在此就不一一進行介紹。很遺憾的是,上述任何一種識別爬蟲的手段,都有可能被爬蟲繞過和突破。
二、拒絕爬蟲
1. 內(nèi)容上限制內(nèi)容的開放
開放的內(nèi)容是獲取用戶、流量的基礎(chǔ),所以內(nèi)容必須是開放的。但是內(nèi)容的開放并不是無限制的開放。非注冊用戶可以看到一篇內(nèi)容、兩篇內(nèi)容,但是不能無限地一直看到內(nèi)容。這個限制,可以是要求登錄,可以是要求掃碼驗證,可以是接入谷歌驗證碼之類的點擊驗證機制。
現(xiàn)在已經(jīng)有越來越多的網(wǎng)站采用了有限內(nèi)容開放的機制,比如微博、知乎、淘寶等,你可以看到一頁兩頁的內(nèi)容,但是如果還想繼續(xù),對不起請登錄。
2. 行為上記錄用戶操作
需要訪問者進行登錄并不能解決問題,因為模擬登錄一直是網(wǎng)絡(luò)爬蟲程序的一個熱門發(fā)展分支,無論是圖片驗證碼、拼圖、滑塊還是點選漢字,都會被突破。甚至于短信驗證碼都可以通過編寫APP與爬蟲程序和網(wǎng)站之間進行通信。
所以記錄用戶行為必不可少,用戶的一切操作和訪問行為都需要記錄在案,這是分析和處理爬蟲的基礎(chǔ)。
3. 控制上嚴(yán)厲打擊高頻行為
從實際上來看,也有很多爬蟲程序的運行并非是為了往死里薅網(wǎng)站的數(shù)據(jù)和內(nèi)容,僅僅是為了方便進行手工的收集和整理工作,這種類型的爬蟲行為一般會比人工瀏覽的頻次要高,但是又顯著低于鬣狗般的高頻爬蟲,對這種類型的爬蟲行為可以忽略掉。做人留一線,日后好相見。
但是對于影響網(wǎng)站服務(wù)器運行的高頻爬蟲行為,高防服務(wù)器必須采取措施。結(jié)合用戶和IP信息,對相關(guān)用戶或IP進行處理。
4. 協(xié)議里申明權(quán)利
網(wǎng)站的所有者必須在網(wǎng)站協(xié)議或用戶協(xié)議里申明,允許正常的瀏覽、訪問和數(shù)據(jù)獲取,對于異常、高頻、威脅網(wǎng)站服務(wù)器穩(wěn)定的行為,將保留進一步處理的權(quán)利。
到此這篇關(guān)于python爬蟲泛濫的解決方法詳解的文章就介紹到這了,更多相關(guān)python爬蟲泛濫的解決實例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)超時退出的三種方式總結(jié)
這篇文章主要介紹了python實現(xiàn)超時退出的三種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11把Anaconda中的環(huán)境導(dǎo)入到Pycharm里面的方法步驟
這篇文章主要介紹了把Anaconda中的環(huán)境導(dǎo)入到Pycharm里面的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10python實現(xiàn)aes加密及pycryptodome庫使用
AES算法是高級加密標(biāo)準(zhǔn),它是一種對稱加密算法,AES只有一個密鑰,這個密鑰既用來加密,也用于解密,這篇文章主要給大家介紹了關(guān)于python實現(xiàn)aes加密及pycryptodome庫使用的相關(guān)資料,需要的朋友可以參考下2023-10-10python數(shù)據(jù)操作之lambda表達式詳情
這篇文章主要介紹了python數(shù)據(jù)操作之lambda表達式詳情,文章基于python的相關(guān)資料展開lambda表達式具體的內(nèi)容,感興趣的小伙伴可以參考一下2022-05-05Python語法糖for?else循環(huán)語句里的break使用詳解
這篇文章主要介紹了Python語法糖之for?else循環(huán)語句里的break使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05