跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

基于 Python Flask 的电影票房数据采集分析与可视化系统

本项目基于 Python Flask 框架与 MySQL 数据库构建,利用 Selenium 和 Requests 从艺恩网抓取电影票房数据。系统通过 Echarts 实现地区占比、月份趋势及类型分布的可视化展示,支持按年份筛选实时排名并记录采集日志。代码包含完整的爬虫逻辑与数据库交互流程,适合用于数据分析实战或毕业设计参考。

剑仙发布于 2026/3/24更新于 2026/6/2022 浏览
基于 Python Flask 的电影票房数据采集分析与可视化系统

项目概述

本项目是一个完整的电影票房数据采集、存储与分析可视化系统。后端采用 Python Flask 框架搭建,数据持久化使用 MySQL,前端可视化依托 Echarts 实现,并通过 Selenium 和 Requests 库完成从艺恩电影票房网的数据抓取。

系统旨在解决电影行业数据分散、查询不便的问题,提供从实时采集到多维分析的全流程闭环。用户不仅可以查看实时的票房排名,还能通过图表直观了解地区分布、月份趋势及类型占比等关键指标。

核心功能模块

  1. 地区票房占有率分析:利用环形图展示各地区票房占比,支持鼠标悬停查看详细数值。
  2. 月份票房分析:通过横向条形图呈现月度票房走势,便于观察季节性波动。
  3. 电影类型票房占有率:使用玫瑰图对比不同题材的票房表现。
  4. 首页概览:集成票房 Top20、场均人次排名等快捷入口,快速掌握市场热点。
  5. 实时票房排名:支持按年份筛选,以表格形式展示影片名称、总票房、平均票价等详细信息。
  6. 采集日志与数据管理:记录每次爬取的操作人、时间、数据条数及目标地址,确保数据来源可追溯。
  7. 在线数据采集环境:内置 Python 代码编辑与运行界面,方便开发者直接修改爬虫脚本并执行。

界面交互设计

系统界面注重数据的直观呈现。在地区票房分析页面,环形图的扇区颜色区分明显,交互反馈灵敏;月份分析则侧重于时间序列的对比,条形长度直接反映票房规模。首页作为导航中枢,聚合了所有核心分析模块的入口,顶部导航栏保持全局一致,确保操作流畅。

地区票房分析

月份票房分析

电影类型票房

技术实现细节

爬虫逻辑

数据采集是系统的核心环节。我们使用 Selenium 模拟浏览器行为,因为艺恩网的票房数据往往需要动态加载或依赖下拉菜单选择年份。以下是核心爬虫脚本的实现思路:

首先初始化 Chrome 驱动,访问目标 URL。接着定位年份下拉菜单,通过循环遍历选项来抓取不同年份的数据。这里需要注意设置合理的等待时间(time.sleep),避免请求过快被反爬机制拦截。

from selenium import webdriver
from selenium.webdriver.support.ui import Select
import sys
sys.path.append('utils')
import mysqlHelper
 datetime
 time


 ():
    web = webdriver.Chrome()
    web.get()
    
    
    sel_list = web.find_element_by_xpath()
    sel = Select(sel_list)
    
    
    movie_id = []
    movie_name = []
    movie_type = []
    movie_sale_number = []
    movie_average_sale = []
    movie_average_people = []
    movie_country = []
    movie_online_time = []
    movie_year = []
    
    startTime = datetime.datetime.now().strftime() +  + time.strftime()
    
     s  ((sel.options)):
        
        sel.select_by_index(s)
        time.sleep()  
        
        
        tr_list = web.find_elements_by_xpath()
         tr  ((tr_list)):
            
            ele_sel = web.find_element_by_xpath()
            year = ele_sel.get_attribute()
            
            
            money = tr_list[tr].find_element_by_xpath().text
            money = money.replace(, )
            
            movie_id.append(tr_list[tr].find_element_by_xpath().text)
            movie_name.append(tr_list[tr].find_element_by_xpath().text)
            movie_type.append(tr_list[tr].find_element_by_xpath().text)
            movie_sale_number.append(money)
            movie_average_sale.append(tr_list[tr].find_element_by_xpath().text)
            movie_average_people.append(tr_list[tr].find_element_by_xpath().text)
            movie_country.append(tr_list[tr].find_element_by_xpath().text)
            movie_online_time.append(tr_list[tr].find_element_by_xpath().text)
            movie_year.append(year)
    
    ()
    web.close()
    
    rows = (movie_id, movie_name, movie_type, movie_sale_number, movie_average_sale, 
               movie_average_people, movie_country, movie_online_time, movie_year)
    
    mysql = mysqlHelper.get_a_conn()
    sql = 
    mysql.fetchall(sql)
    
     row  rows:
        (row)
        sql =  % row
        mysql.execute(sql)
    
    ()
    
    
    endTime = datetime.datetime.now().strftime() +  + time.strftime()
    url = 
    user_name = username
    sql = 
    result = mysql.fetchall(sql)
    data_num = result[].get()
    sql =  % (user_name, startTime, endTime, data_num, url)
    mysql.execute(sql)

 __name__ == :
    getData1()
