基于Flask实现豆瓣Top250电影可视化

发布于:2025-05-31 ⋅ 阅读:(24) ⋅ 点赞:(0)

项目截图

概述

该项目旨在对豆瓣Top 250电影进行全面的数据分析,使用了Python爬虫、Flask框架进行开发,并采用了Echarts进行数据可视化以及WordCloud进行词云分析。应用展示了多个功能,如电影列表、评分分布、词频统计和团队信息。

主要功能
  1. 首页: 显示项目的概述和统计数据,包括经典电影数量、评分统计、词汇统计和团队成员数量。

  2. 电影列表页: 展示豆瓣Top 250电影的详细信息,包括电影中文名称、外文名称、评分、评价人数、一句话概述及其他信息。

  3. 评分分布页: 通过柱状图展示豆瓣Top 250电影的评分分布情况,提供用户对评分分布的直观了解。

  4. 词云统计页: 根据250部电影的一句话描述,提炼出词云树,通过词云图展示词汇的频率,让用户更清晰地了解人们对经典电影的理解。

  5. 团队页: 展示团队成员的信息。

技术实现
  1. Python爬虫: 使用Python爬虫从豆瓣网站上抓取电影数据。

  2. Flask框架: 使用Flask搭建Web应用,实现前后端的交互。

  3. SQLite数据库: 使用SQLite数据库存储爬取到的电影数据。

  4. Echarts: 使用Echarts进行数据的可视化,生成评分分布的柱状图。

  5. WordCloud: 使用WordCloud生成词云图,进行词频统计和展示。

  6. Matplotlib: 配合WordCloud进行词云图的绘制和保存。

数据库结构
  • movie250表: 存储豆瓣Top 250电影的详细信息,包括电影中文名称、外文名称、评分、评价人数等字段。
使用方法
  1. 启动Flask应用:

    if __name__ == '__main__':
        app.run()
    
  2. 访问首页,通过浏览器访问http://localhost:5000/查看应用的各个功能页面。

代码示例
  • Flask路由配置:

    from flask import Flask, render_template
    import sqlite3
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return render_template("/index.html")
    
    @app.route('/index')
    def home():
        return render_template("/index.html")
    
    @app.route('/movie')
    def movie():
        datalist = []
        conn = sqlite3.connect("movie.db")
        cur = conn.cursor()
        sql = '''select * from movie250''';
        data = cur.execute(sql)
        for item in data:
            datalist.append(item)
        cur.close()
        conn.close()
        return render_template("/movie.html",movies = datalist)
    
    @app.route('/score')
    def score():
        score = []
        num = []
        conn = sqlite3.connect("movie.db")
        cur = conn.cursor()
        sql = '''select score,count(score) from movie250 group by score'''
        data = cur.execute(sql)
        for item in data:
            score.append(str(item[0]))
            num.append(item[1])
        cur.close()
        conn.close()
        return render_template("score.html", score=score,num=num)
    
    @app.route('/word')
    def word():
        return render_template("/word.html")
    
    @app.route('/team')
    def team():
        return render_template("/team.html")
    
    if __name__ == '__main__':
        app.run()
    
  • 词云图生成:

    import jieba
    from matplotlib import pyplot as plt
    from wordcloud import WordCloud
    from PIL import Image
    import numpy as np
    import sqlite3
    
    conn = sqlite3.connect('movie.db')
    cur = conn.cursor()
    sql = 'select cname from movie250'
    data =cur.execute(sql)
    text = ""
    for item in data:
        text = text + item[0]
    cur.close()
    conn.close()
    
    cut = jieba.cut(text)
    string = ' '.join(cut)
    print(len(string))
    
    img = Image.open(r'.\static\assets\img\tree.jpg')
    img_array = np.array(img)
    wc = WordCloud(
        background_color = 'white',
        mask = img_array,
        font_path = "msyh.ttc"
    )
    wc.generate_from_text(string)
    fig = plt.figure(1)
    plt.imshow(wc)
    plt.axis('off')
    plt.savefig(r'.\static\assets\img\word.jpg',dpi=500)
    

这个项目通过整合多个技术栈,实现了对豆瓣Top 250电影数据的分析和可视化展示,是一个完整的全栈项目示例。


网站公告

今日签到

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