项目截图
概述
该项目旨在对豆瓣Top 250电影进行全面的数据分析,使用了Python爬虫、Flask框架进行开发,并采用了Echarts进行数据可视化以及WordCloud进行词云分析。应用展示了多个功能,如电影列表、评分分布、词频统计和团队信息。
主要功能
首页: 显示项目的概述和统计数据,包括经典电影数量、评分统计、词汇统计和团队成员数量。
电影列表页: 展示豆瓣Top 250电影的详细信息,包括电影中文名称、外文名称、评分、评价人数、一句话概述及其他信息。
评分分布页: 通过柱状图展示豆瓣Top 250电影的评分分布情况,提供用户对评分分布的直观了解。
词云统计页: 根据250部电影的一句话描述,提炼出词云树,通过词云图展示词汇的频率,让用户更清晰地了解人们对经典电影的理解。
团队页: 展示团队成员的信息。
技术实现
Python爬虫: 使用Python爬虫从豆瓣网站上抓取电影数据。
Flask框架: 使用Flask搭建Web应用,实现前后端的交互。
SQLite数据库: 使用SQLite数据库存储爬取到的电影数据。
Echarts: 使用Echarts进行数据的可视化,生成评分分布的柱状图。
WordCloud: 使用WordCloud生成词云图,进行词频统计和展示。
Matplotlib: 配合WordCloud进行词云图的绘制和保存。
数据库结构
- movie250表: 存储豆瓣Top 250电影的详细信息,包括电影中文名称、外文名称、评分、评价人数等字段。
使用方法
启动Flask应用:
if __name__ == '__main__': app.run()
访问首页,通过浏览器访问
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电影数据的分析和可视化展示,是一个完整的全栈项目示例。