爬虫程序来获取流行的电影资讯,并通过大数据分析和可视化工具展示结果

适用于毕业设计🔥!!!

1. 爬虫程序开发

1.1 目标网站选择
  • 豆瓣电影:提供电影评分、评论、热门电影等信息,适合国内用户。
  • IMDb:国际电影数据库,适合全球电影资讯。
  • 猫眼电影:提供实时票房、排片信息,适合国内电影市场分析。
  • 烂番茄:提供专业影评人和观众评分,适合多维度分析。
1.2 爬虫工具
  • Scrapy框架:更适合大规模数据抓取,支持异步请求、自动去重、数据管道等功能。
  • 反爬虫策略
    • 使用随机User-Agent和IP代理池,避免被封禁。
    • 设置合理的请求间隔,模拟人类操作。
    • 使用selenium处理动态加载的内容(如JavaScript渲染的页面)。
1.3 爬虫代码
import scrapy
from scrapy.http import Request

class MovieSpider(scrapy.Spider):
    name = 'movie_spider'
    start_urls = ['https://movie.douban.com/chart']

    def parse(self, response):
        for movie in response.css('div.movie-item'):
            yield {
                'title': movie.css('span.title::text').get(),
                'rating': movie.css('span.rating::text').get(),
                'url': movie.css('a::attr(href)').get()
            }
        
        # 翻页逻辑
        next_page = response.css('a.next::attr(href)').get()
        if next_page:
            yield Request(url=response.urljoin(next_page), callback=self.parse)

2. 大数据分析

2.1 数据清洗与存储
  • 数据清洗:使用pandas处理缺失值、重复数据,格式化评分和日期字段。
  • 数据存储:将数据存储到数据库(如MySQL、MongoDB)或本地文件(如CSV、JSON),方便后续分析。
import pandas as pd

# 假设movies是一个包含电影数据的列表
df = pd.DataFrame(movies)
df['rating'] = df['rating'].astype(float)

# 数据清洗
df.drop_duplicates(inplace=True)  # 去重
df.dropna(subset=['rating'], inplace=True)  # 删除缺失值

# 保存到CSV
df.to_csv('movie_data.csv', index=False)
2.2 数据分析
  • 多维度分析
    • 按评分分布分析电影质量。
    • 按上映时间分析电影热度趋势。
    • 按类型(如动作、喜剧)分析用户偏好。
  • 机器学习:使用scikit-learn构建推荐模型,基于用户历史行为推荐电影。
# 示例:按类型分析电影评分
genre_ratings = df.groupby('genre')['rating'].mean().sort_values(ascending=False)
print(genre_ratings)

3. 可视化展示

3.1 可视化工具选择
  • Plotly:交互式图表,适合网页展示。
  • Dash:基于Plotly的Web应用框架,适合构建动态可视化仪表盘。
  • Tableau Public:免费版本适合创建复杂可视化图表并嵌入网页。
3.2 可视化图表优化
  • 评分分布图:使用直方图展示电影评分分布。
  • 热度趋势图:使用折线图展示电影热度随时间的变化。
  • 类型偏好图:使用饼图或条形图展示用户对不同类型电影的偏好。
import plotly.express as px

# 评分分布图
fig = px.histogram(df, x='rating', nbins=20, title='电影评分分布')
fig.show()

# 类型偏好图
fig = px.pie(df, names='genre', title='电影类型偏好')
fig.show()

4. 网页设计与展示

以下是网页设计中可视化部分的详细代码示例,使用 PlotlyDash 构建一个交互式电影数据分析仪表盘。Dash 是一个基于 Flask 和 React 的 Python 框架,适合快速构建数据可视化网页应用。


4.1. 安装依赖

首先,确保安装了以下 Python 库:

pip install dash plotly pandas

4.2. 构建 Dash 应用

以下是一个完整的 Dash 应用代码示例,包含电影评分分布图、类型偏好图和热度趋势图。

import dash
from dash import dcc, html, Input, Output
import plotly.express as px
import pandas as pd

# 示例电影数据
data = {
    'title': ['Movie A', 'Movie B', 'Movie C', 'Movie D', 'Movie E'],
    'rating': [8.5, 9.0, 7.8, 8.2, 8.9],
    'genre': ['Action', 'Comedy', 'Drama', 'Action', 'Comedy'],
    'release_date': ['2023-01-01', '2023-02-15', '2023-03-10', '2023-04-05', '2023-05-20']
}
df = pd.DataFrame(data)

# 初始化 Dash 应用
app = dash.Dash(__name__)

