Python数据分析案例——中国高票房电影分析(爬虫获取数据及分析可视化全流程)

Python数据分析案例——中国高票房电影分析(爬虫获取数据及分析可视化全流程)

作为程序员,我们不仅能编写业务逻辑,还能通过技术手段挖掘数据背后的价值。电影市场蕴含着丰富的数据分析场景,高票房电影的成功因素一直是行业关注的焦点。本文将带您实现从 0 到 1 的中国高票房电影数据分析:从搭建爬虫获取数据,到清洗处理,最终通过可视化分析揭示高票房电影的特征规律。

一、项目背景与目标

中国电影市场已成为全球第二大电影市场,每年上映数百部影片,但票房分化严重 —— 少数影片占据大部分市场份额。分析高票房电影的共性特征,对理解观众偏好、指导电影创作具有重要意义。

本项目目标:

  1. 爬取中国影史票房排行榜数据(含票房、类型、导演、演员等信息)
  2. 清洗并结构化数据,构建分析数据集
  3. 通过多维度可视化,挖掘高票房电影的特征(类型、档期、主创团队等)
  4. 探索影响电影票房的关键因素

二、环境准备

首先安装所需的 Python 库:

bash

pip install requests beautifulsoup4 pandas numpy matplotlib seaborn wordcloud jieba lxml

导入必要的库:

python

运行

import re
import time
import json
import requests
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import jieba
from collections import Counter
import warnings

# 设置中文字体
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
warnings.filterwarnings('ignore')

三、电影数据爬虫实现

3.1 目标网站分析

我们选择猫眼专业版票房排行榜作为数据来源(https://piaofang.maoyan.***/rankings/year),该平台提供了完整的电影票房及相关信息。通过分析页面结构,确定需要爬取的字段:

  • 电影名称、票房(亿元)、上映时间、上映天数
  • 类型、导演、主演
  • 评分(观众评分、专业评分)
  • 国家 / 地区

3.2 爬虫实现

python

运行

class MaoyanBoxOfficeSpider:
    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
            'A***ept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
            'Referer': 'https://piaofang.maoyan.***/'
        }
        self.movie_data = []  # 存储电影数据
        self.base_url = 'https://piaofang.maoyan.***/rankings/year'
        
    def get_page(self, url, params=None, retry=3):
        """获取页面内容"""
        try:
            response = requests.get(url, headers=self.headers, params=params, timeout=10)
            if response.status_code == 200:
                return response.text
            else:
                print(f"请求失败,状态码:{response.status_code}")
                if retry > 0:
                    time.sleep(2)
                    return self.get_page(url, params, retry-1)
                return None
        except Exception as e:
            print(f"请求出错:{str(e)}")
            if retry > 0:
                time.sleep(2)
                return self.get_page(url, params, retry-1)
            return None
    
    def parse_list_page(self, html):
        """解析排行榜列表页,提取电影详情页链接"""
        soup = BeautifulSoup(html, 'lxml')
        movie_items = soup.select('.movie-list > li')
        detail_urls = []
        
        for item in movie_items:
            a_tag = item.select_one('.movie-name > a')
            if a_tag and 'href' in a_tag.attrs:
                detail_url = 'https://piaofang.maoyan.***' + a_tag['href']
                detail_urls.append(detail_url)
        
        return detail_urls
    
    def parse_detail_page(self, html, url):
        """解析电影详情页,提取电影信息"""
        try:
            soup = BeautifulSoup(html, 'lxml')
            
            # 电影名称
            title = soup.select_one('.info-title').get_text().strip() if soup.select_one('.info-title') else ''
            
            # 票房信息(提取数字)
            box_office_text = soup.select_one('.box-num')
转载请说明出处内容投诉
CSS教程网 » Python数据分析案例——中国高票房电影分析(爬虫获取数据及分析可视化全流程)

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买