F004 新闻可视化系统爬虫更新数据+ flask + mysql架构

F004 新闻可视化系统 flask + mysql架构

文章结尾部分有CSDN官方提供的学长 联系方式名片

博主开发经验15年,全栈工程师,专业搞定大模型、知识图谱、算法和可视化项目和比赛

关注B站,有好处!

编号:F004

视频

python+flask新闻爬虫可视化系统

✅ 可以根据观察者网站来 获取数据

✅ 爬虫: Requests + etree + Xpah

✅ 可视化: Flask + Echarts + WordCloud

✅ 文本分析:jieba分词

✅ 数据库: MySQL

系统设计

系统介绍

系统目标:实现对观察者网新闻的自动化抓取、结构化存储、智能搜索及多维度可视化分析,为时事研究提供数据支持。

代码目录:

核心功能模块

  1. 数据爬取引擎
    来源:定向爬取观察者网全站新闻(含首页/分类/专题)
    技术栈:
    Requests 模拟HTTP请求(处理反爬策略)
    lxml.etree + XPath 精准解析HTML(标题/正文/作者/发布时间/标签)
    输出:结构化元数据+原始HTML存档
  2. 文本处理流水线
    分词与清洗:
    jieba分词 实现中文语义切分(支持自定义词典)
    停用词过滤 + 关键词提取(TF-IDF算法)
    数据增强:自动生成新闻摘要 & 情感倾向评分
  3. 数据库管理
    架构:MySQL关系型数据库(5表结构)
    新闻主表(url, title, publish_time, author)
    内容表(正文+分词结果)
    热词统计表(动态更新)
    操作:
    增量更新(基于时间戳去重)
    索引优化(加速标题/内容检索)
  4. 搜索与展示系统
    新闻列表:


    新闻搜索结果:

全文搜索:

支持关键词布尔检索(SQL LIKE + 分词匹配)

结果高亮显示

  1. 可视化中心
    交互式图表(Flask + Echarts):


    关键词分析

词云生成器(WordCloud动态渲染):

全局高频词云

单篇新闻关键词聚焦

支持自定义配色/形状模板

python 复制代码
# 连接数据库并提取数据库内容
def get_datalist():
    datalist = []
    cnn = pymysql.connect(host=HOST, user=USER, password=PASSWORD, port=PORT, database=DATABASE,
                          charset=CHAREST)
    cursor = cnn.cursor()
    sql = ' select * from guanchazhe ORDER BY publish_time DESC'
    cursor.execute(sql)
    for item in cursor.fetchall():
        datalist.append(item)
    cursor.close()
    cnn.close()
    return datalist


# 对数据库文本内容进行分词,并返回 data_inf0 = [新闻数,词云数,词汇数,作者人数] ->首页展示的三个内容
def get_datalist_info(datalist):
    text = ""
    for item in datalist:
        text = text + item[4]

    # 分词
    cut = jieba.cut(text)
    string = ' '.join(cut)
    data_info = [len(datalist), 1, len(string), 1]
    return data_info,string


# 对输入文本进行分词,并返回词汇权重
def get_word_weights(string, topK):
    words = []
    weights = []
    for x, w in jieba.analyse.textrank(string, withWeight=True, topK=topK):
        words.append(x)
        weights.append(w)
    return words,weights


# 文本关键字提取
def get_keyword_from_content(content):
    print(content)
    cut = jieba.cut(content)
    string = ' '.join(cut)
    words,_=get_word_weights(string, topK=5)
    return words.append('(自动生成)')
相关推荐
剑神一笑1 分钟前
从零开始理解 robots.txt:搜索引擎爬虫的“门禁系统“
爬虫·搜索引擎
WL_Aurora12 分钟前
MySQL 5 卸载到 MySQL 8 安装完整指南(不踩坑版)
数据库·mysql
灰阳阳15 分钟前
MySQL的基本架构
数据库·mysql·架构
@小柯555m34 分钟前
MySql(高级操作符--Where in 和Not in)
数据库·sql·mysql
MmeD UCIZ36 分钟前
MySQL单表存多大的数据量比较合适
数据库·mysql
SarL EMEN1 小时前
mysql之联合索引
数据库·mysql
meta INGU1 小时前
mysql数据被误删的恢复方案
数据库·mysql
uElY ITER2 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
NCIN EXPE2 小时前
MySQL--》理解锁机制中的并发控制与优化策略
数据库·mysql·oracle
Nightwish52 小时前
Linux随记(三十)
linux·运维·mysql·ambari