10个高效防爬虫方法,轻松应对网站数据被爬风险!
黑帽seo引流 2024年11月6日 17:12:52 百收网
10个高效防爬虫方法,轻松应对网站数据被爬风险!
网络爬虫“反爬”的三种实用技术!#Python#爬虫#编程#程序员
然后我这里还有一道加薪题,你看要不要试一试?单从我的角度,我愿意给你加钱的题目。
我还可以。
就是最近就是有一些同学盯上了我们这个网站,想把我们这个网站上 4, 000 多道题目, 100 多的题库数据全都刷下来,那现在有一个问题,就是我怎么样自动识别出来这些爬取我们数据的用户,并且给他封号?看你想到的解决方案会不会和我们的有相似之处,而且说不定你能有更好的方法。
第一个没啥用的,就是说在那个它会有一个 robot GST,就是它是一个比较规范的发生,它其实是不会爬这些东西的。剩下的就是说我必须要登录过平台的人人才能够去,访问这些题目在前面加一个登加登录策略,访问频次特别高的,因为人手去看题目的话,它其实可能说 10 秒钟换一道,但是它如果那个频率一频率很不正常的话,我们可以把这些 IP 给它崩掉,使它的请求频率过高。
你会用什么来统计这种频率呢?
这种可以在网关,就是说如果有网关的话,可以在网关里去获取它那个请求信息,就是请求方的那个请求 IP 端口这些,然后把它存到一个 map 里,存到 map 或者ready,直接存到 list map 里边去,或者存到 Redis 里边去。每访问一次给他次数累加,就在一个时间段里边,超过一个量的话,其实他,嗯就封号或者说是禁止访问题中。
刚刚你提到的说在网关里面用 map 或者 Redis 用 map 行不行?或者你会不会用 map 来实现统计这个请求的IP?
一般网关它可能是一个,单,是一个,如果是一个单实例的话,我觉得它可以用map,如果它是多实例的话就要有内容分布式共享缓存这种单实例的用 map 其实它速度会更快一些,因为访问 Redis 是有一些网络开网络 o 开销的。然后 map 还有一个问题,就是说如果服务出现问题的话,它是一个医师的嗯。就相比于 Redis 它更容易丢失,但是因为它是一个一个时间段内的累计访问次数,所以我觉得这种丢失其实影响不是很大。
除了这些问题之外,用 map 还有别的问题吗?你觉得你要想一想爬虫一般有一个什么特点,对吧?比如说我们网站现在有 4, 000 多道题, 4, 000 多道题就是 4, 000 多的请求。爬取你网站的人他发力大一点,你的这个 map 会不会很快就怎么样。
很快就会成,很快就会 OM 这种。
map 你怎么释放?你怎么把这个数据淘汰掉?那这种情况下你可以换一个什么?
这种你就是可以用Redis,就是它本身就有内存淘的策略,它这也可以是过期时间,如果。
说是单机的情况下,你刚刚提到了用本地缓存是不是就可以?本地缓存除了用 map 之外,还有没有别的方式去实现呀?
还有就是咖啡这种,所以。
说其实你也可以换成咖啡这种自动能帮你做数据淘汰的,自动做过期的,可能就是统计一下这同一个IP,它在 1 分钟内或者几分钟内的一个请求数,然后如果请求数大于了某个值,你会对它做一个封禁,那你是不是这样想的?
也不一定是封禁,就是说如果他可以,那可以有那种升级机制,如果他就是介于正常访问,跟那种爬虫速率差不多的话。嗯,可以加入一下人工判断,看一下他那个,看一下这个用户大概注册了多久,这种让人工去介入,也可以说有一些告警,一种就是对内的告警,让运营人员知道有这么个异常情况。然后就是可以让他把那个号让他重新登录一次,验证一下他是不是一个真人。
那其实刚才你提到一个分级告警策略嘛?这也是我们实际上应用的一种策略,能想到这个点我觉得非常好,不是直接封禁,起码有一个判断的余地。那现在场景再细化一点,刚才也说了,用户他就是要爬取我们的题目,因为我们的这个面试压网站所有的题目是大家不登录都能看的,只不过你要看体检,就是大多数体检都是免费的,登录之后就能看。那有一些我们原创的体检,他是会员付费才能看的,那现在如果用户他不登录也能抓到这些题目,那我们怎么判断他是一个正常的用户,还是一个想要爬虫的用户呢?有没有什么想法?他可能就看得比较快,之前我们也在群里遇到过,这用户说了,我就是看得快,这相关题目,我在这刷刷刷,我点点试试,我看看我,我会不会被警告啊?按理来说我应该是会被警告的,没被警告可能是因为我是管理员啊。那你怎么样?用什么样的算法?怎么判断出来他是真的在探题还是一个爬虫的请求?怎么去区分?
可以在前端,就是前端或者客户端小程序去加一些。嗯,特殊的请求头或者其他标识,就是缺在后端去看他有没有这种请求头,判断他是不是说正常的通过页面或者小程序这种东西去访问的。这种暂时能想到,就是还是根据频率去判断。
这种情况下我们是不是要分析一下爬虫的特点啊?一般爬虫它不会来回地对着一道题目在那请求,对吧?对它爬虫它肯定是有一定的顺序性。
它可能是根据网络的网页的那种URL,就是上下链,上下上下页链接,或者说是它拿到一个题目列表,在题目列表里找 URL 去遍历这种,如果它访问的也是有一种,很强的那种词曲特征的话,也更有可能是一个爬虫,不是一个正常人去房。
对的,我们其实也应用到了这种策略,大家想想这样是不是能减少一定的误封?就如果他连来回对着一道题目看,其实哪怕他是爬虫也没什么影响,所以这也是涉及到了一个跟业务有关的知识点。还有一个问题就是你刚刚提到说我们可以让前端传一个特殊的请求头,那你觉得这个东西真的能防住爬虫吗?他有用吗?
用处不是很大,因为正常来讲我如果去,我如果专门去盘你的东西,我发现他请求里边有东西缺失的话,我可能就会去对比正常请求跟这种我爬虫花的请求的区别,通过这种对比去发现说我少了什么加什么进去才可以正常的爬到数据。
其实这个都不需要你去对比,最简单的方式你打开 F12 网络控制台,直接复制一个网络控制台中真实的请求,把它复制为Cul,然后所有的你当前能正常响应的请求的参数全都带上了,你觉得哪些没用你再删,哪些要动态替换你再替?这样其实又拿走了,所以你约定那种请求是没有任何作用的,你只能说一定程度上增加这个爬取成本,包括你给前端分配什么时间戳都是一样的啊。
就没有办法完全防止爬虫,任何爬虫都是这样的,因为用户他是真实的,你最笨的一种方式,你叫 10 个人来,每个人请求一夜,我截个图,我也能给你把题目抓走,我在这复制,我照样也能把你的题目复制走,你说要是一个菜鸟,我们题目少的话,你复制这比你写的爬虫程序的效率都要高了,所以说爬虫是防不胜防的,而且我们还可以用一些模拟器,用一些无头浏览器就是爬虫,你只能说是增加一些成本,或者通过你刚才提到的一些协议,或者一些限制你要登录等等等等的方式去威慑,去增加成本。
那其实我们防爬虫还有一种手段,我们就假设你的这个数据一定会被别人爬走,就是你要让爬虫的人觉得他写着爬虫程序爬你的意义不大。那这种情况下他就不会去盘,我们干脆就所有的题目直接不登录你就能看到,我们本来就没有做任何限制,你要到第几页?你想直接看 90 多页, OK 的,我们给你看的,你根本就不用盘,我们本来就支持按照标签筛选,按照题目筛选,按照什么题库筛选?你如果为了自己学习或者怎么样,你没有必要去用爬虫。
第二种方式就是你如果真的爬走了,我有办法追到你,我有办法知道你是谁。你只要登录了,有些东西是登录可以看的,你只要登录了,我们一定能知道你是谁,你都已经登录了,你都用微信登录了,而且你如果是会员的话,你都有微信支付了。如果你真的传播了一些不该传播的数据,我没有办法能够追踪到你。
就是这样,我们也只能做到这样了,因为爬虫本身就防不胜防的,大家还有没有什么其他的好的方案,或者我们候选人小伙伴还能想到其他的策略没有?其实这道题目答得还是可以的,基本上我们这边想到的一些点,这位候选人同学也都想到了,只不过背后我们怎么实现这种限流,这种流量的统计我们可能除了本地缓存之外,还可以用一些其他的操作,比如说我们统计数量可以用一些更高级的数据结构,不一定只用campaign,或者不一定只用map,再具体就涉及到这个一些隐私了,但是我基本上把核心的策略给大家都聊完了,其实很多的网站你要爬它没有任何成本的,但是我不建议大家轻易地去爬,不建议大家去爬,爬虫这个事情还是有风险的,你自己学习一下的话,你随便请求两下,你别给人家网站造成压力了,你一旦给人家网站造成压力了,这个东西也说得严重一点,就是有破坏计算机系统的这种嫌疑了。
来源:百收网