爬取豆瓣Top250部电影+Flask框架显示

1、导入包

from flask import Flask,render_template
import os
import sqlite3
import jieba                            #分词
import numpy as np                      #矩阵运算(可将图片转为数组)
from matplotlib import pyplot as plt    #绘图
from wordcloud import WordCloud         #词云
from PIL import Image                   #图片处理

2、设置首页

可以直接通过:ip地址:5000(端口号)
或者:ip地址:5000(端口号)/index
进行访问首页

#首页
@app.route('/')
def index():
    return render_template('index.html')

#home
@app.route('/index')
def home():
    return index()

在这里插入图片描述

3、在网页显示250条电影数据

这些数据是从sqlite中取出来的,如何爬取数据和存储到数据库:点击跳转

#movie
@app.route('/movie')
def movie():
    #数据库操作将取出来的数据存放到列表
    dataList = []

    connect = sqlite3.connect('movies.db')
    cursor = connect.cursor()
    sql = "select * from movie250"
    execute = cursor.execute(sql)
    for i in execute:
        dataList.append(i)
    connect.commit()
    connect.close()
    return render_template('movie.html',dataList = dataList)

在这里插入图片描述

4、通过数据库查询出得分电影分数分布并作图

很好用的用代码作图程序Echarts:https://echarts.apache.org/zh/index.html

#score
@app.route('/score')
def score():
    score = []  #存放评分
    count = []  #评分数

    connect = sqlite3.connect('movies.db')
    cursor = connect.cursor()
    sql = "select score,count(score) from movie250 group by score "
    execute = cursor.execute(sql)
    for e in execute:
        score.append(e[0])
        count.append(e[1])

    return render_template('score.html',score = score,count = count)

在这里插入图片描述

5、将电影的概述作成词云

  • 首先将数据库的数据取出来,合并成一个字符串
  • 通过jieba进行分词,它会将词自动分裂出来,返回列表然后我们join通过空格分开这些词又变成一个字符串
  • 打来图片,通过numpy将图片(白色背景)转换为数组
  • 使用WordCloud设置一些图片参数并把图片和分好的字符串结合
  • plt进行图片进一步修改,然后保存
#dec 词云
@app.route('/dec')
def dec():

    connect = sqlite3.connect('movies.db')
    cursor = connect.cursor()
    sql = "select inq from movie250"
    result = cursor.execute(sql)
    text = ""
    #将查询出来的结果作成字符串
    for t in result:
        text = t[0]+text
    connect.commit()
    connect.close()

    #判断是否已经生成了cloud.jpg
    save_path = r'static/assets/img/cloud.jpg'
    if not os.path.exists(save_path):
        cloud(text)
    return render_template('dec.html')

#将字符串作成词云图片
def cloud(text):

    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"              #微软雅黑     #'C:\Windows\Fonts\STZHONGS.TTF',若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
    ).generate_from_text(string)
    plt.figure(1)  # 新建一个名叫 Figure1的画图窗口
    plt.imshow(wc) #显示图片,同时也显示其格式
    plt.axis('off') # 是否显示x轴、y轴下标 #plt.show() #显示生成合成图片
    plt.savefig(r'static/assets/img/cloud.jpg',dpi=500) #保存合成图片,dpi是设定分辨率,默认为400

