个人资料
国产亚洲精品高清视频免费
本文使用 Zhihu On VSCode 创作并发布前言 本文主要谈近十年(2010-2019年)中国电影票房数据的爬行和简单分析。我之所以想到这么做,是因为我最近在一本书里读到这样一段话。 2013年受市场
国产亚洲精品高清视频免费
友情连接
    国产亚洲精品高清视频免费 您当前所在位置:国产亚洲精品高清视频免费 > 国产精品 >

    
本文使用 Zhihu On VSCode 创作并发布前言

本文主要谈近十年(2010-2019年)中国电影票房数据的爬行和简单分析。我之所以想到这么做,是因为我最近在一本书里读到这样一段话。

2013年受市场热捧的电影行业其实是个现金流状况很差的行业。中国每年会拍七百多部电影,只有两百多部能够上映,其中票房能够超过五亿的屈指可数。即使赚了五亿的票房“大获成功”的电影,扣除分给院线的一半,再扣除发行费,宣传费,制片方能够拿到手的大概只有2亿多一点。再扣除给编剧、导演、制片和演员的薪酬以及拍摄中的各种成本,最后剩下的净利润可能只有几千万。

这句话让我对中国电影市场产生了好奇,也想了解中国电影市场这几年的发展,所以想抢近十年中国电影的票房。然而,在爬行的过程中,我遇到了很多困难:

数据不公开没有一个权威、公开、透明的电影数据网站。我搜索了很多网站,没有找到满意的。所谓的中国电影数据信息网,有的是政策法规,工作咨询,没有的是电影数据。设置爬虫障碍后来我找到一家数据齐全的网站:电影票房网,但是万万没有想到这个网站给爬虫设置了重重障碍:查看多页数据需要用户登录奇怪的验证码这个数据居然是图片格式!

这让我这个爬虫小白望而却步,等以后学得更精了,再来爬这个。奇怪的验证码【/br/】这让我变成了一个爬虫,等我学得好一点的时候我会爬上这个。

后来在外网上发现了一个不错的网站:这是一个网站,但是数据是不正规的,有很多漏洞和问题,和真实的数据不一样(解释如下)。仅用于抓取和数据分析,不代表真实情况!

爬取

类似于前两个爬虫项目,直接编码:

# 引入库import reimport pandas as pdimport timeimport urllib.requestfrom lxml.html import fromstringfrom bs4 import BeautifulSoup# 下载链接def download(url): print('Downloading:', url) request = urllib.request.Request(url) request.add_header('User-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36') #进行伪装 resp = urllib.request.urlopen(request) html = resp.read().decode('utf-8') return html# 待爬取内容name = []year = []Box_office = []# 循环爬取每页内容for k in range(10): movie_year = 2010+k url = download('http://www.boxofficecn.com/boxoffice{}'.format(movie_year)) time.sleep(3) #间隔3s,防止被封禁 tree = fromstring(url) soup = BeautifulSoup(url) length_string = soup.find('div',{'class':'entry-content'}).p.get_text() length = int(re.search('[0-9]{1,3}(?=部)',length_string).group()) for k in range(length): name.append(soup.find_all('tbody')[0].find_all('td')[4*k+2].get_text()) year.append(movie_year) Box_office.append(soup.find_all('tbody')[0].find_all('td')[4*k+3].get_text())# 将list转化为dataframename_pd = pd.DataFrame(name)year_pd = pd.DataFrame(year)Box_office_pd = pd.DataFrame(Box_office)# 拼接movie_Box_office_data = pd.concat([name_pd,year_pd,Box_office_pd],axis=1)movie_Box_office_data.columns=['电影','年份','票房']movie_Box_office_data.head()# 数据预处理## 提取数字部分f = lambda x: re.search('[0-9]*(.[0-9]*)?',x).group()movie_Box_office_data['票房'] = movie_Box_office_data['票房'].apply(f)## 缺失值填充为0empty = movie_Box_office_data['票房'] == ''movie_Box_office_data.loc[empty,'票房'] = 0## 转化成浮点数movie_Box_office_data['票房'] = movie_Box_office_data['票房'].apply(lambda x: float(x))# 输出outputpath='c:/Users/zxw/Desktop/修身/与自己/数据分析/数据分析/爬虫/中国电影票房/movie_box_office.csv' ## 路径需要自己改!movie_Box_office_data.to_csv(outputpath,sep=',',index=False,header=True,encoding='utf_8_sig')

应该注意的是,使用find_all函数来定位应该是最简单的。这是一种适用于所有十个抓取网页的定位方法。其他方法如xpath是不可行的。另外需要注意的是,抓取的票房数据需要进行预处理,因为票房数据可能包含中文。

分析十年top10

让我们来看看过去十年的十大电影(票房为1万)。

这里有一个问题,电影《芳华》的数据明显错了,没有加小数点。变化如下。

年度top5每年电影数

注意到2013年上映电影数明显下降。事实上是因为这份网页在统计2013年电影数据时存在缺失。 top5注意到2013年上映的电影数量明显减少。其实是因为这个网站在2013年的电影统计中缺失了。

每年总票房同样,2013年,电影票房大幅下滑。

二八原则

八项原则大概是说前20%的人拥有80%的资源。电影票房是否也符合28年原则?是不是因为爆款电影占据了电影市场的大部分,而大部分电影却成为了默默无闻的炮灰?事情就是这样。可以先看看近两年的票房情况:

再看一下近十年,每年票房前20%电影所占全年票房总市场的份额:看看最近十年票房市场前20%的电影份额:。

可见,每年票房前20%的电影占全年总票房市场的70%以上,并且还在逐年增长,近四年甚至超过了90%!

代码与数据

最后附上完整的代码和数据:提取代码v9kh。

  

Powered by 国产亚洲精品高清视频免费 @2018 RSS地图 HTML地图

2013-2021 版权所有