AI分析网站访问日志,自动识别爬虫来源

网站访问日志里混着真实用户和大量爬虫,人工翻看效率很低。
本文教你用AI自动分析访问日志,识别爬虫来源并生成可读报告,适合零基础运维和站长,照着做就能得到一份按爬虫类型、频率、来源IP分类的清单。

先确认日志格式和采集范围

Nginx默认的访问日志格式通常包含IP、时间、请求方法、URL、状态码和User-Agent。
先用命令看一眼日志长什么样:

tail -n 5 /var/log/nginx/access.log

如果日志被切割过,路径可能是/var/log/nginx/access.log-20250101
确认日志里有User-Agent字段,这是识别爬虫的关键。
没有的话,需要在Nginx配置里加上$http_user_agent,然后重载Nginx:

nginx -t && systemctl reload nginx

准备一个工作目录,把要分析的日志复制进去,避免直接操作原日志:

mkdir -p /opt/log-ai && cp /var/log/nginx/access.log /opt/log-ai/

清洗日志并提取关键字段

AI接口不适合直接吞几百MB原始日志。
先用awk提取IP、时间、URL和User-Agent,输出成CSV或JSON行格式。
下面这条命令提取最近1000行并生成JSON行文件:

tail -n 1000 /opt/log-ai/access.log | awk '{print "{\"ip\":\""$1"\",\"time\":\""$4$5"\",\"url\":\""$7"\",\"ua\":\""$12"\"}"}' > /opt/log-ai/cleaned.jsonl

检查生成的文件是否正常:

head -n 3 /opt/log-ai/cleaned.jsonl

关键点: 如果User-Agent里包含空格,$12可能截断,建议改用$http_user_agent对应的完整字段,或者用Python脚本按正则提取,更稳妥。

调用AI接口做爬虫分类

这里以通用大模型API为例,其他厂商接口思路类似。
先安装Python依赖:

pip install openai

写一个脚本analyze_log.py,读取清洗后的日志,分批发送给AI,让它判断每条记录是正常用户、搜索引擎爬虫、恶意爬虫还是未知。

import json, openai

openai.api_key = "你的API_KEY"
openai.base_url = "https://api.openai.com/v1"  # 按实际服务商修改

with open("/opt/log-ai/cleaned.jsonl") as f:
    lines = f.readlines()[:50]  # 先测试50条

prompt = """你是一个日志分析助手。对下面每条日志,判断类型:
- 正常用户
- 搜索引擎爬虫(Googlebot/Baiduspider等)
- 恶意爬虫(扫描器、采集器)
- 未知
只返回JSON数组,每项包含ip、type、reason。
日志:
""" + "".join(lines)

resp = openai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": prompt}],
    temperature=0
)
print(resp.choices[0].message.content)

运行脚本:

python3 /opt/log-ai/analyze_log.py

如果返回的是JSON数组,说明流程通了。注意: 不要一次发送全部日志,按50到100条分批,避免超token限制。

把AI结果落成可读报告

在脚本里把AI返回的JSON写入文件,并统计各类型数量:

import json
result = json.loads(resp.choices[0].message.content)
with open("/opt/log-ai/report.json", "w") as f:
    json.dump(result, f, ensure_ascii=False, indent=2)

from collections import Counter
c = Counter(item["type"] for item in result)
print(c)

输出类似:Counter({'正常用户': 30, '搜索引擎爬虫': 12, '恶意爬虫': 8})
这时你已经得到了一份可核验的爬虫来源统计。

常见报错和避坑提醒

  • API返回超时或429:降低每批条数,或加time.sleep(2)限速。
  • User-Agent字段错位:用Python正则重新解析,不要硬编码$12
  • AI误判:对标记为恶意爬虫的IP,人工抽查几条,确认不是误伤。
  • 日志含敏感信息:清洗时去掉Cookie、Authorization头,避免泄露。
  • 成本控制:先抽样分析,确认效果后再跑全量,不要一上来就分析整个月日志。

验证识别效果是否可用

拿一份已知包含Googlebot和扫描器的日志做测试,看AI是否能正确分类。
检查报告里“搜索引擎爬虫”的IP是否与官方IP段匹配,可以用whois或在线反查工具核对。
如果准确率能接受,再把脚本接入定时任务:

crontab -e
# 每天凌晨3点分析前一天的日志
0 3 * * * /usr/bin/python3 /opt/log-ai/analyze_log.py >> /opt/log-ai/cron.log 2>&1

运行几天后,对比报告中的爬虫趋势,如果恶意爬虫IP持续增加,可以考虑在Nginx层加deny规则或启用WAF。

几个容易卡住的疑问

日志量太大,AI接口费用会不会很高?
先抽样分析,比如每天只分析访问量最高的1000条,或只分析返回404和403的请求,成本可控。

没有编程基础能操作吗?
可以。把本文命令复制到服务器执行,脚本里的API_KEY换成自己的即可。遇到报错优先检查日志路径和字段位置。

AI识别结果可以直接用于封IP吗?
不建议直接自动封禁。先人工确认,再写Nginx规则,避免误封正常用户或搜索引擎爬虫。

除了Nginx日志,其他日志能用吗?
可以。Apache、Caddy或CDN回源日志,只要包含IP和User-Agent,清洗后同样能分析。

如果你正在处理网站访问日志里的爬虫识别问题,建议先按本文步骤跑通一条日志,再逐步扩大范围;
遇到异常时优先回看避坑部分。

分享到:
上一篇
AI生成Nginx伪静态规则,适配各类CMS程序
下一篇
AI辅助编写采集规则,CMS资讯站内容抓取
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意