【****】从源码分析网站反爬虫措施
从事网页爬虫工作有两年了,从最开始的新闻,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代理,我也可以在手机上直接进行抓包。如下,直接抓包成功,然后非常畅快的进行网络爬虫采集!