import
import
# 获取列表信息
def
getData1
username
"https://www.endata.com.cn/BoxOffice/BO/Year/index.html"
# 找到下拉菜单
'//*[@id="OptionDate"]'
# 初始化信息列表
'%Y-%m-%d'
' '
"%H:%M:%S"
for
in
range
len
# 使用 index 索引逐个选择下拉菜单
2
# 等待页面加载
# 获取到每一个 tr
'//*[@id="TableList"]/table/tbody/tr'
for
in
range
len
# 获取 select 选中的值
'//*[@id="OptionDate"]'
'value'
# 获取每一个 tr 里的信息
'./td[4]'
','
''
'./td[1]'
'./td[2]'
'./td[3]'
'./td[5]'
'./td[6]'
'./td[7]'
'./td[8]'
print
'数据获取完毕。。。'
zip
'truncate table tb_movie_year'
for
in
print
'insert into tb_movie_year (id,movie_name,movie_type,movie_money,movie_price,movie_peo,movie_country,movie_date,movie_year) values("%s","%s","%s","%s","%s","%s","%s","%s","%s")'
print
'数据入库完毕。。。'
# 保存日志
'%Y-%m-%d'
' '
"%H:%M:%S"
'https://www.endata.com.cn/BoxOffice/BO/Year/index.html'
"SELECT count(1) num FROM tb_movie_year"
0
'num'
'insert into tbl_data_log (user_name,start_time,end_time,data_num,data_url) values ("%s","%s","%s","%s","%s")'
if
'__main__'
"脚本录入"

数据库与日志

数据清洗后存入 tb_movie_year 表。为了监控爬虫状态,系统同时维护 tbl_data_log 表,记录每次任务的起止时间和数据量。这种设计不仅方便排查问题,也为后续优化爬虫策略提供了数据支撑。

总结

该系统实现了从数据源抓取到最终可视化的完整链路。通过 Flask 提供轻量级 API,结合 Echarts 的前端渲染能力,使得复杂的数据结构变得易于理解。对于希望学习 Python 爬虫、Web 开发或数据分析的同学来说,这是一个不错的实战案例。代码中包含了异常处理的基础思路和日志记录机制,在实际部署时可根据需求进一步增强稳定性。

目录

  1. 项目概述
  2. 核心功能模块
  3. 界面交互设计
  4. 技术实现细节
  5. 爬虫逻辑
  6. 获取列表信息
  7. 数据库与日志
  8. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 无线网络与有线网络叠加加速工具介绍
  • 电力行业智能客服案例:知识图谱与大模型驱动方案解析
  • AI 赋能产品经理:工作流提效与职业转型实战
  • 电商系统高并发库存设计与扣减策略
  • Python 开源库 Streamlit 详解
  • 前端高频面试题:TypeScript 篇
  • Go 语言结合 DeepSeek 大模型构建智能监控系统
  • Windows 部署 OpenClaw 集成 DeepSeek 与飞书实现本地 AI 控制
  • C++ 继承机制详解:从基础到多继承与组合
  • Spring Boot 实现三模安全登录:微信扫码 + 手机 + 邮箱验证码
  • 为什么 VsCode 远程 Copilot 用不了 Claude Agent?系统权限不足的解决策略
  • 文心一言 4.0 调用性能优化实战
  • 安川机器人与多种 PLC 的通讯配置及连接案例
  • 基于 ECharts 与 Three.js 的碳排放可视化大屏实战
  • 解决新机型 Copilot 键替代右 Ctrl 键问题
  • 反转链表:双指针迭代与头插法详解
  • GLM-5 发布:开源模型综合排名第一,Agentic 能力与前端细节显著增强
  • 低光图像重构与去噪新视角:通用架构与超越
  • 6 款免费 AI 写作软件测评及去 AI 味方案
  • OpenClaw 集成 GitHub Copilot 配置指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online