用 Python 爬取分析每日票房数据


作者:小李子,某外企分析师,主要从事IT行业,但个人非常喜欢电影市场分析,所以经常会写一些电影领域的文章。

博客:http://blog.sina.com.cn/leonmovie

不知不觉又过了一年,挥别2019,让我们拥抱这全新的2020,祝各位新年快乐!

最近在处理一些和有关电影的工作,需要用到一些北美电影票房数据,而这部分数据最权威的网站当属Box Office Mojo(以下简称BOM),于是就上去查看了一下。估计经常关注这个网站的盆友们都知道,这个网站最近刚刚进行了改版,网页排版全面更新,还专门针对移动设备进行了优化(以前的网站页面只有电脑版的),页面虽然好看了不少,但却少了很多数据,之前的网站几乎所有数据都能查到,而现在则只能查到部分数据,有些数据则要到BOM Pro版才能查到,而这个服务是收费的。为了更好地使用数据,还想不花钱,那就只有自己动手丰衣足食,所以笔者就自己写了个Python爬虫,爬取了过去多年的票房数据。以下就以“北美票房每日票房数据”为例,介绍一下如何爬取,其他票房数据类似,只需修改少数代码即可。

图一 要抓取的部分网页的截图

这个爬虫程序完全采用Python语言完成,使用软件为Anaconda 2019.10版(这个目前是最新版的,理论上其包含的各种Python库也是最新的或接近最新的,所以下面的爬虫程序在部分老版软件上可能会出问题,如有问题请及时更新)。爬虫程序主要包括两部分:爬取并存储数据,以及根据数据简单绘制图片。下面就一一讲解一下。

一、爬取和存储数据

首先把需要的包都导入进来。

import requests
import pandas as pd
import time
import matplotlib.pyplot as plt
import matplotlib.dates as mdate
import pylab as mpl  # 导入中文字体,避免显示乱码

这个是我们要用到的每日票房的URL,中间的%s是一会儿要替换的年份

urltemplate = r'https://www.boxofficemojo.com/daily/%s/?view=year' 

这个是数据保存的地方,放在了桌面的一个Excel文档中,因为数据很少,所以根本用不到数据库,Excel足以,当然这里也可以用CSV格式。这里我的路径中包含中文,使用时没有问题,如果大家出现问题,最好使用英文路径。

fileLoc = r'C:\Users\leon\Desktop\BoxOffice\Box Office Mojo票房爬虫\Daily-每日\daily-data.xlsx'

这个是爬虫头部,防止网站的反爬机制。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}

下面是爬虫主体部分,这里有三点要说明,一是mode='a'这里,这个是0.25.1版pandas以后才有的功能,之前的老版本没有这个功能;二是,不知道是不是我的网络有问题,在爬取过程中有掉线的现象出现,所以在这里用了requests.ConnectionError来处理掉线问题;三是,用了一个小窍门,如果直接用pd.read_html(url)也可以读取网页中的数据,但这里先用requests读取网页,再把requests读取的网页代码放入pd.read_html中,这样既可避免网站的反爬虫机制,也可以加快读取速度,因为pd.read_html直接读取网页实在太慢了。

def scraper(file, headers, urltemp, year_start, year_end):
    writer = pd.ExcelWriter(file, engine='openpyxl', mode='a') # 笔者用的文件是xlsx类型,所以这里要指定engine='openpyxl',如果是xls类型,则不用
    for i in range(year_start, year_end+1):
        url = urltemp % i
        try:
            r = requests.get(url, headers=headers)
            if r.status_code == 200:
                source_code = r.text
                df = pd.read_html(source_code)
                df = df[0]
                df.to_excel(writer, sheet_name=str(i), index=False)
                time.sleep(3)# 稍微放慢一下速度,别把人家网站累坏了
        except requests.ConnectionError:
            print('Can not get access to the %s year daily data now' % i)
            return
    writer.save()
    writer.close()


scraper(fileLoc, headers, urltemplate, 1977, 2019)

因为网站只提供到最早1977年的数据,所以就把1977年到2019年数据都给抓下来。

图二 抓取的部分数据的截图

二、根据数据简单绘图

