java 爬虫优缺点_浅析Java Web 防爬虫机制

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 21:04   4973   0

前戏:

因为作者喜欢爬虫,所以总结了一下自己爬虫时一般遇到的难处,所以这些难处就是防爬虫的有效措施。

了解一般防爬虫的方法:

1.给令牌(类似我们拿快递,需要有身份验证的令牌,才给你拿快递)。

2.记录ip(同ip访问量速度太高等等)。

其他的还有很多。。。

今天我们模拟第一种机制:给令牌。

首先我们看看这个网页:

8b06b02a37c2

普通.png

其次看看页面的源码:

8b06b02a37c2

页面源码.png

一般爬虫遇到这种网页,肯定偷偷开心,因为只要爬整个网页就可以获取里面的图片资源等等。。。

接下来我们再来看看同样的网页,不同的源码:

8b06b02a37c2

源码2.png

这两个源码的实现的效果是一样的,为什么他们区别那么大(第一个基本各种标签都在界面上,第二个就两个div)。

没错,很多人猜到了,就是异步加载(Ajax)!

至于如何异步加载不是本篇文章的重点,接下来我们看看如何实现异步加载和令牌式来防爬虫。

接下来看看图片,了解整个令牌防爬虫。

8b06b02a37c2

图解.png

因为有了令牌验证,爬虫并不能直接爬取,他需要拿到令牌,假设你的令牌很难构造,这就可以过滤很多爬虫了!

看到这里应该明白怎么个防爬虫原理了吧,接下来关键的是令牌的构造!

这里有两种方式:

第一种:请求服务器给令牌(比如你登陆后,个人信息存在session,在加密给你一个令牌),不过这种给服务器的压力大,不建议。

第二种:在客户端构成令牌(看是在我们客户端构成令牌,不过加密够难解,还是不容易伪造!)

实现方法:

//Jquery

//异步的JS

//加密的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( "![](Pic/me.jpg)\n");

}

}

接下来我们看看通过抓包,我们的模拟是否成功~

抓包看看令牌:

8b06b02a37c2

令牌.png

服务器和客户端的令牌是否相同,相同合法给予图片资源!

8b06b02a37c2

服务端.png

给予资源(在response里面)

8b06b02a37c2

响应.png

至此我们获取到了资源!

本文为原创,如有转载请注明转载地址,对作者的一种鼓励!

本次项目发布在github上(求个star(●''●)):https://github.com/Elricyo/PreventSpider

谢谢观看!有什么问题请评论,作者也是Java Web 的菜鸟!

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP