数据库课程设计,用pyqt搭建的新闻聚合数据可视化界面,用到的技术栈有pyqt、pymysql、jieba、pandas、matlbplot、request,爬取的网站有wangyi和xinlang,结果展示词云、新闻来源比例饼图、top评论数新闻、新闻发布时间集中区间等等。
本项目是一个基于 Python + PyQt5 + MySQL 的新闻聚合与可视化分析系统,支持从网易、新浪等门户网站爬取新闻数据,存入数据库进行管理(增删改查),并基于 matplotlib 与 wordcloud 对新闻数据进行可视化分析(词云、饼图、时段分布、热点 TOP5 等)。
- 新闻爬取
- 网易新闻爬取(
wangyi_crawler.py) - 新浪新闻爬取(
xinlang_crawler.py)
- 网易新闻爬取(
- 数据库管理(
database.py)- 新闻数据的插入、查询、修改、删除
- 按标题模糊查询、按 ID 查询、查找评论数最多的新闻等
- 可视化分析(
MyWindow.py)- 网易 / 新浪新闻标题词云
- 双来源新闻数量占比饼图
- 24 小时新闻发布分布柱状图
- TOP5 新闻来源饼图
- 热点新闻 TOP5(按评论数)
- 图形界面(PyQt5)
- 主界面:
system.ui/system.py/MyWindow.py - 用户系统:
user_sys/(登录、菜单等) - 新闻分类管理:
category_sys/ - 新闻来源管理:
source_sys/
- 主界面:
db_expertime/
├── Main.py # 程序主入口
├── MyWindow.py # 主窗口逻辑(绑定按钮、可视化、数据操作)
├── system.py / system.ui # 主界面 UI
├── database.py # 数据库访问层(CRUD)
├── wangyi_crawler.py # 网易新闻爬虫
├── xinlang_crawler.py # 新浪新闻爬虫
├── show.py / test.py # 辅助 / 测试脚本
├── news_db.sql # 数据库建表与初始数据脚本
├── user_sys/ # 用户登录与菜单子系统
│ ├── login.py / login.ui
│ ├── sys_menu.py / sys_menu.ui
│ └── MainWindow.py
├── category_sys/ # 新闻分类管理子系统
├── source_sys/ # 新闻来源管理子系统
├── wordcloud_wy.png # 网易词云图输出
├── wordcloud_xl.png # 新浪词云图输出
├── pie_chart.png # 来源占比饼图输出
├── news_analysis.png # 综合分析图输出
└── 基于AI的新闻热点聚合及可视化系统开发说明书.docx
- 操作系统:Windows 10 / 11
- Python:3.8 及以上
- 数据库:MySQL 8.0
- 字体:需要
simhei.ttf(黑体,用于中文词云与 matplotlib 显示)
pip install PyQt5 pymysql pandas matplotlib wordcloud DrissionPage-
在 MySQL 中新建数据库:
CREATE DATABASE news_db DEFAULT CHARACTER SET utf8mb4;
-
导入项目根目录下的
news_db.sql,会创建以下三张表:news:新闻主表(nid / sid / cid / title / time / content / link / detail / source / imgurl / tienum / keywords)new_category:新闻分类表(cid / new_cname / addtime)new_source:新闻来源表(sid / sname / addtime)
-
修改
database.py中的数据库连接信息为你本地的配置:self.conn = pymysql.connect( host='localhost', user='root', password='你的数据库密码', database='news_db', charset='utf8mb4' )
在项目根目录下执行:
python Main.py程序入口位于 Main.py,会加载 MyWindow 并启动 PyQt5 主界面。
主界面按钮(在 MyWindow.init_ui 中绑定):
| 按钮 | 功能 |
|---|---|
init_btn |
生成网易 / 新浪词云 + 来源饼图 |
init_btn_2 |
加载并展示全部新闻数据表 |
show_btn |
生成聚合分析大图(24h/TOP5 等) |
button_new_2 |
爬取网易新闻并入库 |
button_new_3 |
爬取新浪财经新闻并入库 |
pushButton |
根据表格修改更新数据库 |
btn_find |
按 nid 查询新闻 |
btn_insert |
手动插入一条新闻 |
pushButton_2 |
按标题模糊查询 |
pushButton_3 |
查询评论数最高的热点新闻 |
表格内 删除 按钮 |
删除对应行新闻 |
运行相关功能后会在项目根目录生成以下图片:
wordcloud_wy.png:网易新闻标题词云wordcloud_xl.png:新浪新闻标题词云pie_chart.png:网易 / 新浪新闻数量占比饼图news_analysis.png:24 小时发布分布、TOP5 来源、热点 TOP5 综合图
- 爬虫部分依赖
DrissionPage/ 网络请求,若爬取失败请检查网络与目标站点结构是否变动。 - 词云生成依赖系统字体
simhei.ttf,请确保该字体可被程序访问(放在项目根目录或系统字体目录)。 - 由于
database.py中每次操作都会新建Database()连接,运行大批量操作时建议自行改造为连接复用。 - 数据库密码等敏感信息已在
database.py中硬编码,生产使用请改为配置文件或环境变量。
- 项目详细设计见:《基于AI的新闻热点聚合及可视化系统开发说明书.docx》
- 演示视频:
测试视频.mp4