下面这个str_to_datetime函数,是除掉数据Date列中一些不必要的文字,比如有些数据带有“New Year’s Eve”字样,要把这些东西去掉

def str_to_datetime(x):
    if len(x) > 14:
        temp = x.split('2019')
        x = temp[0]+'2019'
    return x

这个str_to_num函数是把“Top 10 Gross”列的数据都转换成数值,因为这些数据从Excel读取到pandas后,都是string格式的数据,要转换成数值格式

def str_to_num(x):
    x = x.replace('$', '')
    x = x.replace(',', '')
    x = int(x)
    return x

在这里我们要做一个“2019年每日票房数据的线形图”,所以要在刚才抓取的文件中读取相应数据,并简单处理一下

table = pd.read_excel(fileLoc, sheet_name='2019')
data = table[['Date', 'Top 10 Gross']]
data['Date'] = data['Date'].apply(str_to_datetime)
data['Top 10 Gross'] = data['Top 10 Gross'].apply(str_to_num)

设置x轴和y轴的数据,x轴是时间数据,y轴是票房数据,其值太大,所以改小点,方便作图

x = pd.to_datetime(data['Date'])
y = data['Top 10 Gross']/1000000

找出票房数据中最大的那个值和其在序列y中的位置,然后找出对应x序列的位置,也就是对应的哪一天

max_loc = y.idxmax()
max_y = y.max()
max_date = x.loc[max_loc]

设置相关参数

mpl.rcParams['font.sans-serif'] = ['SimHei']  # 设置为黑体字
fig = plt.figure(figsize=(16, 6.5))
ax = fig.add_subplot(111)  # 本例的figure中只包含一个图表
ax.set_ylim([0, 200])
plt.tick_params(labelsize=13)

下面这行代码是设置x轴为时间格式,这点很重要,否则x轴显示的将是类似于‘796366’这样的转码后的数字格式

ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))
plt.xticks(pd.date_range(x[len(x)-1], x[0], freq='M'), rotation=90)
text = r'票房最高的一天是%s,其票房为%.2f亿' % (max_date.date(), max_y/100)
plt.annotate(text, xy=(max_date, max_y), fontsize=14, \
             xytext=(max_date+pd.Timedelta(days=10), max_y+10), \
             arrowprops=dict(arrowstyle="->", connectionstyle="arc3"), \
             xycoords='data')
plt.ylabel('票房/百万美元', fontdict={'size':14})
plt.plot(x, y)

完成后这个图片效果如下

图三 2019年北美票房每日数据图

三、结语

上面这个爬虫程序比较简单,并没有用到数据库、多线程等复杂技术,我们更多地应该从所得到的数据中来挖掘更多的价值,笔者接下来会从这些数据中来分析一下好莱坞电影行业过去一年的发展,届时会分享给大家,敬请期待。

▼点击成为社区注册会员      喜欢文章,点个在看

