前戲:
因為作者喜歡爬蟲,所以總結了一下自己爬蟲時一般遇到的難處,所以這些難處就是防爬蟲的有效措施。
了解一般防爬蟲的方法:
1.給令牌(類似我們拿快遞,需要有身份驗證的令牌,才給你拿快遞)。
2.記錄ip(同ip訪問量速度太高等等)。
其他的還有很多。。。
今天我們模擬第一種機制:給令牌。
首先我們看看這個網頁:

普通.png
其次看看頁面的源碼:

頁面源碼.png
一般爬蟲遇到這種網頁,肯定偷偷開心,因為只要爬整個網頁就可以獲取里面的圖片資源等等。。。
接下來我們再來看看同樣的網頁,不同的源碼:

源碼2.png
這兩個源碼的實現(xiàn)的效果是一樣的,為什么他們區(qū)別那么大(第一個基本各種標簽都在界面上,第二個就兩個div)。
沒錯,很多人猜到了,就是異步加載(Ajax)!
至于如何異步加載不是本篇文章的重點,接下來我們看看如何實現(xiàn)異步加載和令牌式來防爬蟲。
接下來看看圖片,了解整個令牌防爬蟲。

圖解.png
因為有了令牌驗證,爬蟲并不能直接爬取,他需要拿到令牌,假設你的令牌很難構造,這就可以過濾很多爬蟲了!
看到這里應該明白怎么個防爬蟲原理了吧,接下來關鍵的是令牌的構造!
這里有兩種方式:
第一種:請求服務器給令牌(比如你登陸后,個人信息存在session,在加密給你一個令牌),不過這種給服務器的壓力大,不建議。
第二種:在客戶端構成令牌(看是在我們客戶端構成令牌,不過加密夠難解,還是不容易偽造?。?/p>
實現(xiàn)方法:
<script type="text/javascript" src="Js/jquery-3.2.1.js"></script>//Jquery
<script type="text/javascript" src="Js/LoadPage.js"></script>//異步的JS
<script type="text/javascript" src="Js/Encrypt.js"></script>//加密的JS
由于異步不是重點,所以略過。。。。
接下來,我們服務器接收令牌并且判斷,合法給予資源,不合法不給予!
try {
params = Encrypt.GetMD5Code(token);
System.out.println("服務器的params:"+params);
}catch (Exception e){
e.printStackTrace();
}
String getToken = req.getParameter("token");
System.out.println("客戶端的params:"+getToken);
if (getToken.equals(params)){//判斷令牌是否合法!
//合法便給予資源
resp.getWriter().print( "\n");
}
}
接下來我們看看通過抓包,我們的模擬是否成功~
抓包看看令牌:

令牌.png
服務器和客戶端的令牌是否相同,相同合法給予圖片資源!

服務端.png
給予資源(在response里面)

響應.png
至此我們獲取到了資源!
本文為原創(chuàng),如有轉載請注明轉載地址,對作者的一種鼓勵!
本次項目發(fā)布在github上(求個star(●'?'●)):https://github.com/Elricyo/PreventSpider
謝謝觀看!有什么問題請評論,作者也是Java Web 的菜鳥!