【逆向工程】從原始碼分析網站反爬蟲措施
從事網頁爬蟲工作有兩年了,從最開始的新聞,bbs論壇,論文網站,到現在的全國企業信用資訊公示系統,無論是PC網頁,到手機移動APP,還是現在的支付寶微信小程式一直採集別人家網站上的資料,也算得上也是身經百戰。如今,領導安排我注意收集整理歸納一下反爬蟲措施,好直接用到我們自家的網站上,以免辛辛苦苦得來的資料被人輕而易舉的抓取了。
1、瀏覽器Cookies中的JSESSIONID
多年的經驗告訴我,那些反爬蟲比較厲害的網站一般都會校驗cookies的,所以傳送請求的時候一定要帶上cookies,需要注意的是最好在這兩處都要加上cookies。一個是直接請求帶上cookies,cookies是以鍵值對的形式帶上的;另一個是在headers中也要加上Cookies的,這裡的Cookies的value是用“;”隔開的字串。下面我們分析一下
package com.test.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SetJeSessionIdServlet extends HttpServlet{ @Override protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //這裡是獲取請求JESESSIONID String JESESSIONID = request.getParameter("JSESSIONID"); //在cookie中加入JESESSIONID Cookie cookie = new Cookie("JSESSIONID",JESESSIONID); response.addCookie(cookie); } }
從上面程式碼可以看出,每次webserver處理請求,返回時都會加上JESESSIONID進行校驗處理,所以編寫爬蟲時要cookies中有JESESSIONID是必須要加上的,同樣的cookie中的uuid,__jsluid也很重要,使用時注意觀察不要遺漏了,這其中比較有意思的網站,如全國企業信用資訊系統中使用了加速樂的反爬蟲措施,就會校驗以上引數。
2、小程式中禁用WiFi代理伺服器反爬蟲
在爬蟲某小程式時,用Fiddler設定WiFi代理抓包檢視請求,發現所有請求異常,沒有返回。看一下後臺業務邏輯歸納:
if(isWifiProxy){
//true,使用了wifi代理,不做訪問操作
}else{
//flase,正常使用者,未使用wifi代理,訪問網頁
}
Java的判斷邏輯也不復雜嘛!展示一下具體的程式碼實現:
//判斷裝置 是否使用代理上網
private boolean isWifiProxy(Context context) {
final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
String proxyAddress;
int proxyPort;
if (IS_ICS_OR_LATER) {
proxyAddress = System.getProperty("http.proxyHost");
String portStr = System.getProperty("http.proxyPort");
proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
} else {
proxyAddress = android.net.Proxy.getHost(context);
proxyPort = android.net.Proxy.getPort(context);
}
return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
}
這麼做確實一定程度上可以做到防止抓包,但是一刀切導致所有使用代理的使用者無法訪問小程式。那就不用WiFi代理訪問小程式,在電腦上裝個安卓模擬器用Fiddler再次抓包,仍然無法看到url,原來模擬器跟PC是“獨立”的終端裝置。但道高一尺魔高一丈,終於讓我發現了個神器,手機抓包工具,即使不使用WiFi代理,我也可以在手機上直接進行抓包。如下,直接抓包成功,然後非常暢快的進行網路爬蟲採集!