326-基于Python的影视数据可视化分析系统

影视数据可视化分析系统

完整项目技术文档


目录

  1. 项目概述
  2. 技术架构
  3. 项目目录结构
  4. 数据库设计
  5. 核心模块详解
  6. 路由接口文档
  7. 功能模块说明
  8. 页面模板说明
  9. 部署与运行
  10. 系统截图说明

一、项目概述

1.1 项目名称

影视数据采集与可视化分析系统

1.2 项目简介

本系统是一个综合性的影视数据管理与分析平台,集成了数据采集(爬虫)、数据存储、数据可视化、机器学习分析等功能。系统支持多数据源(哔哩哔哩、Netflix、豆瓣等),提供丰富的数据图表展示和智能分析功能。

1.3 核心功能

功能模块 描述
用户认证系统 登录、注册、密码找回、角色权限管理(管理员/普通用户)
数据管理 影视数据的增删改查,支持分类筛选、搜索、分页
数据爬虫 B站影视数据自动采集,支持5个分类,可配置爬取参数
数据可视化 20+种图表类型,两个数据大屏(影视剧大屏、B站科技风大屏)
机器学习分析 评分预测、聚类分析、异常检测、内容推荐
邮件通知 数据更新完成后自动发送邮件通知

1.4 系统特色

  • 双角色权限控制:管理员拥有完整权限,普通用户只读访问
  • 科技感数据大屏:粒子动画、光圈效果、数据流动画
  • 一键爬虫更新:可视化配置界面,实时进度反馈
  • 机器学习集成:6大分析模块,深度数据挖掘
  • 炫酷登录界面:卡通动画、粒子背景、音效交互

1.5 项目演示

326-基于Python的影视数据可视化分析系统
































二、技术架构

2.1 技术栈总览

复制代码
┌─────────────────────────────────────────────────────────────┐
│                        前端展示层                            │
│  Bootstrap 4 │ jQuery 3.3 │ ECharts │ FontAwesome │ CSS3   │
├─────────────────────────────────────────────────────────────┤
│                        后端服务层                            │
│  Flask 3.0 │ Jinja2模板 │ Blueprint蓝图 │ Flask-CORS       │
├─────────────────────────────────────────────────────────────┤
│                        数据处理层                            │
│  Pandas │ NumPy │ PyEcharts │ Scikit-learn │ Requests      │
├─────────────────────────────────────────────────────────────┤
│                        数据存储层                            │
│  MySQL 5.7+ │ SQLAlchemy ORM │ PyMySQL                      │
└─────────────────────────────────────────────────────────────┘

2.2 详细技术说明

类别 技术 版本 用途说明
Web框架 Flask 3.0.0 Python轻量级Web框架,处理HTTP请求
ORM框架 Flask-SQLAlchemy 3.0.3 数据库对象关系映射
数据库驱动 PyMySQL 1.0.3 MySQL数据库Python连接器
数据库迁移 Flask-Migrate 4.0.4 数据库版本管理
表单验证 Flask-WTF 1.2.1 表单处理和CSRF保护
跨域支持 Flask-CORS - 处理跨域资源共享
数据处理 Pandas 1.1.5 数据分析和处理
数值计算 NumPy - 科学计算库
图表生成 PyEcharts - Python ECharts图表库
机器学习 Scikit-learn - 机器学习算法库
网络请求 Requests - HTTP请求库(爬虫)
密码加密 Werkzeug - 密码哈希加密
前端框架 Bootstrap 4.x 响应式CSS框架
图表展示 ECharts 5.x 前端可视化图表库
图标库 FontAwesome 5.x 矢量图标库

2.3 系统架构图

复制代码
用户请求 → Nginx(可选) → Flask App → Blueprint路由
                                         ↓
                              ┌─────────────────────┐
                              │   视图函数处理       │
                              │  - 权限验证         │
                              │  - 业务逻辑         │
                              │  - 数据查询         │
                              └─────────────────────┘
                                         ↓
                    ┌────────────────────┴────────────────────┐
                    ↓                                          ↓
            数据库操作                                    工具模块调用
        (SQLAlchemy ORM)                              (analyze/crawler/ml)
                    ↓                                          ↓
                  MySQL                               PyEcharts图表生成
                    ↓                                          ↓
            ←─────────────── 返回JSON/HTML ←──────────────────

三、项目目录结构

