跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Python算法

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

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

剑仙发布于 2026/3/24更新于 2026/5/66 浏览
基于 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
import 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
# 获取列表信息
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. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • C++ STL 常用算法实战与解析
  • AI 辅助编程:利用 GitHub Copilot 等工具提升开发效率
  • AI 工具链实战:MLflow 实验跟踪与模型管理
  • AgentScope Java 多智能体框架
  • 二级 Python 考试综合应用题真题及参考代码解析
  • 2026 年高校 AIGC 检测升级下的论文降重工具选型指南
  • AI 辅助生成专业级 UI 工具:UI UX Pro Max 实战指南
  • 前端虚拟列表原理深度解析与实战实现
  • 2026 年知网 AIGC 检测算法升级要点解析
  • 10 款主流 UI 设计工具深度评测:从原型到交付的全链路选择
  • Outlook 个人邮箱 OAuth 2.0 认证配置全流程
  • 5 个免费股票数据 API 实测对比:从 AkShare 到 BaoStock
  • 19 个合法的黑客技术在线练习平台推荐
  • Stable Diffusion 本地部署与快速上手指南
  • GEO 多平台 AI 监控系统实战:支持 ChatGPT、豆包等
  • Windows 10/11 部署 OpenClaw:环境搭建与机器人互联
  • Linux 本地部署 ESPHome 及外网访问方案
  • 本地搭建带知识库的 AI 助手:Ollama + Open WebUI 实战
  • OpenAI 集成 LangChain 操作实战详解
  • 第六届人工智能与工业技术应用国际学术会议(AIITA 2026)

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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