如何处理Bot的页面浏览量统计?附已实现的用户统计逻辑
如何在现有浏览量统计逻辑中过滤Bot访问
看起来你已经把正常用户的浏览量去重逻辑搭得很扎实了!针对Bot的统计过滤问题,我可以给你几个实用的优化方向,帮你精准排除无效的Bot访问:
1. 从HTTP请求头入手做基础Bot识别
这是成本最低、见效最快的方式,绝大多数Bot都会留下明显的特征:
- 检查User-Agent字段:维护一个常见Bot的关键词列表(比如Googlebot、Bingbot、Slurp、DuckDuckBot这些),请求的User-Agent里匹配到这些关键词,直接跳过统计。不过要注意,有些恶意Bot会伪造正常用户的User-Agent,所以这一步只能过滤掉大部分“老实”的Bot。
- 校验Referer字段:正常用户的请求一般来自站内跳转或者可信的外部链接,很多Bot的Referer是空的,或者来自莫名其妙的域名,对这类请求可以做额外的标记和过滤。
- 正确获取真实IP:如果你的服务在反向代理后面,一定要通过
X-Forwarded-For这类头部拿到用户的真实IP,不然Bot换个代理IP就能绕过你的IP限制逻辑。
2. 基于行为模式过滤“聪明”的Bot
有些Bot会伪装成正常用户的请求头,这时候就得看行为逻辑了:
- 访问频率检测:正常用户不会在1分钟内刷十几甚至几十次同一个页面。你可以在Redis里给每个IP/用户加个请求计数器,比如1分钟内请求次数超过10次,就判定为Bot,跳过统计。
- 访问轨迹验证:正常用户一般是从列表页、首页跳转进详情页的,Bot可能直接批量请求详情页,没有前置页面的访问记录。你可以用Redis或者Session记录用户的访问路径,对无轨迹的异常请求直接过滤。
3. 和你现有Redis逻辑的整合方式
把Bot检测放在你现有去重逻辑的前面就行,这里给你一段伪代码参考,顺便优化下你用SETEX的小问题:
def should_count_view(item_id, user_info, request): # 先做Bot检测 if is_bot(request): return False # 再执行原有的去重逻辑 key = f"{item_id}:{user_info['user_id']}" if user_info['authenticated'] else f"{item_id}:{user_info['ip']}" # 用SETNX+EXPIRE替代SETEX,避免竞态问题 if redis_client.setnx(key, 1): redis_client.expire(key, 200) return True return False def is_bot(request): # 检查User-Agent user_agent = request.headers.get('User-Agent', '').lower() bot_keywords = ['googlebot', 'bingbot', 'slurp', 'duckduckbot', 'yahoo! slurp'] for keyword in bot_keywords: if keyword in user_agent: return True # 检查短时间内的请求频率 real_ip = get_real_ip(request) count_key = f"req_count:{real_ip}" current_count = redis_client.incr(count_key) if current_count == 1: redis_client.expire(count_key, 60) # 1分钟过期 if current_count > 10: return True return False
小提醒:用
SETNX+EXPIRE代替SETEX是为了避免竞态问题——如果在执行SETEX的过程中Redis突然挂了,键会永久存在,导致这个用户/IP之后的浏览都无法被统计,SETNX+EXPIRE是更安全的写法。
4. 进阶方案(适合流量大的平台)
如果上面的方法还不够,你可以试试这些更复杂的方案:
- CAPTCHA验证:对疑似Bot的请求弹出验证码,验证通过再统计浏览量。不过这个会影响用户体验,建议只给高风险请求用。
- 机器学习模型:收集正常用户和Bot的行为数据(比如请求间隔、页面停留时间、点击位置等),训练一个分类模型来识别Bot。这个需要一定的工程资源,但准确率会很高。
总的来说,先从请求头和简单的行为检测入手,快速过滤大部分Bot,再根据你的业务流量和需求逐步升级方案,重点是平衡过滤的准确性和用户体验,别把正常用户误判成Bot了。
内容的提问来源于stack exchange,提问作者anvd
相关产品推荐
相关产品推荐

