当前位置: 首页> 健康> 美食 > 如何实现简单的ip反爬

如何实现简单的ip反爬

时间:2025/8/26 22:17:33来源:https://blog.csdn.net/weixin_42304193/article/details/141003221 浏览次数:0次

在之前的博客中,我有分享过如何进行ip池的代理,下面分享反爬技术之一的ip反爬

用nodejs的koa简单演示一下

import Koa from "koa"
import Router from "koa-router"
const app: Koa = new Koa();const router: Router = new Router();// 假设这里是ip请求的数据池
interface IpDataType {startTiem: number, // 第一次访问的时间requestTimes: number, // 10分钟之内访问的次数
}let ipMap: { [key: string]: IpDataType } = {};router.get('/testip', (ctx: Koa.Context, next) => {// 获取iplet ip: string = ctx.request.ip;let now: number = new Date().getTime();// 判断ip有没有请求过if (!ipMap[ip]) {ipMap[ip] = {startTiem: now,requestTimes: 1,}} else {ipMap[ip].requestTimes++;}// 判断10分钟之内有没有超过请求100次,如果有就直接屏蔽if (now - ipMap[ip].startTiem <= 10 * 60 * 1000 && ipMap[ip].requestTimes >= 100) {ctx.body = "ip已超过请求次数"return;}// 保底逻辑,如果距离上次请求的时间超过10分钟则重置数据,以防错封if (now - ipMap[ip].requestTimes <= 10 * 60) {ipMap[ip] = {startTiem: now,requestTimes: 1,}}ctx.body = "成功"
});app.use(router.routes())
app.listen(3000, "0.0.0.0")

ip数据池

// 假设这里是ip请求的数据池
interface IpDataType {startTiem: number, // 第一次访问的时间requestTimes: number, // 10分钟之内访问的次数
}let ipMap: { [key: string]: IpDataType } = {};

这个是用来存储已经请求过的ip数据,用来做后续的判断
这里是简单用变量来代表ip请求数据池,一般大项目的ip请求数据池都是放在redis或者mysql中的

反爬原理

// 获取iplet ip: string = ctx.request.ip;let now: number = new Date().getTime();// 判断ip有没有请求过if (!ipMap[ip]) {ipMap[ip] = {startTiem: now,requestTimes: 1,}} else {ipMap[ip].requestTimes++;}// 判断10分钟之内有没有超过请求100次,如果有就直接屏蔽if (now - ipMap[ip].startTiem <= 10 * 60 * 1000 && ipMap[ip].requestTimes >= 100) {ctx.body = "ip已超过请求次数"return;}

这里的反爬原理是,一定时间内,访问次数超过一定数量之后就进行禁止请求了,因为很多爬虫程序都是并发爬取的,而正常用户是达不到这么高的请求数量的,所以这个是策略之一

python演示爬虫过程

def requestIp():for i in range(1000):try:data = requests.get("http://192.168.3.5:3000/testip");print(data.text)except Exception as e:print("请求报错:" + str(e));pass;if __name__ == "__main__":requestIp();

这里就是短时间内请求很多次的爬虫程序,运行过程中可以发现后面的请求都无法得到一个正常的数据了

其他反爬手段

1、请求数据加密,根据一定的规则将参数加密,然后加密字符串在放在请求头中,这样的方式能对一些初级爬虫工程师有一定作用,对于会js逆向的工程师来说是没用的
2、账号反爬,对于一些接口是要登录才能请求的,这个时候针对账号短时间内请求次数的判断是不是爬虫,这个是我用过比较好用的方式了

关键字:如何实现简单的ip反爬

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: