要防止爬虫爬你的网站,就必须区分出爬虫和正常用户的行为区别。单单就单次请求你是无法区分出来的,因为前端的所有用户行为,爬虫都可以模拟。所以比较通用的做法是统计单个IP在一定时间范围内的请求数量,超过了一定的量就认为是爬虫,把它阻断掉。也许你自己有压测程序,把他们加入白名单就可以了。当然,这样并不能就真的可以阻断爬虫了,因为道高一尺魔高一丈呀,就我知道的一个爬虫他们准备了200台手机和手机卡,同一时间100台同时爬,因为用的手机卡,你看到的IP基本都是不一样的,爬2分钟断网,另100台爬,IP就又变了,断网的手机卡再联网IP也基本会变,所以基本就是达到了一个IP爬两分钟就自动换了一个IP,他们也会根据你统计的时间限制来调整他们的时间,所以统计IP这一招再这个方法中就不行了。对于不需要登录的页面什么cookie, agent, jwt 等等都是可以对付的,所以就必须加入其他因素,比如同一个IP在最近的N个独立页面的请求平均间隔时间,如果都是小于1秒就可以认定不是自然人在请求,因为自然人速度没这么快。再比如同一个IP在最近的N个请求里面不存在合理的请求顺序,因为爬虫一般是拿了一个页面以后按顺序再请求里面的链接,而自然人不会这样等等的规则,这些规则看上去就比较复杂了,需要根据自己的业务去指定,然后异步的去判断,防止影响正常的请求速度。
这里只提供一种思路,希望对你有帮助。