2023-07-08 14:12:03
使用Python脚本为站群实现蜘蛛统计和创建独立分析页面的步骤如下:
一、蜘蛛访问统计脚本实现编写日志分析脚本创建spider_stats.py文件,核心功能包括:
日志读取与解析
import sysimport pandas as pdlogfile = sys.argv[1] if len(sys.argv) > 1 else "access.log"try: with open(logfile, 'r', encoding='utf-8') as f: log_data = f.readlines()except FileNotFoundError: print(f"Error: Log file '{logfile}' not found.") sys.exit(1)支持通过命令行参数指定日志文件路径(默认读取access.log)。
添加utf-8编码处理避免乱码。
日志字段提取根据日志格式调整字段索引(示例为Nginx/Apache通用格式):
log_entries = []for line in log_data: try: parts = line.split() if len(parts) > 10: log_entries.append({ "ip": parts[0], "date": parts[3][1:], # 提取日期部分(如"[10/Oct/2023]"→"10/Oct/2023") "request": parts[6], "status": parts[8], "agent": " ".join(parts[11:]) # 合并User-Agent字段 }) except IndexError: print(f"Warning: Skipping malformed log line: {line.strip()}")蜘蛛请求筛选定义常见蜘蛛User-Agent列表并匹配:
spider_agents = [ "googlebot", "bingbot", "baiduspider", "yandexbot", "sogou" # 可扩展其他蜘蛛]df = pd.DataFrame(log_entries)df['spider'] = df['agent'].str.extract(f"({'|'.join(spider_agents)})", expand=False)spider_df = df[df['spider'].notna()]数据汇总与输出按蜘蛛类型和日期分组统计访问量:
spider_summary = spider_df.groupby(['spider', 'date']).size().reset_index(name='count')print(spider_summary)spider_summary.to_csv('spider_stats.csv', index=False) # 保存为CSV运行脚本
上传脚本至服务器日志目录(如/var/log/nginx/)。
执行命令:python3 spider_stats.py access.log
输出结果示例: spider date count0 baiduspider 10/Oct/2023 1521 googlebot 10/Oct/2023 87
创建Flask应用编写app.py读取CSV并渲染数据:
from flask import Flask, render_templateimport pandas as pdapp = Flask(__name__)@app.route('/')def index(): try: df = pd.read_csv('spider_stats.csv') data = df.to_dict(orient='records') # 转换为字典列表供前端使用 return render_template('index.html', data=data) except FileNotFoundError: return "Error: spider_stats.csv not found."if __name__ == '__main__': app.run(debug=True) # 开发环境使用debug模式设计前端模板(index.html)使用Chart.js可视化数据(示例代码片段):
<!DOCTYPE html><html><head> <title>蜘蛛访问统计</title> <script src="运行分析页面
确保spider_stats.csv与app.py在同一目录。
启动Flask应用:python3 app.py
访问
日志格式适配
根据实际日志格式调整spider_stats.py中的字段索引(如日期、User-Agent位置)。
复杂日志格式可使用正则表达式或logparser等库解析。
性能优化
大日志文件建议分块读取或使用生成器处理。
定期清理历史数据或使用数据库(如SQLite)替代CSV存储。
安全增强
生产环境关闭Flask的debug=True。
添加身份验证(如Flask-Login)保护分析页面。
扩展功能
增加蜘蛛访问频率限制检测。
集成邮件/Slack告警异常抓取行为。
通过上述步骤,可实现站群蜘蛛访问的自动化统计与可视化监控,为SEO优化提供数据支持。