# 网页布局
app.layout = html.Div([
    html.H1("2023年电影数据分析仪表盘", style={'textAlign': 'center'}),
    
    # 电影评分分布图
    html.Div([
        html.H2("电影评分分布"),
        dcc.Graph(id='rating-distribution')
    ]),
    
    # 电影类型偏好图
    html.Div([
        html.H2("电影类型偏好"),
        dcc.Graph(id='genre-preference')
    ]),
    
    # 电影热度趋势图
    html.Div([
        html.H2("电影热度趋势"),
        dcc.Graph(id='popularity-trend')
    ]),
    
    # 交互组件:选择电影类型
    html.Div([
        html.Label("选择电影类型:"),
        dcc.Dropdown(
            id='genre-dropdown',
            options=[{'label': genre, 'value': genre} for genre in df['genre'].unique()],
            value='Action',  # 默认值
            clearable=False
        )
    ])
])

# 回调函数:更新图表
@app.callback(
    [Output('rating-distribution', 'figure'),
     Output('genre-preference', 'figure'),
     Output('popularity-trend', 'figure')],
    [Input('genre-dropdown', 'value')]
)
def update_charts(selected_genre):
    # 过滤数据
    filtered_df = df[df['genre'] == selected_genre]
    
    # 电影评分分布图
    rating_fig = px.histogram(
        filtered_df, x='rating', nbins=10,
        title=f'{selected_genre}类型电影评分分布',
        labels={'rating': '评分'}
    )
    
    # 电影类型偏好图
    genre_fig = px.pie(
        df, names='genre', title='电影类型偏好',
        hole=0.3  # 环形图
    )
    
    # 电影热度趋势图
    trend_fig = px.line(
        filtered_df, x='release_date', y='rating',
        title=f'{selected_genre}类型电影热度趋势',
        labels={'release_date': '上映日期', 'rating': '评分'}
    )
    
    return rating_fig, genre_fig, trend_fig

# 运行应用
if __name__ == '__main__':
    app.run_server(debug=True)

4.3. 代码详解
4.3.1 数据准备
  • 使用 pandas 创建示例电影数据,包含电影名称、评分、类型和上映日期。
4.3.2 网页布局
  • 标题:使用 html.H1 添加仪表盘标题。
  • 图表区域
    • 使用 dcc.Graph 组件嵌入 Plotly 图表。
    • 分别为评分分布图、类型偏好图和热度趋势图分配 id
  • 交互组件
    • 使用 dcc.Dropdown 创建一个下拉菜单,用户可以选择电影类型。
4.3.3 回调函数
  • 功能:根据用户选择的电影类型,动态更新图表。
  • 输入:下拉菜单的值(genre-dropdown)。
  • 输出:三个图表的 figure 属性。
  • 逻辑
    1. 根据选择的电影类型过滤数据。
    2. 使用 Plotly Express 生成评分分布图、类型偏好图和热度趋势图。
4.3.4 图表类型
  • 评分分布图:使用 px.histogram 生成直方图,展示评分分布。
  • 类型偏好图:使用 px.pie 生成饼图,展示不同类型电影的占比。
  • 热度趋势图:使用 px.line 生成折线图,展示电影评分随时间的变化。

4.4.4 运行效果
  1. 启动应用后,访问 http://127.0.0.1:8050/
  2. 页面顶部显示标题“2023年电影数据分析仪表盘”。
  3. 页面分为三个部分:
    • 电影评分分布:直方图展示评分分布。
    • 电影类型偏好:饼图展示不同类型电影的占比。
    • 电影热度趋势:折线图展示评分随时间的变化。
  4. 用户可以通过下拉菜单选择电影类型,图表会动态更新。

5. 进一步优化

5.1 数据动态加载
  • 从数据库或 API 动态加载电影数据,而不是使用静态数据。
5.2 更多交互功能
  • 添加更多筛选条件,如评分范围、上映年份等。
  • 支持用户点击图表查看详细信息。
5.3 美化界面
  • 使用 dash-bootstrap-components 或自定义 CSS 美化页面。
  • 添加导航栏、页脚等组件。
5.4 部署
  • 使用 gunicornDocker 部署应用到服务器。
  • 将应用部署到云平台(如 Heroku、AWS、GCP)。

通过以上代码可以构建一个功能丰富、交互性强的电影数据分析仪表盘,并将其集成到网页中,为用户提供直观的数据展示和推荐功能。


电影推荐

根据数据分析结果,我为大家推荐以下几部电影:

  1. 电影A:评分9.0,剧情紧凑,特效震撼。
  2. 电影B:评分8.8,情感真挚,演员表现出色。
  3. 电影C:评分8.7,悬疑感十足,结局出人意料。

结尾

如果你觉得这篇文章有帮助,请点赞、评论并关注我,获取更多技术干货!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值