Python中文社区
关注 关注
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬取新冠肺炎实时数据及其可视化分析
12-22
点赞、关注再看,养成良好习惯 Life is short, U need Python 初学Python,快来点我吧 案例:Python爬取新冠肺炎实时数据及其可视化分析 作者:PyQuant 博客:https://blog.csdn.net/qq_33499889 慕课:https://mooc1-2.chaoxing.com/course/207443619.html 本案例适合作为大数据技术基础课程中数据爬取、清洗以及可视化部分的配套教学案例。通过本案例,能够达到以下教学效果: 培养学生爬取网站数据以及数据清洗、加工处理的能力。 案例中通过Python第三方库request获取网站实
Python实战之——机械化操作股票与基金1——获取基金数据
kunfd的博客
03-22 1196
一.前言 学完了基本的Python以后,打算做点自己想做的事情。刚好最近学习投资,觉得对于股票和基金的投资,个人化情绪的存在很大程度上影响了基金和股票的回报率(当然最好的情况下是市场上的其他人有情绪,然而只有你机械化地操作,这样你就可以获取到利润了)。当然要在投资中做到完全的无情绪化那是不可能的,不过对于机器(代码)来说,这就是可能存在的了。因此准备自己谢谢代码看看。这系列的文章可能分为如下:获取...
Python 网页抓取与数据可视化练习:‘金三银四’ 是真的吗?
爬遍所有网站
03-23 173
年之计在于春,2020 的春天因为疫情可能改变了许多人的计划,如三四月份是企业传统招聘高峰期之一,再有许多帅小伙过年拜见了丈母娘催促着得买房等,职场与楼市素有 ‘金三银四’ 的说法,然而,这是真的吗? 最近又学习了一下 Python(为什么是又?因为学了就忘..),想到何不简单验证一下,毕竟数据不会撒谎。 主要流程: 选取楼市情况作为分析对象,与目前公司业务有点相关性。 从武汉市住房保障...
python爬虫实战三:近十年中国电影票房数据爬取分析
热门推荐
weixin_43084570的博客
09-27 1万+
近十年中国电影票房数据爬取分析前言爬取分析十年top10年度top5每年电影数每年总票房二八原则代码与数据 前言 这篇文章主要讲述的是近十年(2010-2019)中国电影票房数据爬取与简单分析。 之所以想到做这个,是因为我最近在一本书上读到这么一段话 2013年受市场热捧的电影行业其实是个现金流状况很差的行业。中国每年会拍七百多部电影,只有两百多部能够上映,其中票房能够超过五亿的屈指可数。即使赚了五亿的票房“大获成功”的电影,扣除分给院线的一半,再扣除发行费,宣传费,制片方能够拿到手的大概只有2亿多一
python气象日值数据_微博自动发布气象数据(一)python获取气象数据
weixin_39851887的博客
02-04 326
今年开始我每天会发布下面这样一条微博:需求示例.png这里面的气象数据都是从别的网站上面获取,需要人工访问网站,查看每个小时的气温和降水量数据,然后计算出来,再编辑成微博发送,这样每天到时间都要进行人工操作显得很麻烦,有时候晚上忙就会忘掉。于是我想到,这个工作其实可以全部交给电脑去自动完成,每天定时去获取网络数据,计算数值,并编辑要发送的内容,自动发送微博。把这个需求分成两部分,一是生成要发送的微...
案例▍Python实战 爬取万条票房数据分析2019春节档电影状况
36大数据
03-02 5049
题图|《流浪地球》海报 作者|量化小白上分记 36大数据获授权转载今年春节档全国共有8部影片上映,对于影片的对比分析已经非常多,孰优孰劣,每个人心里都有一杆秤,不再赘...
【项目实战】python影片数据爬取数据分析django电影数据网络爬虫与分析系统(源码+答疑+文档报告PPT)
qq_2105837402的博客
10-23 270
【项目实战】python影片数据爬取数据分析django电影数据网络爬虫与分析系统(源码+答疑+文档报告PPT)
Python数据分析案例30——中国高票房电影分析(爬虫获取数据分析可视化全流程)
weixin_46277779的博客
09-01 7457
针对中国高票房电影,演示了从数据爬虫获取,到清洗整理,再到计算和可视化分析的全流程。
基于Python的电影票房信息数据爬取分析
m0_73485263的博客
10-05 3017
电影发展的越来越迅速,如何在这块红海市场中分得一杯羹成为一个比较具有挑战性的问题,因此本文基于python爬虫制作了一个爬取电影票房网站的爬虫程序,成功地爬取到了电影票房数据并且保存到了数据库中并进行分析,通过这种操作,使得电影的票房更加透明,清晰。
Python爬虫爬取电影票房数据及图表展示操作示例
09-17
主要介绍了Python爬虫爬取电影票房数据及图表展示操作,结合实例形式分析Python爬虫爬取解析电影票房数据并进行图表展示操作相关实现技巧,需要的朋友可以参考下
Python爬取分析】NBA比赛数据形成可视化结构(附说明文档)
07-15
Python爬取分析】NBA比赛数据形成可视化结构(附说明文档)【Python爬取分析】NBA比赛数据形成可视化结构(附说明文档)【Python爬取分析】NBA比赛数据形成可视化结构(附说明文档)【Python爬取分析】NBA比赛数据...
python爬取电影Top250数据并进行可视化分析.zip
01-06
python爬取电影Top250数据并进行可视化分析.zip
Python爬取疫情每日数据
12-22
前言 问题1:需要我的Excel 由于疫情已经趋于稳定,所以我不会再...2、另外全国卫健委的数据格式一直在变,也有可能会导致爬取失败! 代码 import requests from bs4 import BeautifulSoup import datetime import re
海尔智能电视刷机数据 U49A5 机编DH1W80A0305 务必确认机编一致 强制刷机 整机USB升级主程序
03-27
务必确认机身编号与文件名机编一致,如不一致,请勿下载 机身编号一般在机子背面的贴纸上 升级方法: 1、下载数据,压缩包解压,将“Haier638Upgrade.bin”文件拷贝到U盘根目录下(U盘要求使用FAT32格式,建议4G-8G的品牌U盘,刷机成功率会高) 2、电视关机拔下电源,插入U盘,按住机身按键板上的“菜单”键不放,插电开机,直到LED灯开始闪表示升级正在进行,升级成功后机器会自动重起。 3、重启之后,重新交流上电,升级完成。 注意: 1、升级到结束,大约需要8-30分钟,中途绝对不能断电 2、升级重启第一次进入系统,请等完全正常进入开机桌面之后,才能拨下U盘
c语言c++项目源代码_c语言对自己电脑系统测试.rar
03-27
**C语言电脑系统测试项目** 本项目是一个基于C语言的实用工具,旨在为您的电脑系统提供全面的性能测试与评估。通过执行一系列精心设计的测试用例,该工具能够评估您的电脑在处理器速度、内存管理、磁盘性能以及网络连接等方面的表现。 项目的核心功能包括: 1. **处理器性能测试**:通过执行复杂的算法和计算任务,评估处理器的运算速度和效率。 2. **内存测试**:检查内存分配、读写速度和稳定性,确保系统的内存管理达到最佳状态。 3. **磁盘性能测试**:评估硬盘或固态硬盘的读写速度、I/O性能和文件系统效率。 4. **网络性能测试**:测量网络连接的速度和稳定性,包括上传和下载速度以及延迟。 此外,该项目还提供了详细的测试报告功能,帮助您全面了解系统的优势和潜在瓶颈。测试结果以直观易懂的图表和数字形式呈现,便于分析和解读。 此项目采用模块化设计,方便您进行二次开发和定制,以满足特定需求。无论是硬件评测爱好者还是系统管理员,都能从该项目中受益良多。
pypy3.8-v7.3.6rc3-s390x.tar.bz2
03-27
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
强化学习的Q-Learn算法ppt资源
最新发布
03-27
强化学习的主要算法:包括Q-learning、SARSA、DQN、A3C、TRPO、PPO和SAC等。这些算法各有特点,适用于不同的场景和任务。例如,Q-learning和SARSA是基于值函数的强化学习算法,旨在学习最优策略以最大化累积奖励;而DQN则是深度强化学习算法,使用神经网络来估计值函数,并通过反向传播算法更新网络参数。 强化学习在多个领域具有广泛应用。在自动驾驶系统中,强化学习可以帮助车辆感知周围环境并做出决策,实现自主行驶。在医疗领域,强化学习可以用于辅助医生进行病例分析、诊断和治疗方案制定,提高医疗服务的准确性和效率。此外,强化学习还在智能物流和仓储管理、金融投资决策等领域发挥着重要作用。
工作汇报 年终总结28.pptx
03-27
封面 标题:基于物联网的智能家居系统年度总结 报告人信息:[姓名]、[职位/角色]、[所属机构/公司] 日期:[具体日期] 目录 引言 年度工作回顾 系统进展与亮点 技术创新与应用 市场反馈与用户评价 存在问题与挑战 未来展望与计划 结束语与感谢 一、引言 简要介绍智能家居系统的重要性和发展趋势 回顾本年度的工作目标和重点 二、年度工作回顾 系统建设与维护 完成的项目与里程碑 系统稳定性与可靠性提升 团队建设与培训 团队成员构成与职责 培训与技能提升活动 合作伙伴与资源整合 与供应商、合作伙伴的合作情况 资源整合与利用 三、系统进展与亮点 功能扩展与优化 新增功能介绍与效果评估 现有功能的优化与改进 用户体验提升 界面设计与交互优化 用户反馈与改进措施 四、技术创新与应用 物联网技术的应用 传感器与通信技术的升级 大数据分析与应用 智能家居的智能化管理 自动化控制与节能策略 安全防护与预警系统 五、市场反馈与用户评价 市场反馈分析 市场需求与竞争态势 市场占有率与增长趋势 用户评价总结 用户满意度调查结果
tensorflow-2.6.2-cp36-cp36m-manylinux2010-x86-64.whl
03-27
numpy安装
Python爬取豆瓣电影票房
04-03
以下是一个简单的Python爬虫程序,可以爬取豆瓣电影的票房信息: ```python import requests from bs4 import BeautifulSoup url = 'https://movie.douban.com/chart' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') table = soup.find('table', class_='chart') for tr in table.find_all('tr')[1:]: td_list = tr.find_all('td') rank = td_list[0].text.strip() title = td_list[1].find('a').text.strip() rating = td_list[2].text.strip() box_office = td_list[3].text.strip() print(f'{rank}\t{title}\t{rating}\t{box_office}') ``` 这个程序首先发送一个HTTP请求到豆瓣电影票房榜的页面,然后使用BeautifulSoup库解析HTML代码。然后,程序找到票房榜的表格,循环遍历每一行,并提取排名、电影名称、评分和票房数据。最后,程序将这些数据打印出来。 需要注意的是,豆瓣电影网站有反爬机制,如果发送太多的请求,可能会被封IP。因此,建议设置一定的时间间隔,或者使用代理IP等方式进行爬取

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 用 Python 对数据进行相关性分析 88772
  • Python 调用 kafka 构建完整实例分析与应用 83774
  • 用 Python 进行多元线性回归分析(附代码) 82546
  • Java 10的10个新特性,将彻底改变你写代码的方式! 54671
  • Python 中删除文件的几种方法 51274