复制代码
film/                                    # 项目根目录
│
├── app.py                               # 【主入口】Flask应用入口文件
│                                        #   - 应用初始化和配置
│                                        #   - 蓝图注册
│                                        #   - 核心路由(登录、注册、大屏等)
│
├── config.py                            # 【配置】数据库连接配置
│                                        #   - MySQL主机、端口、用户名、密码
│                                        #   - SQLAlchemy配置
│
├── ext.py                               # 【扩展】Flask扩展初始化
│                                        #   - SQLAlchemy实例创建
│
├── models.py                            # 【模型】数据库ORM模型定义
│                                        #   - User(用户表)
│                                        #   - FilmInformation(影视剧表)
│                                        #   - NetflixTitles(Netflix表)
│                                        #   - BilibiliMedia(B站影视表)
│
├── manage.py                            # 【管理】Flask-Migrate数据库迁移
│
├── dependency.txt                       # 【依赖】pip安装命令列表
│
├── design_326_film.sql                  # 【备份】数据库SQL备份文件(约8MB)
│
├── email_config.json                    # 【配置】邮件服务配置(JSON格式)
│
├── blueprints/                          # 【蓝图目录】路由模块
│   │
│   ├── __init__.py                      # 包初始化文件
│   │
│   ├── admin.py                         # 【后台管理蓝图】URL前缀: /admin
│   │                                    #   - 用户管理(CRUD)
│   │                                    #   - 影视数据管理(Film/Netflix/Bilibili)
│   │                                    #   - 爬虫控制
│   │                                    #   - 邮件设置
│   │                                    #   - 权限装饰器定义
│   │
│   ├── chart.py                         # 【图表蓝图】URL前缀: /chart
│   │                                    #   - 17个影视剧数据分析图表路由
│   │                                    #   - chart1 ~ chart17
│   │
│   ├── bilibili_chart.py                # 【B站图表蓝图】URL前缀: /bilibili
│   │                                    #   - 13个B站数据分析图表
│   │                                    #   - 机器学习分析页面
│   │                                    #   - ML API端点
│   │
│   └── index.py                         # 【首页蓝图】URL前缀: /
│                                        #   - 系统首页
│                                        #   - 统计数据API
│
├── model/                               # 【验证模块】表单验证
│   ├── __init__.py
│   ├── check_login.py                   # 登录表单验证逻辑
│   └── check_regist.py                  # 注册表单验证逻辑
│
├── util/                                # 【工具模块】数据处理
│   │
│   ├── analyze.py                       # 影视剧数据分析
│   │                                    #   - 为chart蓝图提供图表数据
│   │
│   ├── datateal.py                      # 大屏数据处理
│   │                                    #   - 为screen.html提供图表数据
│   │                                    #   - get_pie1/get_pie2/get_grid等函数
│   │
│   ├── bilibili_analyze.py              # B站数据分析(核心文件,约1500行)
│   │                                    #   - 13个普通图表生成函数
│   │                                    #   - 9个大屏专用图表函数
│   │                                    #   - 统计数据获取函数
│   │
│   ├── bilibili_crawler.py              # B站数据爬虫
│   │                                    #   - BilibiliCrawler类
│   │                                    #   - 5个分类的API配置
│   │                                    #   - 数据爬取和解析逻辑
│   │                                    #   - 数据库保存函数
│   │
│   ├── bilibili_ml.py                   # B站机器学习分析
│   │                                    #   - 评分预测模型
│   │                                    #   - K-Means聚类分析
│   │                                    #   - 异常检测
│   │                                    #   - 推荐系统
│   │
│   ├── save_data.py                     # 数据导入工具
│   ├── save_data1.py                    # 数据导入工具(备用)
│   │
│   ├── bilibili_data.csv                # B站数据CSV备份
│   ├── netflix_titles.csv               # Netflix数据CSV
│   └── 影视剧信息.xlsx                   # 影视剧Excel数据
│
├── templates/                           # 【模板目录】HTML页面
│   │
│   ├── base.html                        # 基础布局模板(约800行)
│   │                                    #   - 导航栏、侧边栏
│   │                                    #   - 卡通装饰元素
│   │                                    #   - 公共CSS/JS引入
│   │
│   ├── macros.html                      # Jinja2宏定义
│   │                                    #   - render_pagination 分页组件
│   │
│   ├── login.html                       # 登录页面(约1200行)
│   │                                    #   - 客厅动画场景
│   │                                    #   - 粒子背景效果
│   │                                    #   - 背景音乐控制
│   │
│   ├── register.html                    # 注册页面
│   ├── forgot_password.html             # 忘记密码页面(侦探主题)
│   ├── reset_password.html              # 重置密码页面
│   ├── change_password.html             # 修改密码页面
│   │
│   ├── index.html                       # 系统首页
│   │                                    #   - 统计卡片
│   │                                    #   - 快捷入口
│   │
│   ├── screen.html                      # 影视剧数据大屏
│   ├── bilibili_screen.html             # B站数据大屏(科技风格)
│   │                                    #   - 星空粒子背景
│   │                                    #   - 光圈动画效果
│   │                                    #   - 9个图表展示
│   │
│   ├── bilibili_list.html               # B站数据列表
│   │                                    #   - 爬虫配置面板
│   │                                    #   - 进度条显示
│   │                                    #   - 分类筛选
│   │
│   ├── bilibili_detail.html             # B站数据详情
│   ├── bilibili_chart.html              # B站图表展示
│   ├── bilibili_chart_3d.html           # B站3D图表
│   ├── bilibili_ml.html                 # 机器学习分析页
│   │
│   ├── film_list.html                   # 影视剧列表
│   ├── netflix_list.html                # Netflix列表
│   ├── user_list.html                   # 用户管理列表
│   │
│   ├── edit_profile.html                # 个人资料编辑
│   ├── email_settings.html              # 邮件设置页面
│   │
│   ├── chart1.html ~ chart17.html       # 17个图表展示页面
│   │
│   ├── add_bilibili.html                # 添加B站数据
│   ├── add_film.html                    # 添加影视剧
│   ├── add_netflix.html                 # 添加Netflix数据
│   ├── add_user.html                    # 添加用户
│   │
│   ├── edit_bilibili.html               # 编辑B站数据
│   ├── edit_film.html                   # 编辑影视剧
│   ├── edit_netflix.html                # 编辑Netflix
│   └── edit_user.html                   # 编辑用户
│
└── static/                              # 【静态资源目录】
    │
    ├── assets/                          # 前端框架资源
    │   ├── vendor/                      # 第三方库
    │   │   ├── bootstrap/               # Bootstrap CSS/JS
    │   │   ├── jquery/                  # jQuery库
    │   │   ├── charts/                  # 图表相关库
    │   │   ├── fonts/                   # 字体和图标
    │   │   │   ├── fontawesome/         # FontAwesome图标
    │   │   │   ├── simple-line-icons/   # 简线图标
    │   │   │   └── themify-icons/       # Themify图标
    │   │   ├── datatables/              # 数据表格插件
    │   │   ├── datepicker/              # 日期选择器
    │   │   └── select2/                 # 下拉选择增强
    │   │
    │   ├── libs/                        # 自定义资源
    │   │   ├── css/style.css            # 主样式文件
    │   │   └── js/                      # 自定义JS
    │   │
    │   └── images/                      # 系统图片
    │       ├── logo.png                 # Logo图片
    │       ├── logo1.png
    │       └── logo2.png
    │
    ├── image/                           # 业务图片
    │   ├── user/                        # 用户头像
    │   │   └── default-avatar.png       # 默认头像
    │   └── screen_bg.jpg                # 大屏背景图
    │
    ├── audio/                           # 音频文件
    │   ├── background.mp3               # 背景音乐
    │   └── click.mp3                    # 点击音效
    │
    ├── visual/                          # 可视化模板参考
    │
    └── dist/                            # 其他前端资源
        └── modules/                     # 模块资源