在这里插入图片描述
最后全部源码放到:点击跳转

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个项目的大致流程如下: 1. 使用 Python 的 requests 和 Beautiful Soup 库爬取猫眼电影网站的电影信息,包括电影名称、评分、评论人数、上映时间等等。可以使用多线程或异步加速爬取过程。 2. 将爬取到的电影信息存储到 MySQL 数据库中,可以使用 Python 的 pymysql 库进行数据库的连接和操作。 3. 使用 Flask 框架编写 Web 应用程序,提供数据查询和展示功能。可以使用 Flask 的模板引擎 Jinja2 来渲染页面。 4. 使用 PyChart 库对电影数据进行可视化分析,生成各种图表,如柱状图、折线图、饼图等等,以展示电影数据的特征和规律。 具体实现步骤如下: 1. 爬取猫眼电影网站的电影信息 使用 requests 和 Beautiful Soup 库爬取猫眼电影网站的电影信息。可以先通过浏览器查看网页的源代码,找到电影信息的 HTML 标签和属性,再通过 Beautiful Soup 解析并提取出需要的信息。例如,可以使用以下代码爬取电影名称和评分: ```python import requests from bs4 import BeautifulSoup url = 'https://maoyan.com/films' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') movies = soup.find_all('div', class_='movie-item-hover') for movie in movies: name = movie.find('span', class_='name').text score = movie.find('span', class_='score').text print(name, score) ``` 2. 将电影信息存储到 MySQL 数据库中 使用 pymysql 库连接 MySQL 数据库,并将爬取到的电影信息存储到数据库中。可以先创建一个 movies 表来存储电影信息,包括电影名称、评分、评论人数、上映时间等字段。例如,可以使用以下代码将电影信息存储到数据库中: ```python import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', port=3306, user='root', password='123456', database='test', charset='utf8mb4' ) # 创建 movies 表 cursor = conn.cursor() create_table_sql = ''' CREATE TABLE IF NOT EXISTS movies ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, score FLOAT NOT NULL, comments INT NOT NULL, release_date DATE NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ''' cursor.execute(create_table_sql) # 将电影信息插入数据库 for movie in movies: name = movie.find('span', class_='name').text score = float(movie.find('span', class_='score').text) comments = int(movie.find('div', class_='movie-item-number').find_all('span')[2].text[:-3]) release_date = movie.find_all('div', class_='movie-hover-title')[1].text.split(':')[1] insert_sql = f''' INSERT INTO movies (name, score, comments, release_date) VALUES ('{name}', {score}, {comments}, '{release_date}') ''' cursor.execute(insert_sql) conn.commit() # 关闭连接 cursor.close() conn.close() ``` 3. 使用 Flask 编写 Web 应用程序 使用 Flask 框架编写 Web 应用程序,提供数据查询和展示功能。可以使用 Flask 的模板引擎 Jinja2 来渲染页面。例如,可以先创建一个 index.html 模板文件来展示电影数据: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>猫眼电影数据分析</title> </head> <body> <h1>猫眼电影数据分析</h1> <table> <tr> <th>电影名称</th> <th>评分</th> <th>评论人数</th> <th>上映时间</th> </tr> {% for movie in movies %} <tr> <td>{{ movie.name }}</td> <td>{{ movie.score }}</td> <td>{{ movie.comments }}</td> <td>{{ movie.release_date }}</td> </tr> {% endfor %} </table> </body> </html> ``` 然后,在 Flask 应用程序中定义一个路由,从数据库中获取电影数据,并渲染模板文件: ```python from flask import Flask, render_template import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', port=3306, user='root', password='123456', database='test', charset='utf8mb4' ) # 创建 Flask 应用程序 app = Flask(__name__) # 定义路由,获取电影数据并渲染模板文件 @app.route('/') def index(): cursor = conn.cursor(pymysql.cursors.DictCursor) select_sql = ''' SELECT * FROM movies ''' cursor.execute(select_sql) movies = cursor.fetchall() cursor.close() return render_template('index.html', movies=movies) # 启动应用程序 if __name__ == '__main__': app.run(debug=True) ``` 4. 使用 PyChart 库进行数据可视化分析 使用 PyChart 库对电影数据进行可视化分析,生成各种图表,如柱状图、折线图、饼图等等,以展示电影数据的特征和规律。例如,可以使用以下代码生成一个柱状图,展示电影评分的分布情况: ```python from pychart import * import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', port=3306, user='root', password='123456', database='test', charset='utf8mb4' ) # 查询电影数据 cursor = conn.cursor() select_sql = ''' SELECT score, COUNT(*) AS count FROM movies GROUP BY score ''' cursor.execute(select_sql) data = cursor.fetchall() cursor.close() # 生成柱状图 chart = VerticalBarChart() chart.addDataset([row[1] for row in data]) chart.setLegend([f'{row[0]:.1f} 分' for row in data]) chart.setXAxis({'title': '评分'}) chart.setYAxis({'title': '电影数量'}) chart.setTitle('电影评分分布图') chart.setColors(['blue', 'red', 'green', 'yellow', 'purple']) chart.download('score.png') ``` 以上是一个简单的 Python 爬取猫眼电影+MySQL+Flask+PyChart 数据分析的项目流程,具体实现还需要根据实际需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值