最新评论

  • 用 Python 绘制龙形曲线

    流浪成云海: 动图那种代码能出一下吗,想看看

  • Altman逆袭登场:揭秘OpenAI背后的权谋和变局

    2301_80627447: 这些人员的快速变革都是资本的游戏,已经回不去最开始最纯粹的技术的编程时代了

  • 用文本挖掘剖析近5万首《全唐诗》

    般般蟀: 为什么同样用全唐诗,我的Word2vec没有一个大于0.5的

  • 用 XGBoost 进行时间序列预测

    weixin_47002415: 为什么跑了一天还是没有出结果

  • 量化分析预测股市?试试这个 Python 库

    LouieZL666: stocker库导入不了?有教程吗

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 朝夕光年困境:字节跳动游戏业务前途未卜
  • 收藏!35句提示词,数据科学的灵感源泉
  • Chatbot开发三剑客:LLAMA、LangChain和Python
2023年10篇
2022年36篇
2021年281篇
2020年276篇
2019年352篇
2018年291篇
2017年48篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家滨州玻璃钢设备外壳厂绍兴玻璃钢产品广州玻璃钢花盆加工厦门玻璃钢座椅多少钱平凉玻璃钢休闲椅厂昆明不锈钢家具厂家苏州不锈钢家具厂晋中玻璃钢机械外壳加工海口玻璃钢座椅制造自贡商业美陈定制莱芜玻璃钢卡通雕塑生产厂家伊春玻璃钢花箱公司韶关玻璃钢公仔雕塑厂黄石玻璃钢坐凳生产厂家茂名玻璃钢设备外壳厂家直销亳州不锈钢家具厂家直销中山玻璃钢装饰工程厂汕头玻璃钢动物雕塑加工本溪玻璃钢卡通雕塑价格株洲玻璃钢坐凳公司宣城玻璃钢花箱制作营口玻璃钢装饰工程日照玻璃钢人物雕塑公司通辽玻璃钢花钵批发宿州玻璃钢垃圾桶公司松原玻璃钢茶几定做鹤壁玻璃钢公仔雕塑多少钱福建玻璃钢造型多少钱揭阳玻璃钢厂梅州玻璃钢花箱厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化