⭐ 推荐:社区规则条款 V1.0

用 Python 分析网站蜘蛛日志的完整方法。

juming
juming 初级会员超兽战士
发布于 2026-10-11 01:09 ·1 浏览 ·0 回复

学完这篇你能用 Python 读取网站访问日志,自动识别搜索引擎蜘蛛,统计它们的抓取频率、访问页面和错误情况,并生成一份可下载的 CSV 分析报告。

第一步:准备日志文件,得到可分析的原始数据

这一步要拿到网站真实访问日志,并确认它包含请求时间、IP、URL、状态码和 User-Agent。如果你用宝塔面板 Linux版 7.9,进入左侧菜单「网站」,点击目标站点名称,进入「日志」,在「访问日志 access.log」右侧点击「下载」;如果你用 Nginx,日志通常在 /var/log/nginx/access.log;如果你用 Apache,日志通常在 /var/log/apache2/access.log 或 /etc/httpd/logs/access_log。把文件下载到本地,例如命名为 access.log。

注意:日志格式可能是 combined 格式,也可能是自定义格式。如果缺少 User-Agent,就无法准确识别蜘蛛。

第二步:安装 Python 依赖,得到能解析日志的运行环境

这一步要安装 pandas 和 regex,用于处理表格和正则匹配。打开终端或命令行,进入你存放日志的目录,执行:

python -m pip install --upgrade pip
python -m pip install pandas regex

执行完成后,输入下面命令确认版本:

python -c "import pandas; print(pandas.__version__)"

如果能看到版本号,说明环境可用。

第三步:用 Python 读取日志,得到结构化表格

这一步要把文本日志转换成可统计的表格。新建文件 analyze_spider.py,粘贴以下代码:

import re
import pandas as pd

LOG_FILE = "access.log"
OUT_FILE = "spider_report.csv"

pattern = re.compile(
    r'(?P<ip>\S+) - - \[(?P<time>[^\]]+)\] '
    r'"(?P<method>\S+) (?P<url>\S+) (?P<proto>\S+)" '
    r'(?P<status>\d+) (?P<size>\S+) '
    r'"(?P<referer>[^"]*)" "(?P<user_agent>[^"]*)"'
)

rows = []
with open(LOG_FILE, "r", encoding="utf-8", errors="ignore") as f:
    for line in f:
        m = pattern.search(line)
        if m:
            rows.append(m.groupdict())

df = pd.DataFrame(rows)
df["time"] = pd.to_datetime(df["time"], format="%d/%b/%Y:%H:%M:%S %z", errors="coerce")
df["status"] = pd.to_numeric(df["status"], errors="coerce")

运行后,你会得到变量 df,里面每行是一条请求记录,包含 ip、time、url、status、user_agent 等字段。

注意:如果你的 Nginx 日志不是默认 combined 格式,需要修改 pattern。可以先打开 access.log 看前 3 行,确认字段顺序。

第四步:识别蜘蛛 User-Agent,得到蜘蛛访问记录

这一步要从 user_agent 中筛出搜索引擎蜘蛛。继续在同一脚本中加入:

spider_keywords = [
    "Googlebot",
    "Bingbot",
    "Baiduspider",
    "YandexBot",
    "Sogou web spider",
    "360Spider",
    "Bytespider",
    "Slurp",
    "DuckDuckBot"
]

df["spider"] = "普通用户"
for keyword in spider_keywords:
    mask = df["user_agent"].str.contains(keyword, case=False, na=False)
    df.loc[mask, "spider"] = keyword

spider_df = df[df["spider"] != "普通用户"].copy()

执行完成后,spider_df 就是所有蜘蛛访问数据。你可以先打印前 10 行确认:

print(spider_df.head(10))

注意:有些蜘蛛会伪装成普通浏览器 UA。单靠关键词识别只能作为日志分析,不能当作严格反爬判断。

第五步:统计蜘蛛行为,得到关键指标

这一步要计算每个蜘蛛的抓取次数、访问页面、状态码分布和访问时间段。继续加入:

summary = (
    spider_df.groupby("spider")
    .agg(
        请求次数=("url", "size"),
        访问IP数=("ip", "nunique"),
        访问页面数=("url", "nunique"),
        最早时间=("time", "min"),
        最晚时间=("time", "max")
    )
    .reset_index()
)

status = (
    spider_df.groupby(["spider", "status"])
    .size()
    .reset_index(name="次数")
    .sort_values(["spider", "次数"], ascending=[True, False])
)

top_pages = (
    spider_df.groupby(["spider", "url"])
    .size()
    .reset_index(name="次数")
    .sort_values("次数", ascending=False)
    .head(100)
)

hourly = (
    spider_df.assign(hour=spider_df["time"].dt.hour)
    .groupby(["spider", "hour"])
    .size()
    .reset_index(name="次数")
    .sort_values(["spider", "hour"])
)

运行后,你会得到四个统计表:summary 是总览,status 是状态码分布,top_pages 是热门页面,hourly 是按小时抓取分布。

第六步:导出 CSV 报告,得到可交给运营或 SEO 的文件

这一步要把结果保存成表格。继续加入:

with pd.ExcelWriter(OUT_FILE, engine="openpyxl") as writer:
    summary.to_excel(writer, sheet_name="总览", index=False)
    status.to_excel(writer, sheet_name="状态码", index=False)
    top_pages.to_excel(writer, sheet_name="热门页面", index=False)
    hourly.to_excel(writer, sheet_name="按小时", index=False)

如果你没有安装 openpyxl,先执行:

python -m pip install openpyxl

然后运行脚本:

python analyze_spider.py

完成后,当前目录会生成 spider_report.xlsx。你可以打开它,重点看三个问题:哪个蜘蛛请求最多、哪些页面返回 404 或 500、抓取是否集中在某几个时段。

注意:如果日志很大,比如超过 1GB,建议先用 grep 或 awk 按天拆分,再逐文件分析,避免一次性读入内存。

小结

  • 分析蜘蛛日志的核心字段是:时间、URL、状态码、User-Agent。
  • Python 用正则读取日志,用 pandas 做统计,效率比人工看日志高很多。
  • 识别蜘蛛主要靠 User-Agent 关键词,但要接受误判和伪装。
  • 最有价值的指标是:请求次数、错误状态码、热门页面、按小时分布。
  • 导出成 Excel 或 CSV 后,才能继续给 SEO、运维或开发排查问题。
版权声明:本文来自 GJ站长论坛《用 Python 分析网站蜘蛛日志的完整方法。》
原文链接:https://www.gj0.com/thread-1611.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~