# 爬虫电商数据分析和可视化 **Repository Path**: aurora_4_0/crawler-data-analysis ## Basic Information - **Project Name**: 爬虫电商数据分析和可视化 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-18 - **Last Updated**: 2026-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于爬虫的电商商品数据分析和可视化系统 ## 项目概述 本系统是一个面向电商平台的商品数据采集、分析与可视化平台,支持从淘宝、京东、拼多多三大主流电商平台自动化采集商品数据,并提供多维度数据分析、情感分析和交互式可视化功能。系统采用前后端分离架构,后端基于 FastAPI 框架,前端基于 Vue 3 框架,具备完整的用户认证、任务管理和实时通信能力。 ## 技术栈 ### 后端技术 | 技术 | 版本 | 用途 | |------|------|------| | Python | 3.10+ | 后端开发语言 | | FastAPI | 0.109.0 | Web API 框架 | | SQLAlchemy | 2.0.25 | ORM 数据库操作 | | SQLite | 3 | 轻量级关系型数据库 | | Selenium | 4.15.2 | 浏览器自动化爬虫 | | BeautifulSoup4 | 4.12.2 | HTML 解析 | | SnowNLP | 0.12.3 | 中文情感分析 | | jieba | 0.42.1 | 中文分词与关键词提取 | | Pandas | 2.1.3 | 数据处理与导出 | | WebSocket | - | 实时任务进度推送 | ### 前端技术 | 技术 | 版本 | 用途 | |------|------|------| | Vue 3 | 3.4+ | 前端框架(Composition API) | | TypeScript | 5.3+ | 类型安全的 JavaScript | | Vite | 5.0+ | 前端构建工具 | | Pinia | 2.1+ | 状态管理 | | Element Plus | 2.4+ | UI 组件库 | | ECharts | 5.4+ | 数据可视化图表 | | Axios | 1.6+ | HTTP 请求客户端 | | Vue Router | 4.2+ | 前端路由管理 | ## 系统架构 ``` ┌─────────────────────────────────────────────────────┐ │ 前端 (Vue 3) │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────────┐ │ │ │ 仪表盘│ │任务管理│ │商品数据│ │分析报表│ │ 评论分析 │ │ │ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ └────┬─────┘ │ │ │ │ │ │ │ │ │ ┌──┴────────┴────────┴────────┴───────────┴──────┐ │ │ │ Axios HTTP / WebSocket │ │ │ └────────────────────┬───────────────────────────┘ │ └───────────────────────┼──────────────────────────────┘ │ HTTP/WS ┌───────────────────────┼──────────────────────────────┐ │ 后端 (FastAPI) │ │ ┌────────────────────┴───────────────────────────┐ │ │ │ API 路由层 (Router) │ │ │ │ /auth /tasks /products /analytics │ │ │ │ /visualizations /comments /settings │ │ │ └────────────────────┬───────────────────────────┘ │ │ ┌────────────────────┴───────────────────────────┐ │ │ │ 业务逻辑层 (Service) │ │ │ │ AuthService TaskService ProductService │ │ │ │ CommentService CrawlerService │ │ │ └────────────────────┬───────────────────────────┘ │ │ ┌────────────────────┴───────────────────────────┐ │ │ │ 数据访问层 (ORM / Database) │ │ │ │ SQLAlchemy ORM + SQLite │ │ │ └────────────────────────────────────────────────┘ │ │ ┌────────────────────────────────────────────────┐ │ │ │ 爬虫引擎 (Selenium + BS4) │ │ │ └────────────────────────────────────────────────┘ │ │ ┌────────────────────────────────────────────────┐ │ │ │ WebSocket 实时通信 (进度推送) │ │ │ └────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────┘ ``` ## 数据库设计 ### ER 关系图 ``` Users (用户表) ├── 1:N → Tasks (任务表) Platforms (平台表) ├── 1:N → Tasks ├── 1:N → Products (商品表) Tasks (任务表) ├── 1:N → Products ├── 1:N → ActivityLogs (活动日志表) Keywords (关键词表) ├── 1:N → Products Products (商品表) ├── 1:N → Comments (评论表) Settings (系统设置表) - 独立表 ``` ### 核心数据表 | 表名 | 说明 | 主要字段 | |------|------|---------| | users | 用户表 | id, username, password_hash, email, role, is_active | | platforms | 电商平台表 | id, code, name, base_url, search_url, is_active | | tasks | 爬虫任务表 | id, task_id, name, platform_id, config(JSON), status, progress | | keywords | 搜索关键词表 | id, keyword, category, product_count | | products | 商品数据表 | id, title, price, sales_volume, shop, location, platform_id, keyword_id | | comments | 评论数据表 | id, product_id, content, sentiment_score, sentiment_label, keywords(JSON) | | settings | 系统设置表 | id, key, value, category | | activity_logs | 活动日志表 | id, task_id, level, message, metadata(JSON) | ## 功能模块详细说明 ### 1. 用户认证模块 - **用户注册**:支持用户名、密码、邮箱注册,包含表单验证(用户名3-20字符、密码6-20字符) - **用户登录**:基于 Session 的会话认证,服务端通过 Cookie 维持登录状态 - **权限控制**:区分 admin(管理员)和 user(普通用户)角色,管理员可管理所有任务和数据 - **密码修改**:支持验证旧密码后修改新密码 - **会话管理**:24小时会话过期,自动重定向到登录页 ### 2. 爬虫任务管理模块 - **任务创建**:多步骤向导式表单,支持配置平台、关键词、爬取页数、线程数、排序方式 - **任务执行**:后台异步执行爬虫任务,支持 Selenium 浏览器自动化 - **实时进度**:通过 WebSocket 实时推送爬取进度(当前/总计、已采集数量) - **任务控制**:支持暂停(pause)、恢复(resume)、重启(restart)操作 - **任务筛选**:按状态(pending/running/completed/failed/paused)、平台、关键词筛选 - **任务日志**:记录每个任务的活动日志,支持按级别筛选 ### 3. 商品数据管理模块 - **数据展示**:分页表格展示商品列表,支持排序(价格、销量、时间) - **多维筛选**:按关键词、平台、价格范围、销量、地区、店铺筛选 - **全文搜索**:支持商品标题模糊搜索 - **数据导出**:支持导出为 JSON 和 Excel(.xlsx)格式 - **商品详情**:查看商品完整信息,包括规格、评论等 - **CRUD 操作**:管理员可创建、编辑、删除商品数据 ### 4. 数据分析模块 - **概览统计卡片**:总商品数、总评论数、平均价格、情感指数 - **分类分析**:按关键词分类统计商品数量、平均价格、总销量 - **销售趋势**:按时间维度展示销售量变化趋势(折线图) - **Top 排行**:销量 Top N、价格 Top N 商品排行榜 - **价格分析**:价格区间分布、均值/最值统计 ### 5. 评论情感分析模块 - **情感分布**:饼图展示正面/中性/负面评论占比 - **情感趋势**:按时间维度展示情感变化趋势(面积图) - **关键词分析**:评论关键词提取与可视化(树图 + 柱状图) - **统计指标**:总评论数、各类情感数量、平均情感指数、含图/追评统计 - **评论列表**:分页展示评论内容,支持按情感类型筛选 - **批量分析**:一键对未分析评论进行 SnowNLP 情感打分 - **技术实现**:基于 SnowNLP 进行中文情感分析,jieba 进行关键词提取 ### 6. 数据可视化模块 系统提供 8 种交互式图表,全部基于 ECharts 实现: | 图表类型 | 名称 | 说明 | |---------|------|------| | 饼图 | 平台份额分析 | 各电商平台商品数量占比 | | 柱状图 | 价格分布 | 商品价格区间分布直方图 | | 面积图 | 价格趋势 | 平均/最高/最低价格随时间变化 | | 横向柱状图 | 店铺排行 | 按商品数量排名的 Top 店铺 | | 分组柱状图 | 平台销量对比 | 各平台销售总量对比 | | 柱状图 | 地区分布 | 商品发货地分布统计 | | 散点图 | 价格-销量关系 | 按平台分组的价格与销量散点分析 | | 环形图 | 关键词分析 | 按关键词统计的商品数量分布 | ### 7. 系统设置模块 - **个人信息**:查看用户名、邮箱、角色、注册时间 - **密码修改**:旧密码验证 + 新密码确认 - **爬虫配置**:最大页数、请求延迟、超时时间、重试次数、无头模式开关 - **导出配置**:默认格式(JSON/Excel)、是否包含图片/评论 - **设置重置**:一键恢复爬虫设置为默认值 ### 8. 仪表盘模块 - **指标卡片**:总商品数、总任务数、总评论数、关键词数、运行中爬虫、近期爬取 - **数据趋势**:商品/任务/评论的每日新增趋势(30天) - **平台分布**:商品和任务的平台分布饼图 - **价格分布**:价格区间分布柱状图 - **热门商品**:按销量和价格排序的 Top 商品列表 - **最近任务**:运行中、已完成、失败任务列表 ## API 接口设计 ### 认证接口 /api/auth | 方法 | 路径 | 说明 | |------|------|------| | POST | /login | 用户登录 | | POST | /logout | 用户登出 | | POST | /register | 用户注册 | | GET | /me | 获取当前用户信息 | | PUT | /me | 更新用户信息 | | POST | /change-password | 修改密码 | | GET | /verify | 验证会话状态 | | GET | /check-username | 检查用户名可用性 | | GET | /check-email | 检查邮箱可用性 | ### 任务接口 /api/tasks | 方法 | 路径 | 说明 | |------|------|------| | GET | / | 获取任务列表(分页、筛选) | | POST | / | 创建新任务 | | GET | /{task_id} | 获取任务详情 | | PUT | /{task_id} | 更新任务 | | DELETE | /{task_id} | 删除任务 | | POST | /{task_id}/execute | 执行任务 | | POST | /{task_id}/pause | 暂停任务 | | POST | /{task_id}/resume | 恢复任务 | | POST | /{task_id}/restart | 重启任务 | | GET | /{task_id}/logs | 获取任务日志 | | GET | /{task_id}/products | 获取任务采集的商品 | | GET | /{task_id}/statistics | 获取任务统计 | | GET | /status/running | 获取运行中的任务 | | GET | /status/recent | 获取最近完成的任务 | ### 商品接口 /api/products | 方法 | 路径 | 说明 | |------|------|------| | GET | / | 商品列表(分页、多维筛选) | | POST | / | 创建商品(管理员) | | GET | /{product_id} | 商品详情 | | PUT | /{product_id} | 更新商品(管理员) | | DELETE | /{product_id} | 删除商品(管理员) | | GET | /search/results | 全文搜索商品 | | GET | /statistics/summary | 商品统计概览 | | GET | /analytics/price-distribution | 价格分布分析 | | GET | /analytics/top-products | Top 商品排行 | | GET | /keywords/list | 关键词列表 | | GET | /keywords/{keyword_id} | 按关键词获取商品 | | POST | /export | 导出商品数据 | ### 分析接口 /api/analytics | 方法 | 路径 | 说明 | |------|------|------| | GET | /dashboard | 完整仪表盘数据 | | GET | /dashboard/metrics | 仪表盘指标 | | GET | /dashboard/recent-tasks | 最近任务 | | GET | /dashboard/trend-data | 趋势数据 | | GET | /dashboard/platform-distribution | 平台分布 | | GET | /dashboard/price-distribution | 价格分布 | | GET | /dashboard/top-products | 热门商品 | | GET | /summary | 分析摘要 | | GET | /categories | 分类分析 | | GET | /sales-trend | 销售趋势 | | GET | /top-products | Top 商品 | | GET | /price-analysis | 价格分析 | ### 可视化接口 /api/visualizations | 方法 | 路径 | 说明 | |------|------|------| | GET | /store-ranking | 店铺排行 | | GET | /price-distribution | 价格分布 | | GET | /price-trend | 价格趋势 | | GET | /platform-share | 平台份额 | | GET | /location-distribution | 地区分布 | | GET | /sales-by-platform | 平台销量 | | GET | /hot-products | 热门商品 | | GET | /keyword-analysis | 关键词分析 | | GET | /price-sales-scatter | 价格-销量散点 | ### 评论接口 /api/comments | 方法 | 路径 | 说明 | |------|------|------| | GET | / | 评论列表(分页、筛选) | | GET | /{comment_id} | 评论详情 | | GET | /statistics | 评论统计 | | GET | /sentiment-distribution | 情感分布 | | GET | /word-cloud | 词云数据 | | GET | /trend | 情感趋势 | | POST | /{comment_id}/analyze | 单条情感分析 | | POST | /analyze-batch | 批量情感分析 | ### 设置接口 /api/settings | 方法 | 路径 | 说明 | |------|------|------| | GET | / | 获取所有设置 | | PUT | / | 批量更新设置 | | GET | /{key} | 获取单个设置 | | PUT | /{key} | 更新单个设置 | | DELETE | /{key} | 删除设置 | | GET | /crawler/default | 爬虫默认设置 | | GET | /export/default | 导出默认设置 | | POST | /crawler/reset | 重置爬虫设置 | ### WebSocket 接口 | 路径 | 说明 | |------|------| | ws://host/ws/tasks/{task_id}/progress | 任务进度实时推送 | | ws://host/ws/notifications | 系统通知推送 | ## 项目目录结构 ``` 基于爬虫的电商商品数据分析和可视化/ ├── backend/ # 后端代码 │ ├── main.py # FastAPI 应用入口 │ ├── requirements.txt # Python 依赖 │ ├── api/ # API 路由层 │ │ ├── auth.py # 认证接口 │ │ ├── tasks.py # 任务管理接口 │ │ ├── products.py # 商品数据接口 │ │ ├── analytics.py # 数据分析接口 │ │ ├── visualizations.py # 可视化接口 │ │ ├── comments.py # 评论分析接口 │ │ ├── settings.py # 系统设置接口 │ │ └── deps.py # 依赖注入 │ ├── database/ # 数据库层 │ │ ├── models.py # ORM 数据模型 │ │ ├── session.py # 数据库会话管理 │ │ ├── init_db.py # 数据库初始化 │ │ └── seed_demo_data.py # 演示数据生成 │ ├── schemas/ # Pydantic 数据校验 │ │ ├── auth.py # 认证相关 Schema │ │ ├── task.py # 任务相关 Schema │ │ ├── product.py # 商品/评论 Schema │ │ └── dashboard.py # 仪表盘 Schema │ ├── services/ # 业务逻辑层 │ │ ├── auth_service.py # 认证服务 │ │ ├── task_service.py # 任务服务 │ │ ├── product_service.py # 商品服务 │ │ ├── comment_service.py # 评论服务 │ │ └── crawler_service.py # 爬虫服务 │ ├── spiders/ # 爬虫模块 │ │ ├── taobao_spider.py # 淘宝爬虫 │ │ ├── jd_spider.py # 京东爬虫 │ │ └── pdd_spider.py # 拼多多爬虫 │ ├── websocket/ # WebSocket 模块 │ │ ├── handler.py # WebSocket 路由 │ │ └── manager.py # 连接管理器 │ ├── utils/ # 工具模块 │ │ ├── security.py # 密码/JWT 工具 │ │ └── logger.py # 日志工具 │ └── data/ # 数据文件目录 │ └── ecommerce.db # SQLite 数据库 ├── frontend/ # 前端代码 │ ├── package.json # 前端依赖 │ ├── vite.config.ts # Vite 配置 │ ├── tsconfig.json # TypeScript 配置 │ └── src/ │ ├── main.ts # 应用入口 │ ├── App.vue # 根组件 │ ├── api/ # API 请求层 │ │ ├── index.ts # Axios 实例 │ │ ├── auth.ts # 认证 API │ │ ├── tasks.ts # 任务 API │ │ ├── products.ts # 商品 API │ │ ├── analytics.ts # 分析 API │ │ ├── visualizations.ts # 可视化 API │ │ └── comments.ts # 评论 API │ ├── views/ # 页面组件 │ │ ├── Login.vue # 登录页 │ │ ├── Register.vue # 注册页 │ │ ├── Dashboard.vue # 仪表盘 │ │ ├── Tasks.vue # 任务管理 │ │ ├── NewTask.vue # 新建任务 │ │ ├── DataList.vue # 商品数据 │ │ ├── Analysis.vue # 分析报表 │ │ ├── Comments.vue # 评论分析 │ │ ├── Visualization.vue # 可视化图表 │ │ ├── Settings.vue # 系统设置 │ │ └── NotFound.vue # 404 页面 │ ├── components/ # 公共组件 │ │ └── Layout.vue # 主布局 │ ├── stores/ # Pinia 状态管理 │ │ ├── auth.ts # 认证状态 │ │ └── tasks.ts # 任务状态 │ ├── composables/ # 组合式函数 │ │ ├── useWebSocket.ts # WebSocket │ │ └── useNotification.ts # 通知 │ └── types/ # TypeScript 类型 │ └── index.ts # 类型定义 ├── config.py # 全局配置文件 └── CLAUDE.md # 项目开发文档 ``` ## 安装与部署 ### 环境要求 - Python 3.10+ - Node.js 18+ - Chrome 浏览器 + ChromeDriver(爬虫功能需要) ### 后端安装 ```bash # 进入后端目录 cd backend # 创建虚拟环境 python -m venv venv venv\Scripts\activate # Windows # 安装依赖 pip install -r requirements.txt # 初始化数据库 python database/init_db.py # (可选)生成演示数据 python database/seed_demo_data.py # 启动后端服务 python main.py # 后端运行在 http://127.0.0.1:8000 # API 文档: http://127.0.0.1:8000/docs ``` ### 前端安装 ```bash # 进入前端目录 cd frontend # 安装依赖 npm install # 启动开发服务器 npm run dev # 前端运行在 http://localhost:5173 ``` ### 默认账号 | 用户名 | 密码 | 角色 | |--------|------|------| | admin | admin123 | 管理员 | ## 关键设计模式 ### 1. 分层架构 系统采用经典三层架构:API 路由层 - 业务服务层 - 数据访问层,各层职责明确,松耦合。 ### 2. 依赖注入 FastAPI 内置的 Depends 机制实现依赖注入,包括数据库会话、用户认证、分页参数等。 ### 3. Session 认证 采用服务端 Session + Cookie 的认证方式,通过 Starlette SessionMiddleware 管理会话。 ### 4. 实时通信 WebSocket 双向通信用于爬虫任务进度实时推送,前端通过消息队列模式处理消息。 ### 5. 响应式状态管理 前端使用 Pinia 管理全局状态,Composition API 风格,支持状态持久化和响应式更新。 ### 6. 前端路由守卫 Vue Router 全局前置守卫实现路由级别的权限控制,未认证用户自动重定向至登录页。 ## 许可证 本项目仅用于学术研究和毕业设计,不得用于商业用途。