关键在于结合UA规则与行为特征识别异常流量:先用结构化规则筛掉明确爬虫,再通过Referer、访问频次、资源占比等行为信号二次过滤,最后按页面路径和Cookie精准统计PV/UV,并验证移动端占比、跳转链路、PV/UV比等指标是否合理。

要精准过滤爬虫流量、只统计真实用户访问,关键不是“删掉所有非浏览器UA”,而是识别并排除伪装成用户、但行为异常的流量,同时保留真实移动端和桌面端用户请求。真实用户有明确交互特征(如Referer链路、JS执行痕迹、会话连续性),而爬虫往往暴露在UA、路径、状态码、时间分布等多个维度。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
一、先筛掉明确的搜索引擎和工具型爬虫
这不是靠关键词模糊匹配,而是用结构化规则排除已知合法爬虫和高频恶意工具: - 白名单放行主流蜘蛛:`Baiduspider`、`Googlebot`、`bingbot`、`YandexBot`、`Sogou web spider`、`DuckDuckBot` - 黑名单拦截典型非用户工具:`python-requests`、`curl/7.`、`go-http-client`、`masscan`、`sqlmap`、`nikto`、`ahrefsbot.*SEO`、`semrushbot.*site_audit` - 命令示例(提取近24小时非白名单且非主流浏览器的UA): ```bash awk -F'"' '$6 !~ /Baiduspider|Googlebot|bingbot|YandexBot|Sogou|DuckDuckBot/ && $6 !~ /Chrome|Firefox|Safari|Edge|Opera|Mobile Safari/ {print $6}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -15 ```二、结合行为特征二次过滤,避免误伤真实用户
仅看UA容易漏判(比如微信内置浏览器UA不含“Mobile”)或误杀(比如开发者用curl调试接口)。需叠加以下信号: - **Referer为空 + 路径敏感**:`Referer "-"` 且 `Request_URI ~ /wp-login\.php|/admin/|/api/v1/user\?id=` → 极大概率是扫描器 - **高频无规律访问**:同一IP在1分钟内请求 >50次,且URL无明显会话路径(如不包含 `/login` → `/dashboard` 链路) - **静态资源占比畸高**:单次会话中 `.js`、`.css`、`.png` 请求占比超85%,且无HTML主页面请求 → 可能是资源采集脚本 - **User-Agent含桌面标识但实际为移动设备**:如 `Android.*;.*Build/` 但 UA 同时含 `Windows NT` 或 `Intel Mac OS X` → 伪造三、定义“真实用户”的最小行为单元
PV和UV统计若只依赖IP或UA,误差极大。建议按以下逻辑聚合: - **有效PV**:满足 - 方法为 `GET` - 状态码为 `2xx`(排除404/500等无效页) - URL 匹配页面路径规则(如 `/article/\d+`、`/product/[^?]+\.html`、`/user/profile`) - 不在静态资源后缀黑名单中(`.js`, `.css`, `.jpg`, `.woff2`, `.svg` 等) - **有效UV**:优先使用日志中记录的业务Cookie字段(如 `%{JSESSIONID}i` 或 `%{uid}i`),若无则 fallback 到 `remote_addr` + `User-Agent` 的组合哈希(缓解NAT问题)四、验证清洗效果是否合理
跑完过滤后,检查几个关键比例是否符合业务常识: - 移动端真实用户占比应在 60%–85%(视行业而定),若低于 40%,可能过度过滤了微信、QQ、PWA等合法移动入口 - 首页 → 列表页 → 详情页的跳转链路应占总有效PV的 25% 以上;若低于 10%,说明大量“直接访问详情页”的流量未被识别为真实用户(可能是分享链接,需保留) - 每个UV平均PV应在 3–12 之间;若 20,可能漏掉了爬虫不复杂但容易忽略

















