《哪吒》VS《姜子牙》,用Python对比—我发现了这个......

目录前言
一、票房对比分析
1.获取票房数据
2.票房走势分析
二、评价对比分析
1.爬取影评
1.1获取评论页面
1.2 解析页面中的评论
1.3 定义爬取函数
1.4 完整代码
2.词云分析
2.1 完整代码
2.2 结果展示
前言
《哪吒》VS《姜子牙》,用Python对比—我发现了这个......文章插图
随着国内疫情得到有效控制 , 每个地区的电影院都陆陆续续的开放了 , 而很多本应该在春节档上映的电影因为疫情撤档 , 现在也重新上映了 。
想必和不少小伙伴一样 , 我一直对《姜子牙》满怀期待 。 于是 , 国庆第2天我便杀入影院 。 而关于《姜子牙》的评价呈现了两极分化 , 而它也经常被拿来和去年上映的《哪吒》对比 。 关于电影本身 , 我不做过多评价 , 主要是从数据的角度出发 , 把《姜子牙》和《哪吒》进行一个对比分析 。
一、票房对比分析 为了使得数据统一 , 我选取上映的前9日的票房数据(将持续更新):
《哪吒》VS《姜子牙》,用Python对比—我发现了这个......文章插图
注:票房数据来源于网络 , 不保证完全准确 。 将其存于本地excel表格中 , 命名为“票房数据.xlsx” 。
2.票房走势分析 利用pandas库对票房数据进行分析 , 并绘制折线图:
import pandas as pdimport matplotlib.pyplot as plt# 票房分析plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签data = http://kandian.youth.cn/index/pd.read_excel('票房数据.xlsx',index_col=0)data.plot(style='.-.')plt.title('票房数据')plt.ylabel('票房(亿元)')plt.xlabel('上映时间')plt.savefig('票房数据.png')【《哪吒》VS《姜子牙》,用Python对比—我发现了这个......】结果如下:
《哪吒》VS《姜子牙》,用Python对比—我发现了这个......文章插图
从图可以看出(仅代表个人观点):

  • 1 首映当日《姜子牙》票房明显高于《哪吒》 。 这大概是源于观众的期待 , 这也说明前期的宣传工作做到位了;
  • 2 从走势来看 , 《姜子牙》呈现出明显下滑 。 这大概是因为上映后口碑上出现了两级分化 , 电影本身没有到达观众原本的期待;
  • 3 从走势来看 , 《哪吒》后续走势强劲有力 。 这大概是因为上映后《哪吒》作为国产动漫的代表口口相传 , 吸引了越来越多的观众 。
二、评价对比分析 这一部分主要是对观众的影评进行分析 , 评价数据来源于某瓣 。
1.爬取影评在网站简单搜索之后可以发现一个电影短评的接口:
;limit=20limit=20 Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Connection': 'keep-alive','Upgrade-Insecure-Requests': '1'}cookies = {}res = requests.get(url,headers=headers,cookies=cookies)html = res.textreturn html## 注意:请求需要带上登陆后的cookies , 否则将只能获取10页的评论 。 1.2 解析页面中的评论def parse_comment(html):'''解析HTML中的评论'''comment = re.findall('(.*?)',html)return comment1.3 定义爬取函数def crawl_comment(mid,N,name):'''爬取指定页数的评论 , 并保存在本地'''comments = for p in range(1,N+1):html = get_comment(mid,p)comment = parse_comment(html)comments.extend(comment)print('《%s》第%d页评论爬取完成(%d条)'%(name,p,len(comment)))time.sleep(random.uniform(3,5))with open('%s.txt'%name,'w') as f:f.write(json.dumps(comments))## 注意:time.sleep很重要 , 否则请求过于频繁将触发安全机制 , 导致4031.4 完整代码# -*- coding: utf-8 -*-"""Created on Sat Oct 10 12:01:35 2020@author: kimol_love"""import reimport timeimport jsonimport randomimport requests# 定义相关函数def get_comment(mid,page):'''获得评论页面的HTML'''start = (page-1)*20url = ';limit=20 Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Connection': 'keep-alive','Upgrade-Insecure-Requests': '1'}cookies = {}res = requests.get(url,headers=headers,cookies=cookies)html = res.textreturn htmldef parse_comment(html):'''解析HTML中的评论'''comment = re.findall('(.*?)',html)return commentdef crawl_comment(mid,N,name):'''爬取指定页数的评论 , 并保存在本地'''comments = for p in range(1,N+1):html = get_comment(mid,p)comment = parse_comment(html)comments.extend(comment)print('《%s》第%d页评论爬取完成(%d条)'%(name,p,len(comment)))time.sleep(random.uniform(3,5))with open('%s.txt'%name,'w') as f:f.write(json.dumps(comments))# 爬取姜子牙评论crawl_comment('25907124',25,'姜子牙')# 爬取哪吒评论crawl_comment('26794435',25,'哪吒')