四、数据库设计

4.1 数据库基本信息

项目
数据库类型 MySQL 5.7+
数据库名称 design_326_film
字符集 utf8mb4
排序规则 utf8mb4_general_ci

4.2 数据表概览

表名 中文名称 记录数量级 主要用途
user 用户表 10-100 存储系统用户信息
film_information 影视剧信息表 100-1000 存储影视剧基本数据
netflix_titles Netflix节目表 1000-10000 存储Netflix影视数据
bilibili_media B站影视表 1000-50000 存储B站影视数据

4.3 用户表 (user)

表说明:存储系统用户信息,包含认证、个人资料和权限信息。

建表语句

sql 复制代码
CREATE TABLE `user` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '用户ID,主键自增',
  `username` VARCHAR(255) NOT NULL COMMENT '用户名,唯一',
  `password` VARCHAR(255) NOT NULL COMMENT '密码(哈希加密存储)',
  `email` VARCHAR(255) NOT NULL COMMENT '邮箱地址,唯一',
  `phone` VARCHAR(20) NOT NULL COMMENT '手机号码',
  `address` VARCHAR(255) NOT NULL COMMENT '地址',
  `profile_picture` VARCHAR(255) DEFAULT NULL COMMENT '头像图片路径',
  `reset_token` VARCHAR(255) DEFAULT NULL COMMENT '密码重置令牌',
  `role` VARCHAR(20) NOT NULL DEFAULT 'user' COMMENT '用户角色:admin/user',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  UNIQUE KEY `uk_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';

字段详细说明

字段名 数据类型 是否必填 默认值 说明
id INT 自增 主键,用户唯一标识
username VARCHAR(255) - 用户名,用于登录,全局唯一
password VARCHAR(255) - 密码,使用werkzeug进行哈希加密存储
email VARCHAR(255) - 邮箱地址,用于密码找回和通知,全局唯一
phone VARCHAR(20) - 手机号码,用于密码找回验证
address VARCHAR(255) - 用户地址信息
profile_picture VARCHAR(255) NULL 用户头像图片路径
reset_token VARCHAR(255) NULL 密码重置令牌,重置成功后清空
role VARCHAR(20) 'user' 用户角色,admin=管理员,user=普通用户

索引设计

  • 主键索引:id
  • 唯一索引:username(快速登录验证)
  • 唯一索引:email(防止重复注册)

示例数据

sql 复制代码
INSERT INTO `user` VALUES
(1, 'admin', 'pbkdf2:sha256:...', 'admin@example.com', '13800138000', '北京市', '../static/image/user/default-avatar.png', NULL, 'admin'),
(2, 'testuser', 'pbkdf2:sha256:...', 'test@example.com', '13900139000', '上海市', '../static/image/user/default-avatar.png', NULL, 'user');

4.4 影视剧信息表 (film_information)

表说明:存储影视剧基本信息,主要来源于豆瓣等平台。

建表语句

sql 复制代码
CREATE TABLE `film_information` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `title` TEXT NOT NULL COMMENT '影视剧名称',
  `tags` TEXT DEFAULT NULL COMMENT '影视剧标签(逗号分隔)',
  `barrage_count` TEXT DEFAULT NULL COMMENT '弹幕数量',
  `hotness` BIGINT DEFAULT NULL COMMENT '热度值',
  `keywords` TEXT DEFAULT NULL COMMENT '关键词描述',
  `image_url` TEXT DEFAULT NULL COMMENT '海报图片URL',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='影视剧信息表';

字段详细说明

字段名 数据类型 是否必填 说明
id BIGINT 主键,自动递增
title TEXT 影视剧名称,如"流浪地球2"
tags TEXT 标签,多个标签用逗号分隔,如"科幻,冒险,动作"
barrage_count TEXT 弹幕数量,存储格式如"12.5万"
hotness BIGINT 热度数值,用于排序
keywords TEXT 关键词描述,用于搜索和词云分析
image_url TEXT 海报高清图片URL

4.5 Netflix节目表 (netflix_titles)

表说明:存储Netflix平台的影视节目数据。

建表语句

sql 复制代码
CREATE TABLE `netflix_titles` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `show_id` TEXT NOT NULL COMMENT 'Netflix节目ID',
  `type` TEXT NOT NULL COMMENT '类型:Movie/TV Show',
  `title` TEXT NOT NULL COMMENT '节目标题',
  `director` TEXT DEFAULT NULL COMMENT '导演',
  `cast` TEXT DEFAULT NULL COMMENT '演员阵容',
  `country` TEXT DEFAULT NULL COMMENT '制作国家',
  `date_added` TEXT DEFAULT NULL COMMENT '上架日期',
  `release_year` BIGINT DEFAULT NULL COMMENT '上映年份',
  `rating` TEXT DEFAULT NULL COMMENT '分级:PG-13/R/TV-MA等',
  `duration` TEXT DEFAULT NULL COMMENT '时长:电影为分钟,剧集为季数',
  `listed_in` TEXT DEFAULT NULL COMMENT '分类标签',
  `description` TEXT DEFAULT NULL COMMENT '节目简介',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Netflix节目表';

字段详细说明

字段名 数据类型 是否必填 说明 示例值
id BIGINT 主键自增 1
show_id TEXT Netflix内部ID s1, s2
type TEXT 节目类型 Movie / TV Show
title TEXT 节目标题 Stranger Things
director TEXT 导演姓名 The Duffer Brothers
cast TEXT 演员列表(逗号分隔) Millie Bobby Brown, Finn Wolfhard
country TEXT 制作国家 United States
date_added TEXT Netflix上架日期 July 15, 2016
release_year BIGINT 首映年份 2016
rating TEXT 内容分级 TV-14, PG-13, R
duration TEXT 时长信息 4 Seasons / 120 min
listed_in TEXT 分类标签 TV Dramas, Sci-Fi
description TEXT 节目简介 When a young boy...

4.6 哔哩哔哩影视表 (bilibili_media) ⭐核心表

表说明:存储从B站爬取的影视数据,是系统最核心的数据表,数据量最大。

建表语句

sql 复制代码
CREATE TABLE `bilibili_media` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '自增ID,主键',
  `media_id` BIGINT NOT NULL COMMENT 'B站媒体ID(唯一标识)',
  `title` TEXT NOT NULL COMMENT '影视名称',
  `category` VARCHAR(50) NOT NULL COMMENT '分类:movie/tv/bangumi/guochuang/documentary',
  `cover` TEXT DEFAULT NULL COMMENT '封面图片URL',
  `tag1` TEXT DEFAULT NULL COMMENT '主标签(类型)',
  `tag2` TEXT DEFAULT NULL COMMENT '副标签(地区)',
  `score` FLOAT DEFAULT NULL COMMENT '评分(0-10分)',
  `review_count` TEXT DEFAULT NULL COMMENT '评分人数',
  `play_count` TEXT DEFAULT NULL COMMENT '总播放量',
  `follow_count` TEXT DEFAULT NULL COMMENT '追剧/追番人数',
  `danmaku_count` TEXT DEFAULT NULL COMMENT '弹幕总数',
  `release_date` TEXT DEFAULT NULL COMMENT '上映/开播时间',
  `duration` TEXT DEFAULT NULL COMMENT '播放时长/总集数',
  `keywords` TEXT DEFAULT NULL COMMENT '关键词(逗号分隔)',
  `keyword_count` INT DEFAULT NULL COMMENT '关键词数量',
  `url` TEXT DEFAULT NULL COMMENT 'B站详情页URL',
  `actors` TEXT DEFAULT NULL COMMENT '演员/声优(逗号分隔)',
  `description` TEXT DEFAULT NULL COMMENT '简介',
  `area` TEXT DEFAULT NULL COMMENT '地区',
  `style` TEXT DEFAULT NULL COMMENT '风格类型(逗号分隔)',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '数据创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_category` (`category`),
  KEY `idx_media_id` (`media_id`),
  KEY `idx_score` (`score`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='B站影视数据表';

字段详细说明

字段名 数据类型 是否必填 说明 示例值
id BIGINT 系统主键 1
media_id BIGINT B站媒体唯一ID 28237119
title TEXT 影视名称 流浪地球2
category VARCHAR(50) 分类代码 movie/tv/bangumi/guochuang/documentary
cover TEXT 封面图URL https://i0.hdslb.com/bfs/...
tag1 TEXT 主标签 科幻
tag2 TEXT 副标签 中国大陆
score FLOAT 评分(0-10) 9.5
review_count TEXT 评分人数 12.5万
play_count TEXT 播放量 3.2亿
follow_count TEXT 追剧人数 856.7万
danmaku_count TEXT 弹幕数 125.6万
release_date TEXT 上映时间 2023-01-22
duration TEXT 时长/集数 173分钟 / 全24集
keywords TEXT 关键词 科幻,冒险,地球,太阳系
keyword_count INT 关键词数量 4
url TEXT B站链接 https://www.bilibili.com/bangumi/...
actors TEXT 演员/声优 吴京,刘德华,李雪健
description TEXT 简介 太阳即将毁灭...
area TEXT 地区 中国大陆
style TEXT 风格 科幻,冒险,灾难
created_at DATETIME 创建时间 2024-01-10 12:00:00

分类代码说明

category值 中文名称 说明
movie 电影 院线电影、网络电影
tv 电视剧 国产剧、海外剧
bangumi 番剧 日本动画为主
guochuang 国创 国产动画
documentary 纪录片 各类纪录片

索引设计

  • 主键索引:id
  • 普通索引:category(分类筛选)
  • 普通索引:media_id(去重检查)
  • 普通索引:score(评分排序)

4.7 数据库ER图

复制代码
┌─────────────────┐
│      user       │
├─────────────────┤
│ PK id           │
│    username     │──┐
│    password     │  │
│    email        │  │
│    phone        │  │  用户管理
│    address      │  │  全部数据
│    profile_pic  │  │
│    reset_token  │  │
│    role         │──┘
└─────────────────┘

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│film_information │     │ netflix_titles  │     │ bilibili_media  │
├─────────────────┤     ├─────────────────┤     ├─────────────────┤
│ PK id           │     │ PK id           │     │ PK id           │
│    title        │     │    show_id      │     │    media_id     │
│    tags         │     │    type         │     │    title        │
│    barrage_cnt  │     │    title        │     │    category     │
│    hotness      │     │    director     │     │    cover        │
│    keywords     │     │    cast         │     │    score        │
│    image_url    │     │    country      │     │    play_count   │
└─────────────────┘     │    date_added   │     │    follow_count │
                        │    release_year │     │    danmaku_cnt  │
                        │    rating       │     │    keywords     │
                        │    duration     │     │    actors       │
                        │    listed_in    │     │    area         │
                        │    description  │     │    style        │
                        └─────────────────┘     │    created_at   │
                                                └─────────────────┘

五、核心模块详解

5.1 应用主入口 (app.py)

文件位置film/app.py
代码行数 :约300行
核心职责

  1. Flask应用实例化和配置
  2. 数据库初始化
  3. 蓝图注册
  4. 核心路由定义

关键代码解析

python 复制代码
# 应用初始化
app = Flask(__name__)
CORS(app)  # 启用跨域支持
app.config.from_object(config)  # 加载配置
db.init_app(app)  # 初始化数据库

# 蓝图注册
app.register_blueprint(index_bp)      # 首页蓝图 /
app.register_blueprint(chart_bp)       # 图表蓝图 /chart
app.register_blueprint(admin_bp)       # 后台蓝图 /admin
app.register_blueprint(bilibili_bp)    # B站蓝图 /bilibili

主要路由功能

路由 函数 方法 功能描述
/login login() GET/POST 用户登录验证
/register register() GET/POST 用户注册
/logout logout() GET 退出登录
/screen screen() GET 影视剧数据大屏
/bilibili_screen bilibili_screen() GET B站数据大屏
/forgot_password forgot_password() GET/POST 忘记密码
/reset_password/<token> reset_password() GET/POST 重置密码
/change_password change_password() GET/POST 修改密码
/edit_profile edit_profile() GET/POST 编辑个人资料

5.2 后台管理蓝图 (blueprints/admin.py)

文件位置film/blueprints/admin.py
代码行数 :约900行
URL前缀/admin

权限装饰器

python 复制代码
# 登录检查装饰器
@login_required  # 任何已登录用户可访问

# 管理员权限装饰器
@admin_required  # 仅管理员可访问

路由清单

路由 方法 权限 功能
/user_list GET admin 用户列表
/add_user GET/POST admin 添加用户
/edit_user<id> GET/POST admin 编辑用户
/delete_user<id> POST admin 删除用户
/film_list GET login 影视剧列表
/add_film GET/POST admin 添加影视剧
/edit_film<id> GET/POST admin 编辑影视剧
/delete_film<id> POST admin 删除影视剧
/netflix_list GET login Netflix列表
/add_netflix GET/POST admin 添加Netflix
/edit_netflix<id> GET/POST admin 编辑Netflix
/delete_netflix<id> POST admin 删除Netflix
/bilibili_list GET login B站数据列表
/bilibili_detail<id> GET login B站数据详情
/search_bilibili GET login 搜索B站数据
/add_bilibili GET/POST admin 添加B站数据
/edit_bilibili<id> GET/POST admin 编辑B站数据
/delete_bilibili<id> POST admin 删除B站数据
/update_bilibili POST admin 启动爬虫更新
/update_bilibili_status GET admin 获取爬虫进度
/email_settings GET/POST admin 邮件设置
/test_email POST admin 测试邮件发送

5.3 B站数据爬虫 (util/bilibili_crawler.py)

文件位置film/util/bilibili_crawler.py
核心类BilibiliCrawler

支持的分类配置

python 复制代码
CATEGORY_CONFIG = {
    'movie': {
        'name': '电影',
        'season_type': 2,
        'api_url': 'https://api.bilibili.com/pgc/season/index/result',
        'pages': 50
    },
    'tv': {
        'name': '电视剧',
        'season_type': 5,
        'pages': 50
    },
    'bangumi': {
        'name': '番剧',
        'season_type': 1,
        'pages': 100
    },
    'guochuang': {
        'name': '国创',
        'season_type': 4,
        'pages': 50
    },
    'documentary': {
        'name': '纪录片',
        'season_type': 3,
        'pages': 30
    }
}

核心方法

方法名 功能 参数
get_media_ids() 获取指定分类页面的媒体ID列表 category, page
get_media_info() 获取单个媒体的详细信息 media_id, category
crawl_category() 爬取整个分类 category, max_pages
save_to_database() 保存数据到数据库 data_list, incremental

5.4 B站数据分析 (util/bilibili_analyze.py)

文件位置film/util/bilibili_analyze.py
代码行数:约1500行

图表生成函数列表

函数名 图表类型 用途 使用页面
get_bilibili_category_pie() 饼图 分类数量占比 chart1
get_bilibili_score_distribution() 柱状图 评分区间分布 chart2
get_bilibili_top_plays() 条形图 播放量TOP20 chart3
get_bilibili_radar_by_category() 雷达图 分类综合指标 chart4
get_bilibili_heatmap() 热力图 分类-评分热力图 chart5
get_bilibili_sankey() 桑基图 内容流向 chart6
get_bilibili_bar3d() 3D柱状图 三维数据展示 chart7
get_bilibili_keyword_wordcloud() 词云 热门关键词 chart8
get_bilibili_actor_wordcloud() 词云 热门演员 chart9
get_bilibili_style_polar() 极坐标图 风格分布 chart10
get_bilibili_funnel() 漏斗图 用户互动转化 chart11
get_bilibili_gauge() 仪表盘 综合评分 chart12
get_bilibili_timeline() 折线图 发布趋势 chart13

大屏专用函数

函数名 用途
get_screen_category_pie() 大屏-分类占比
get_screen_score_bar() 大屏-评分分布
get_screen_top_plays() 大屏-播放量
get_screen_radar() 大屏-雷达图
get_screen_area_bar() 大屏-地区分布
get_screen_keyword_cloud() 大屏-词云
get_screen_top_score() 大屏-评分分布
get_screen_follow_pie() 大屏-追剧分布
get_screen_timeline() 大屏-年份分布
get_screen_gauge() 大屏-仪表盘

5.5 机器学习分析 (util/bilibili_ml.py)

文件位置film/util/bilibili_ml.py
使用的算法库:Scikit-learn

分析功能

功能 算法 API端点 说明
评分预测 RandomForest/GradientBoosting /api/ml/prediction 预测影视作品评分
特征重要性 RandomForest /api/ml/importance 分析影响评分的关键因素
聚类分析 K-Means /api/ml/cluster 作品自动分群
最优聚类数 肘部法则 /api/ml/elbow 确定最佳K值
异常检测 IsolationForest/DBSCAN /api/ml/anomaly 识别异常数据点
内容推荐 相似度计算 /api/ml/recommend 基于内容的推荐

六、路由接口文档

6.1 认证相关接口

6.1.1 用户登录
复制代码
POST /login
Content-Type: application/x-www-form-urlencoded

参数:
- username: 用户名
- password: 密码
- remember_me: 记住我(可选)

返回:
- 成功:重定向到首页,session中存储username和role
- 失败:返回登录页面,显示错误信息
6.1.2 用户注册
复制代码
POST /register
Content-Type: application/x-www-form-urlencoded

参数:
- username: 用户名
- password: 密码
- email: 邮箱
- phone: 手机号
- address: 地址
- role: 角色(admin/user)

返回:
- 成功:显示注册成功提示
- 失败:返回注册页面,显示错误信息

6.2 数据接口

6.2.1 首页统计数据
复制代码
GET /api/stats

返回:
{
    "user_count": 10,
    "film_count": 100,
    "netfix_count": 1000,
    "bilibili_count": 5000
}
6.2.2 爬虫控制
复制代码
POST /admin/update_bilibili
Content-Type: application/json

参数:
{
    "categories": ["movie", "tv", "bangumi"],  // 选中的分类
    "max_pages": 3,  // 每个分类爬取页数
    "incremental": true  // 是否增量更新
}

返回:
{
    "success": true,
    "message": "数据更新已开始,请稍候..."
}
6.2.3 爬虫进度查询
复制代码
GET /admin/update_bilibili_status

返回:
{
    "is_updating": true,
    "progress": 45,
    "message": "[2/5] 正在爬取【电视剧】第 3/5 页...",
    "last_update": "2024-01-10 12:00:00",
    "total_count": 150
}

6.3 机器学习API

端点 方法 返回内容
/bilibili/api/ml/prediction GET 评分预测散点图配置
/bilibili/api/ml/importance GET 特征重要性柱状图配置
/bilibili/api/ml/cluster GET 聚类散点图配置
/bilibili/api/ml/elbow GET 肘部法则折线图配置
/bilibili/api/ml/anomaly GET 异常检测散点图配置
/bilibili/api/ml/recommend GET 推荐分析图表配置
/bilibili/api/ml/summary GET 分析摘要JSON

七、功能模块说明

7.1 用户认证系统

功能点

  • 用户注册(支持选择角色)
  • 用户登录(密码哈希验证)
  • 密码找回(手机号+用户名验证,生成重置令牌)
  • 密码重置(通过令牌验证)
  • 密码修改(验证当前密码)
  • 个人资料编辑

密码安全

python 复制代码
# 密码加密存储
from werkzeug.security import generate_password_hash, check_password_hash

# 注册时加密
password = generate_password_hash(plain_password)

# 登录时验证
check_password_hash(user.password, input_password)

7.2 权限控制系统

角色定义

角色 role值 权限范围
管理员 admin 完整权限:CRUD、爬虫、用户管理
普通用户 user 只读权限:查看数据、图表

权限控制实现

python 复制代码
# 装饰器方式
@admin_required
def some_admin_function():
    pass

# 模板中判断
{% if role == 'admin' %}
    <button>编辑</button>
{% endif %}

7.3 数据爬虫系统

工作流程

  1. 管理员在B站列表页点击"一键更新数据"
  2. 配置爬取参数(分类、页数、增量模式)
  3. 点击"开始爬取",后台线程启动
  4. 前端轮询进度接口,显示进度条
  5. 爬取完成后发送邮件通知

增量更新

  • 爬取前加载已存在的media_id集合
  • 跳过已存在的数据
  • 仅保存新数据

7.4 邮件通知系统

配置项

json 复制代码
{
    "smtp_server": "smtp.qq.com",
    "smtp_port": 465,
    "sender_email": "xxx@qq.com",
    "sender_password": "授权码",
    "enabled": true,
    "debug_mode": false
}

支持的邮件服务

  • QQ邮箱(端口465/587)
  • 163邮箱
  • Gmail
  • 其他SMTP服务

八、页面模板说明

8.1 基础布局 (base.html)

结构

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <!-- Bootstrap CSS -->
    <!-- 自定义样式 -->
    <!-- 图标库 -->
</head>
<body>
    <!-- 导航栏 -->
    <nav class="navbar">
        <!-- Logo -->
        <!-- 用户菜单 -->
    </nav>

    <!-- 侧边栏 -->
    <aside class="sidebar">
        <!-- 菜单项 -->
        <!-- 根据role显示不同菜单 -->
    </aside>

    <!-- 主内容区 -->
    <main>
        {% block main %}{% endblock %}
    </main>

    <!-- 卡通装饰元素 -->
    <div class="film-decorations">
        <!-- 电影胶片、场记板、星星等 -->
    </div>

    <!-- 公共JS -->
</body>
</html>

8.2 登录页面 (login.html)

特色效果

  • 客厅动画场景(电视机、沙发、一家人)
  • 飘动的电影票
  • 星星闪烁
  • 海浪动画
  • 粒子背景
  • 背景音乐
  • 鼠标轨迹特效
  • 点击波纹效果

8.3 B站数据大屏 (bilibili_screen.html)

布局结构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                          标题栏                              │
│                   哔哩哔哩影视数据大屏                        │
├─────────┬───────────────────────────────────┬───────────────┤
│         │                                   │               │
│ 左侧图表 │            中间区域               │   右侧图表     │
│ (22%)   │           (自适应)                │    (22%)      │
│         │                                   │               │
│ 饼图    │           统计卡片                 │   地区分布    │
│ 评分    │           雷达图                   │   词云        │
│ 播放量  │                                   │   追剧数      │
│         │                                   │               │
├─────────┴───────────────────────────────────┴───────────────┤
│                         底部图表                             │
│    评分分布环形图  │  年份分布漏斗图  │  综合评分仪表盘       │
└─────────────────────────────────────────────────────────────┘

科技感效果

  • 星空背景(twinkle动画)
  • 科技网格(pulse动画)
  • 透视网格地板
  • 六边形图案覆盖
  • 3个旋转光圈
  • 5条能量光束
  • 扫描线效果
  • 4条数据流
  • 30个浮动粒子
  • 角落装饰
  • 中心光晕

九、部署与运行

9.1 环境要求

项目 要求
Python 3.8+
MySQL 5.7+
操作系统 Windows/Linux/macOS
内存 建议4GB+

9.2 安装步骤

bash 复制代码
# 1. 克隆或下载项目
cd film

# 2. 创建虚拟环境
python -m venv venv

# 3. 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux/macOS:
source venv/bin/activate

# 4. 安装依赖
pip install flask==3.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask-sqlalchemy==3.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask-migrate==4.0.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pymysql==1.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pandas pyecharts scikit-learn requests flask-cors flask-wtf

# 5. 配置数据库
# 编辑 config.py,修改数据库连接信息
HOSTNAME = 'localhost'
DATABASE = 'design_326_film'
USERNAME = 'root'
PASSWORD = 'your_password'

# 6. 导入数据库
mysql -u root -p design_326_film < design_326_film.sql

# 7. 运行应用
python app.py

9.3 访问地址

页面 URL
首页 http://127.0.0.1:5000/
登录 http://127.0.0.1:5000/login
注册 http://127.0.0.1:5000/register
影视大屏 http://127.0.0.1:5000/screen
B站大屏 http://127.0.0.1:5000/bilibili_screen
后台管理 http://127.0.0.1:5000/admin/bilibili_list

9.4 默认账户

复制代码
管理员账户:
用户名:admin
密码:123456

普通用户:
用户名:user
密码:123456

十、系统功能清单

10.1 功能统计

类别 数量 说明
数据表 4个 user, film_information, netflix_titles, bilibili_media
路由接口 50+ 包含页面路由和API接口
图表类型 20+ 饼图、柱状图、雷达图、词云等
页面模板 45+ HTML页面
数据大屏 2个 影视剧大屏、B站科技大屏

10.2 图表清单

影视剧图表(17个)

  • chart1-chart17:各类分析图表

B站图表(13个)

  • 分类占比饼图
  • 评分分布柱状图
  • 播放量TOP20
  • 分类综合雷达图
  • 分类评分热力图
  • 内容流向桑基图
  • 3D数据柱状图
  • 关键词词云
  • 演员词云
  • 风格分布极坐标图
  • 用户互动漏斗图
  • 综合评分仪表盘
  • 发布趋势折线图

机器学习图表(6个)

  • 评分预测散点图
  • 特征重要性柱状图
  • 聚类分析散点图
  • 肘部法则折线图
  • 异常检测散点图
  • 推荐分析图表

文档版本 :v2.0
更新日期 :2026年1月11日
文档字数 :约15000字
作者:码界筑梦坊

相关推荐
B站_计算机毕业设计之家2 小时前
猫眼电影数据可视化与智能分析平台 | Python Flask框架 Echarts 推荐算法 爬虫 大数据 毕业设计源码
python·机器学习·信息可视化·flask·毕业设计·echarts·推荐算法
码界筑梦坊3 小时前
330-基于Python的社交媒体舆情监控系统
python·mysql·信息可视化·数据分析·django·毕业设计·echarts
invicinble3 小时前
对于对产品的理解
大数据·信息可视化·数据分析
码界筑梦坊4 小时前
325-基于Python的校园卡消费行为数据可视化分析系统
开发语言·python·信息可视化·django·毕业设计
码界筑梦坊5 小时前
327-基于Django的兰州空气质量大数据可视化分析系统
python·信息可视化·数据分析·django·毕业设计·数据可视化
2501_9436953321 小时前
大专大数据管理与应用专业,CDA考试的难点在哪里?
信息可视化
那个村的李富贵1 天前
解锁CANN仓库核心能力:50行代码搭建国产化AIGC图片风格迁移神器
mysql·信息可视化·aigc·cann
爱吃泡芙的小白白1 天前
环境数据多维关系探索利器:Pairs Plot 完全指南
python·信息可视化·数据分析·环境领域·pairs plot