《邪不压正》评分持续走低,上万条网友评论揭秘,是救救姜文还是救救观众?

首先感谢原作者,写的是相当详尽了.但是其中还是有一些坑...特写此贴来帮助其他网友排雷...

万众期待的《邪不压正》已上映有一周时间。

但上映当日早上开画8.2,上映不到一天闪崩到7.1的评分好像已经给这部本该大展拳脚的片子,戴上了一个结结实实的囚具。

首日票房虽然过亿,却依旧不敌多日日票房冠军《我不是药神》;难道姜文又搞砸了?不管如何,姜文的电影总能掀起影评人高涨的评论热情;

今天就跟着恋习Python看看网友对这部姜文电影的感受到底怎么样。

接下来,恋习Python将会跟你一起用猫眼上万条评论数据来分析,网友对这部电影的反响究竟如何?整体思路,将会从数据获取、数据处理、数据可视化三部曲来进行:

一、数据获取

关于如何获取网页的数据,恋习Python一直也是推荐三步走:下载数据、解析数据、保存数据。在下载数据之前,我们看看猫眼官网的网页结构,看看网友的评论数据接口究竟在哪?

然而,打开猫眼网页(http://maoyan.com/films/248566)只有寥寥几个评论,那它的数据会不会是通过json格式保存到服务器中呢?无奈只能通过抓包猫眼APP来找其数据接口

最后,发现其数据接口为:http://m.maoyan.com/mmdb/comments/movie/248566.json?_v_=yes&offset=1,其中258566属于电影的专属id,offset代表页数

最后检验,这个接口只给展示1000页数据,如下:

这1000页都是当天数据,去重之后只有几百条,为了统计的客观性,可以连续几天爬取数据

接口找到后,开始写爬取数据代码,详情代码如下:

import requests
import json
import time
import random#下载第一页数据
def get_one_page(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}response = requests.get(url,headers=headers)if response.status_code == 200:  #页面正常响应return response.text # 返回页面源代码return None#解析第一页数据
def parse_ono_page(html):data = json.loads(html)['cmts'] #评论以json形式存储,故以json形式截取for item in data:yield{ #该方法返回一个字典'comment':item['content'],'date':item['time'].split(' ')[0],'rate':item['score'],'city':item['cityName'],'nickname':item['nickName']}#保存数据到文本文档
def save_to_txt():for i in range(1, 1001):url='http://m.maoyan.com/mmdb/comments/movie/248566.json?_v_=yes&offset=' + str(i)html = get_one_page(url)print('正在保存第%d页.'% i)for item in parse_ono_page(html):with open('D:/邪不压正影评/xie_zheng.txt','a',encoding='utf-8') as f:f.write(item['date'] + ',' + item['nickname'] + ',' + item['city'] + ',' +str(item['rate'])+','+item['comment']+'\n')#反扒time.sleep(5 + float(random.randint(1,100)) /20)if __name__ == '__main__':save_to_txt()

二、数据处理

获取数据后发现,会有一些数据重复,如下图:

因此需要脚本批量对数据进行去重处理,详情代码如下:

# 获取的评论可能有重复,为了最终统计的真实性,需做去重处理
def main(old,new):oldfile = open(old,'r',encoding='UTF-8')newfile = open(new,'w',encoding='UTF-8')content_list = oldfile.readlines() #读取的数据集content_alreadly_ditinct = [] #存储不重复的评论数据for line in content_list:if line not in content_alreadly_ditinct: #评论不重复newfile.write(line+'\n')content_alreadly_ditinct.append(line)if __name__ =='__main__':main(r'D:\邪不压正影评\xie_zheng23.txt', r'D:\邪不压正影评\xie_zheng_new23.txt')

每天可以不定时(每隔四五小时获取一次数据,基本每次可获取900多条数据),最终恋习Python获取到7/15-7/18之间上万条来作为数据集分析。

以我实际操作的经验,猫眼石每天更新1000页当日数据,不像作者叙述的这样.

三、数据可视化

大坑预警!!!!!!!!!!!!!

今天我们就用pyecharts将清理过后的万条评论数据来实现可视化。pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。(详情请看:http://pyecharts.org/)

粉丝北上广及沿海一带居多

由上图,可以看出北上广一带的用户相对较多,这些地方的互联网用户基数本来就大,同时沿海一代的三四线城市也成为票房贡献者的一部分。

详情代码如下:

大坑说明:大家应该百分百会遇到  ValueError: No coordinate is specified for XX(某地名)的错误.这错误的原因是pyecharts的坐标文件里没有xx地名,文件在

pyecharts/datasets/city_coordinates.json 中

文件格式如

{"阿城": [126.58, 45.32],"阿克苏": [80.19, 41.09],"阿勒泰": [88.12, 47.50],...
}

这就是个大坑了,举个例子:有用户的地理坐标是'黔南',运行时是一定会提示No coordinate is specified for 黔南,查看/city_coordinates.json文件发现,里面是有黔南的,不过全称为'黔南布依族苗族自治州',这就是报错的原因!!,我们在原位置下复制个同样的,改个名就可以啦!其他此类错误都是这样解决. 我的city_coordinates.json已经被我修改过,可以适应绝大部分城市地区!

{"黔南": [107.52,26.27],"黔南布依族苗族自治州": [107.52,26.27]
}

还有,这只能保证找的到坐标,要画图的话,还需下载几个地图.

以下是 pyecharts 开发组托管的地图扩展(map extension):

  1. World countries include China map and World map: echarts-countries-pypkg (1.9MB)
  2. Chinese provinces and regions: echarts-china-provinces-pypkg (730KB)
  3. Chinese cities: echarts-china-cities-pypkg (3.8MB)
  4. Custom Chinese regions: echarts-china-misc-pypkg (148KB)
  5. United Kingdom map: echarts-united-kingdom-pypkg (1MB)

更多的地图数据可查看 https://github.com/echarts-maps 。

可以使用 pip 安装这些地图扩展。

$ pip install echarts-countries-pypkg
$ pip install echarts-china-provinces-pypkg
$ pip install echarts-china-cities-pypkg
$ pip install echarts-china-misc-pypkg
$ pip install echarts-united-kingdom-pypkg
#为了简化配置项编写,提供了一个 Style 类,可用于在同一个图或者多个图内保持统一的风格
from pyecharts import Style
# 直角坐标系上的散点图可以用来展现数据的 x,y 之间的关系,如果数据项有多个维度,可以用颜色来表现,利用 geo 组件。
from pyecharts import Geo
import sys
print(sys.path)#读取城市数据
city = []
with open(r'D:\邪不压正影评\xie_zheng_new21.txt','r',encoding='utf-8') as f:rows = f.readlines()for row in rows:if len(row.split(','))==5 and row.split(',')[2]!= '':#抓取的一些城市名为空,去掉# 城市数据cityname =row.split(',')[2].replace('\n','')if cityname=='黔西南': #pyecharts/datasets/city_coordinates.json没有黔西南坐标,更换成兴义cityname='兴义'city.append(cityname)#统计评论中个城市出现的次数
def all_list(arr):result = {}#使用set去重for i in set(arr):#城市名:出现次数result[i] = arr.count(i)return  resultdata = []
for item in all_list(city):#append 只能添加一个参数,双括号代表添加的是元组data.append((item,all_list(city)[item]))style = Style(title_color= '#fff',title_pos ='center',width = 1200,height = 600,background_color='#404a59'
)
geo = Geo('<邪不压正>粉丝人群地理位置','数据来源:猫眼',**style.init_style)
#属性,值
attr,value = geo.cast(data)
geo.add("",attr,value,visual_range=[0,20],visual_text_color="#fff",symbol_size=20,is_visualmap=True,is_piecewise=True,visual_split_number=4)
geo.render('邪不压正粉丝人群地理位置.html')

评论两极分化相对严重

获取到近几日的网友上万条评论数据后,我们切换到今天主题,看看网友对这部电影究竟评论如何?

我们将数据集中的评论内容提取出来,将评论分词后制作如下词云图:

可以看出,排名靠前的热词分别是姜文、不错、好看、彭于晏、剧情、看不懂等,可以看出大家对电影的评价还不错,同时估计还有一大部分粉丝是专门看国民老公彭于晏的裸奔与八块腹肌的(哈哈哈)

至于剧情方面,相对于《让子弹飞》,《邪不压正》用了更“姜文”更癫狂的方式来讲了一个相对简单的故事。

从砰砰砰几枪打出片名的那一刻起,影片就在一个极度亢奋的节奏之下不停向前推进着,伴随着应接不暇的戏谑台词,姜文无时无刻不在释放自己的任性,太疯了,甚至有些极端。对于普通观众来说,太难消化了,上一秒还没琢磨明白,下一秒又迎来了一个亢奋且莫名的环境和台词中(也验证评论中一部分网友对剧情看不懂的评价)。

详情代码如下:

大坑说明:你会发现 wordcloud 是下载不了的,报错缺少Visual C++14.0,去下载了也没什么卵用....

需要直接去https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud

下载对应的.whl文件.放在项目的lib中

cd 切换到对应文件的路径 ,然后pip install 文件名 ,可能要多试几次,但应该能安装成功的!

import pickle #使用
from os import path
import jieba #使用分词功能
#matplotlib是python上的一个2D绘图库,它可以在夸平台上边出很多高质量的图像。
# 综旨就是让简单的事变得更简单,让复杂的事变得可能。
# 我们可以用matplotlib生成 绘图、直方图、功率谱、柱状图、误差图、散点图等
import matplotlib.pyplot as plt
#wordcloud  制作云图
from wordcloud import WordCloud, STOPWORDS, ImageColorGeneratorcomment = []
#获取评论数据
with open (r'D:\邪不压正影评\xie_zheng_new21.txt',mode='r',encoding='utf-8') as f:rows = f.readlines()for row in rows:if len(row.split(',')) == 5:comment.append(row.split(',')[4].replace('\n', ''))#非全模式分词,cut_all表示非全模式
comment_after_split = jieba.cut(str(comment),cut_all=False)wl_space_split= " ".join(comment_after_split)
#导入背景图
backgroud_Image = plt.imread(r'D:\Desktop\云图\backgroud.png')
stopwords = STOPWORDS.copy()
print(" STOPWORDS.copy()",help(STOPWORDS.copy()))
#可以加多个屏蔽词
stopwords.add("电影")
stopwords.add("一部")
stopwords.add("一个")
stopwords.add("没有")
stopwords.add("什么")
stopwords.add("有点")
stopwords.add("这部")
stopwords.add("这个")
stopwords.add("不是")
stopwords.add("真的")
stopwords.add("感觉")
stopwords.add("觉得")
stopwords.add("还是")#设置词云参数
#参数分别是指定字体/背景颜色/最大的词的大小,使用给定图作为背景形状
wc =WordCloud(width=1024,height=768,background_color='white',mask = backgroud_Image,font_path='rD:\Desktop\云图\STKAITI.TTF',stopwords=stopwords,max_font_size=400,random_state=50)
#将分词后数据传入云图
wc.generate_from_text(wl_space_split)
plt.imshow(wc)
plt.axis('off')#不显示坐标轴
plt.show()
#保存结果到本地
wc.to_file(r'D:\Desktop\云图\show.jpg')

一星级影评占比高达20%

图中可以看出,五星级比例接近40%,而一星级比例与四星级比例几乎差不多,几乎为都为20%。(备注:一星级数量等于1与0.5的总和,以此类推)

很明显,姜文再次掀起了影评人和观众的论战,尽管姜文对影评人并不友好,但影评人还是愿意去袒护姜文。其实,姜文的电影关键在于你期待什么?类型片?姜文拍的从来都不是类型片。艺术片?姜文的电影里的艺术不是一遍就可以看懂的。他的电影就是带着一种“后摇风格”,浓烈、生猛。

姜文和观众都很自我,姜文端着,不肯向市场低头;观众正是因为没端着,所以看姜文的电影过于疲惫。谁都没错,谁都不用救。

详情代码如下:

#from pyecharts import ThemeRiverrate = []
with open(r'D:\邪不压正影评\xie_zheng_new21.txt',mode='r',encoding='utf-8') as f:rows = f.readlines()for row in rows:if len(row.split(',')) == 5:rate.append(row.split(',')[3].replace('\n',''))print(rate.count('5')+rate.count('4.5'))
print(rate.count('4')+rate.count('3.5'))
print(rate.count('3')+rate.count('2.5'))
print(rate.count('2')+rate.count('1.5'))
print(rate.count('1')+rate.count('0.5'))#饼图
from pyecharts import Pie
attr = ["五星", "四星", "三星", "二星", "一星"]
#分别代表各星级评论数
v1 = [3324,1788,1293,553,1653]
pie = Pie('饼图-星级玫瑰图示例',title_pos='center',width=900)
pie.add("7-17", attr, v1, center=[75, 50], is_random=True,radius=[30, 75], rosetype='area',is_legend_show=False, is_label_show=True)pie.render('评分.html')

关于《邪不压正》网友评论数据就分析到此结束!

你觉得《邪不压正》不好看是对的,因为它太姜文了。你若觉得《邪不压正》好看也是对的,因为它真的太姜文了。成也姜文,败也姜文!但这也许就是他孤傲的世界吧。

参考资料:

python安装wordcloud报错解决

jieba完整文档

git项目地址:https://github.com/ljx4471817/python_maoyan_xiebushengzheng

python爬虫,扒上万条猫眼邪不压正影评------转载+排雷相关推荐

  1. 关于Python爬虫,一条高效的学习路径

    数据是创造和决策的原材料,高质量的数据都价值不菲.而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣.知乎:爬取优质答案,筛选出各话题下热门内容,探索用户的舆论导向. 淘宝 ...

  2. 【Python爬虫】爬取猫眼电影票房

    题记 本文旨在记录爬取猫眼电影国内票房榜单的过程,以及对脚本内字体文件反爬函数的说明. 环境 系统: Windows 10 Python版本: Python 3.7 爬取时间: 2019.3.19 难 ...

  3. python爬虫实战--爬取猫眼专业版-实时票房

    小白级别的爬虫入门 最近闲来无事,发现了猫眼专业版-实时票房,可以看到在猫眼上映电影的票房数据,便验证自己之前学的python爬虫,爬取数据,做成.svg文件. 爬虫开始之前 我们先来看看猫眼专业版- ...

  4. Python爬取上万条大众点评数据,解读一线快餐品牌背后的秘密

    中国的快餐市场竞争一直都很激烈,关于各种品牌江湖上也流传着各种神奇的故事,那么你知道 一线城市最多的快餐品牌是哪家? 沙县小吃真的是中国餐饮巨头吗? 每一家肯德基边上都有一家麦当劳是不是真的? 星巴克 ...

  5. python爬虫《丹麦女孩》的影评并分析

    文章目录 一.爬虫过程 二.实践案例_爬虫豆瓣<丹麦女孩>的影评 2.1.发送请求&获取数据 2.2.解析.提取并保存数据 三.数据分析 3.1.评分分布 3.2.词云图 一.爬虫 ...

  6. python爬虫爬取豆瓣top250电影影评

    信息系统课程项目,小组准备做一个电影推荐系统,自己选了觉得很有趣的资源模块,需要获取电影的评价资源等信息.花了大约一周看Web Scraping with Python这本书,对爬虫有了大体但是初略的 ...

  7. python爬虫,爬取猫眼电影1(正则表达式)

    本文用正则.xpath.beautifulsoup.css.pyquery几种不同的方式,爬取猫眼电影.只是记录过程.比较乱. 猫眼电影现在也添加了一些反爬虫机制,如果直接用requests可能会40 ...

  8. Python爬虫笔记————抓取 猫眼电影排行榜Top100

    注:初学爬虫,本节仅使用requests库和使用正则作为解析工具 最近学习爬虫,找个比较简单的网页练习了一下,作为初入爬虫的小白,不足之处还请大家多多指教. 一.分析url 首先,打开目标站点http ...

  9. Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

最新文章

  1. Oracle trunc()函数的用法
  2. java Executor实例_Executor框架+实例
  3. java http输出,Java HTTP Client输出空JSON
  4. uni-app开发所有前端应用的框架
  5. 【一周入门MySQL—4】数据库进阶练习
  6. java5年转c语言,时隔5年,C语言再次领先Java,荣登编程语言排行榜第一!
  7. javaWEB总结(9):自定义HttpServlet
  8. python中xml模块_python学习第十五天-2(XML模块)
  9. c语言vbs,我的vbs整人程序
  10. 如何使用Python入侵Eclipse IDE
  11. C# 操作World生成报告
  12. string转int/float/double、int/float/double转string、转字符串数组的方法:stoi、stringstream、scanf、to_string、sprintf
  13. 牛人整理的统计学教材
  14. MQTT——服务质量Qos
  15. 度量满足条件——非负性、对称性和三角不等式
  16. 数据库(一)--数据库系统的核心知识点
  17. DIV滚动条自动滚动到最底部的两种方法
  18. python5.网络爬虫
  19. 河北省地税数据上收集中及异地容灾应用(RealSync数据库同步复制)
  20. Error LNK1120: 1 个无法解析的外部命令

热门文章

  1. Geoserver发布wms地图服务的样式制作(地图工具篇.4)
  2. 素材资源库合集,再也不怕找不到素材了
  3. 基于 C++ MFC 活塞环外观表面缺陷检测【100010409】
  4. 条码编码方式-----Code 39与code 128条形码的区别
  5. 环信服务器发送消息ext,发送消息
  6. 图像处理与识别学习小结
  7. SRS音频技术介绍一
  8. 固实压缩文件容易损坏_文件解压失败与压缩文件文件已经损坏的解决办法
  9. java计算机毕业设计江智能股票推荐系统MyBatis+系统+LW文档+源码+调试部署
  10. 事件代理(冒泡机制)