【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情分析实现

发布于:2025-07-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解微博舆情分析实现

视频在线地址:

2026版【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts+爬虫) 视频教程 (火爆连载更新中..)_哔哩哔哩_bilibili

课程简介:

本课程采用主流的Python技术栈实现,Mysql8数据库,Flask后端,Pandas数据分析,前端可视化图表采用echarts,以及requests库,snowNLP进行情感分析,词频统计,包括大量的数据统计及分析技巧。

实现了,用户登录,注册,爬取微博帖子和评论信息,进行了热词统计以及舆情分析,以及基于echarts实现了数据可视化,包括微博文章分析,微博IP分析,微博评论分析,微博舆情分析。最后也基于wordcloud库实现了词云图,包括微博内容词云图,微博评论词云图,微博评论用户词云图等功能。

微博舆情分析实现

我们来实现下舆情分析功能。主要是分页显示微博数据,以及最后一列要进行情感分析。

articleData.html静态模版文件我们放到templates下:

{% extends 'base.html' %}
{% block title %}微博舆情分析{% endblock %}
{% block content %}
    <div class="container-fluid">
        <div class="row">
            <div class="col-lg-12">
                <div class="card">
                    <div class="card-header d-flex justify-content-between">
                        <div class="header-title">
                            <h4 class="card-title">微博舆情分析</h4>
                        </div>
                        <div class="header-action">
                            <i data-toggle="collapse" data-target="#datatable-1" aria-expanded="false">
                                <svg width="20" xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"
                                     stroke="currentColor">
                                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                                          d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"></path>
                                </svg>
                            </i>
                        </div>
                    </div>
                    <div class="card-body">
                        <div class="collapse" id="datatable-1">
                            <div class="card"><kbd class="bg-dark"><pre id="bootstrap-datatables"
                                                                        class="text-white"><code>
&#x3C;table id=&#x22;datatable&#x22; class=&#x22;table data-table table-striped table-bordered&#x22; &#x3E;
   &#x3C;thead&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;th&#x3E;Name&#x3C;/th&#x3E;
         &#x3C;th&#x3E;Position&#x3C;/th&#x3E;
         &#x3C;th&#x3E;Office&#x3C;/th&#x3E;
         &#x3C;th&#x3E;Age&#x3C;/th&#x3E;
         &#x3C;th&#x3E;Start date&#x3C;/th&#x3E;
         &#x3C;th&#x3E;Salary&#x3C;/th&#x3E;
      &#x3C;/tr&#x3E;
   &#x3C;/thead&#x3E;
   &#x3C;tbody&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Tiger Nixon&#x3C;/td&#x3E;
         &#x3C;td&#x3E;System Architect&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Edinburgh&#x3C;/td&#x3E;
         &#x3C;td&#x3E;61&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2011/04/25&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$320,800&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Garrett Winters&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Accountant&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Tokyo&#x3C;/td&#x3E;
         &#x3C;td&#x3E;63&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2011/07/25&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$170,750&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Ashton Cox&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Junior Technical Author&#x3C;/td&#x3E;
         &#x3C;td&#x3E;San Francisco&#x3C;/td&#x3E;
         &#x3C;td&#x3E;66&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2009/01/12&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$86,000&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Cedric Kelly&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Senior Javascript Developer&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Edinburgh&#x3C;/td&#x3E;
         &#x3C;td&#x3E;22&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2012/03/29&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$433,060&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Airi Satou&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Accountant&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Tokyo&#x3C;/td&#x3E;
         &#x3C;td&#x3E;33&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2008/11/28&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$162,700&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Brielle Williamson&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Integration Specialist&#x3C;/td&#x3E;
         &#x3C;td&#x3E;New York&#x3C;/td&#x3E;
         &#x3C;td&#x3E;61&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2012/12/02&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$372,000&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Herrod Chandler&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Sales Assistant&#x3C;/td&#x3E;
         &#x3C;td&#x3E;San Francisco&#x3C;/td&#x3E;
         &#x3C;td&#x3E;59&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2012/08/06&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$137,500&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Rhona Davidson&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Integration Specialist&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Tokyo&#x3C;/td&#x3E;
         &#x3C;td&#x3E;55&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2010/10/14&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$327,900&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Colleen Hurst&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Javascript Developer&#x3C;/td&#x3E;
         &#x3C;td&#x3E;San Francisco&#x3C;/td&#x3E;
         &#x3C;td&#x3E;39&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2009/09/15&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$205,500&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Sonya Frost&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Software Engineer&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Edinburgh&#x3C;/td&#x3E;
         &#x3C;td&#x3E;23&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2008/12/13&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$103,600&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Jena Gaines&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Office Manager&#x3C;/td&#x3E;
         &#x3C;td&#x3E;London&#x3C;/td&#x3E;
         &#x3C;td&#x3E;30&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2008/12/19&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$90,560&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Quinn Flynn&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Support Lead&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Edinburgh&#x3C;/td&#x3E;
         &#x3C;td&#x3E;22&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2013/03/03&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$342,000&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Charde Marshall&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Regional Director&#x3C;/td&#x3E;
         &#x3C;td&#x3E;San Francisco&#x3C;/td&#x3E;
         &#x3C;td&#x3E;36&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2008/10/16&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$470,600&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Haley Kennedy&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Senior Marketing Designer&#x3C;/td&#x3E;
         &#x3C;td&#x3E;London&#x3C;/td&#x3E;
         &#x3C;td&#x3E;43&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2012/12/18&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$313,500&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Tatyana Fitzpatrick&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Regional Director&#x3C;/td&#x3E;
         &#x3C;td&#x3E;London&#x3C;/td&#x3E;
         &#x3C;td&#x3E;19&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2010/03/17&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$385,750&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Michael Silva&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Marketing Designer&#x3C;/td&#x3E;
         &#x3C;td&#x3E;London&#x3C;/td&#x3E;
         &#x3C;td&#x3E;66&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2012/11/27&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$198,500&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Paul Byrd&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Chief Financial Officer (CFO)&#x3C;/td&#x3E;
         &#x3C;td&#x3E;New York&#x3C;/td&#x3E;
         &#x3C;td&#x3E;64&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2010/06/09&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$725,000&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Gloria Little&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Systems Administrator&#x3C;/td&#x3E;
         &#x3C;td&#x3E;New York&#x3C;/td&#x3E;
         &#x3C;td&#x3E;59&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2009/04/10&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$237,500&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Bradley Greer&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Software Engineer&#x3C;/td&#x3E;
         &#x3C;td&#x3E;London&#x3C;/td&#x3E;
         &#x3C;td&#x3E;41&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2012/10/13&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$132,000&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
      &#x3C;tr&#x3E;
         &#x3C;td&#x3E;Dai Rios&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Personnel Lead&#x3C;/td&#x3E;
         &#x3C;td&#x3E;Edinburgh&#x3C;/td&#x3E;
         &#x3C;td&#x3E;35&#x3C;/td&#x3E;
         &#x3C;td&#x3E;2012/09/26&#x3C;/td&#x3E;
         &#x3C;td&#x3E;$217,500&#x3C;/td&#x3E;
      &#x3C;/tr&#x3E;
&#x3C;/table&#x3E;
</code></pre>
                            </kbd></div>
                        </div>
                        <div class="table-responsive">
                            <table id="datatable-1" class="table data-table table-striped table-bordered">
                                <thead>
                                <tr>
                                    <th>文章ID</th>
                                    <th>文章内容</th>
                                    <th>文章作者</th>
                                    <th>用户IP</th>
                                    <th>类型</th>
                                    <th>发布时间</th>
                                    <th>转发量</th>
                                    <th>评论量</th>
                                    <th>点赞量</th>
                                    <th>情感分析</th>
                                </tr>
                                </thead>
                                <tbody>
                                {% for article in articleList %}
                                    <tr>
                                        <td>{{ article[0] }}</td>
                                        <td><a href="{{ article[8] }}" target="_blank">{{ article[1] }}</a></td>
                                        <td style="width:100px"><a href="{{ article[11] }}"
                                                                   target="_blank">{{ article[10] }}</a></td>
                                        <td style="width:100px">{{ article[5] }}</td>
                                        <td style="width:50px">{{ article[7] }}</td>
                                        <td class="text-center" style="width:100px">{{ article[6] }}</td>
                                        <td class="text-center" style="width:60px">{{ article[2] }}💖</td>
                                        <td class="text-center" style="width:60px">{{ article[3] }}👆</td>
                                        <td class="text-center" style="width:60px">{{ article[4] }}👍</td>
                                        <td class="text-center" style="width:80px">
                                            {% if article[-1] == '正面' %}
                                                <span class="text-success">
                                                    {{ article[-1] }}
                                                    </span>
                                            {% elif article[-1] == '负面' %}
                                                <span class="text-danger">
                                                    {{ article[-1] }}
                                                    </span>
                                            {% else %}
                                                <span class="text-info">
                                                    {{ article[-1] }}
                                                    </span>
                                            {% endif %}
                                        </td>
                                    </tr>
                                {% endfor %}
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
​
            </div>
        </div>
    </div>
{% endblock %}

articleDao.py实现下获取所有微博数据:

def getAllArticle():
    """
    获取所有帖子信息
    :return:
    """
    con = None
    try:
        con = dbUtil.getCon()
        cursor = con.cursor()
        sql = "select * from t_article"
        cursor.execute(sql)
        return cursor.fetchall()
    except Exception as e:
        print(e)
        con.rollback()
        return None
    finally:
        dbUtil.closeCon(con)

page.py里实现路由业务方法articleData:

@pb.route('/articleData')
def articleData():
    """
    微博舆情分析
    :return:
    """
    articleOldList = articleDao.getAllArticle()
    articleNewList = []
    for article in articleOldList:
        article = list(article)
        # 情感分析
        sentiments = ''
        stc = SnowNLP(article[1]).sentiments
        if stc > 0.6:
            sentiments = '正面'
        elif stc < 0.2:
            sentiments = '负面'
        else:
            sentiments = '中性'
        article.append(sentiments)
        articleNewList.append(article)
    return render_template('articleData.html', articleList=articleNewList)

运行显示:


网站公告

今日签到

点亮在社区的每一天
去签到