截至到 8 月 20 日,《战狼Ⅱ》上映的第 25 天,它的票房已超 50 亿人民币,真正成为独一一部挺进世界影史票房前 100 名的亚洲影戏。
抛开爆炸的票房不说,影戏还激起了观众各类情绪,甚至有人放狠话说:敢喷《战狼Ⅱ》的,要么是智障,要么是公敌,就是这么简朴粗暴。
各人对《战狼Ⅱ》驳倒纷歧,纷纷在豆瓣短评上面留言,表达本身对这部影戏的观点。尽量各路评论出街,媒体闹得沸沸扬扬,观众照旧傻傻分不清楚哪边意见较量靠谱。
停止今朝已经有高出十五万的评论,在你看评论的时候,你大概在一段时间里看到的大部门是表彰可能是贬低的评论。
那么通过欣赏评论我们很丢脸出各人对付这部影戏的总体环境。此刻让我们通过数据阐明的要领看看在这些评论中毕竟产生了什么有趣的工作!
本文通过 Python 爬虫的方法获取数据,对豆瓣影戏评论举办阐明,建造了豆瓣影评的云图。
此刻,让我们来看看,《战狼Ⅱ》评论里到底藏着哪些有趣的潜台词。
数据的获取
本文回收的是 Python 爬虫的方法获取的数据,用到的主要是 requests 包与正则包 re,该措施并未对验证码举办处理惩罚。
之前也爬取过豆瓣的网页,其时由于爬取的内容少,所以并没有碰着验证码的工作。
在写本文爬虫的时候,原觉得也不会有验证码,可是当爬取到或许 15000 个评论的时候跳出来验证码。
然后我就想不就是十二万吗?最多我也就是输入或许十屡次验证码,所以就没有处理惩罚验证码的工作。
可是接下来的工作就有点坑到我了,爬取 15000 阁下评论并输入验证码的时候,我觉得会接下来爬取到 30000 阁下,但是才爬了 3000 阁下就不可了,照旧要输验证码。
然后就一直这样,跌跌撞撞,有时候爬取好长时间才需要验证码,有时候则不是。不外最后照旧把评论爬取下来了。
爬取的内容主要是:用户名,是否看过,评论的星星点数,评论时间,认为有用的人数,评论内容。
以下是 Python 爬虫的代码:
import requests import re import pandas as pd url_first='https://movie.douban.com/subject/26363254/comments?start=0' head={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36'} html=requests.get(url_first,headers=head,cookies=cookies) cookies={'cookie':'你本身的cookie'} #也就是找到你的账号对应的cookie reg=re.compile(r'<a href="(.*?)&.*?class="next">') #下一页 ren=re.compile(r'<span>(.*?)</span>.*?comment">(.*?)</a>.*?</span>.*?<span.*?class="">(.*?)</a>.*?<span>(.*?)</span>.*?title="(.*?)"></span>.*?title="(.*?)">.*?class=""> (.*?)\n',re.S) #评论等内容 while html.status_code==200: url_next='https://movie.douban.com/subject/26363254/comments'+re.findall(reg,html.text)[0] zhanlang=re.findall(ren,html.text) data=pd.DataFrame(zhanlang) data.to_csv('/home/wajuejiprince/文档/zhanlang/zhanlangpinglun.csv', header=False,index=False,mode='a+') #写入csv文件,'a+'是追加模式 data=[] zhanlang=[] html=requests.get(url_next,cookies=cookies,headers=head)
以上代码留意配置你本身的 User-Agent,Cookie,CSV 生存路径等。
爬取的内容生存成 CSV 名目标文件,生存的文件内容如下:
数据清洗
本文用 R语言来处理惩罚数据,固然在爬取的时候已经很是留意爬取内容的布局了,可是照旧不行制止的有一些值不是我们想要的。
好比有的评论内容会呈此刻评论者这一项中,所以照旧有须要举办一下数据的清洗。
首先加载要用到的所有包:
library(data.table) library(plotly) library(stringr) library(jiebaR) library(wordcloud2) library(magrittr)
导入数据并清洗:
dt<-fread(file.choose()) #导入数据 dt[,c("V8","V9","V10","V11","V12","V13"):=NULL] #删除空列 #一条呼吁清洗数据 my_dt<-dt[str_detect(赞成评论数,"d+")][评论有用=='有用'][是否看过=="看过"][五星数%in%c("很差","较差","还行","推荐","力荐")]
数据浅析
先来看一看通过星星数评论的环境:
plot_ly(my_dt[,.(.N),by=.(五星数)],type = 'bar',x=~五星数,y=~N)
五角星的个数对应 5 个品级,5 颗星代表力荐,4 颗星代表推荐,3 颗星代表还行,2 颗星代表较差,1 颗星代表很差。
通过五角星的评论显而易见,我们有来由相信绝大部门寓目者对这部影片持满足立场。
对评论功效的云图展示
#p#分页标题#e#
首先我们应该先举办评论的分词:
wk <- worker() sw<-function(x){wk<=x} segwords<-lapply(my_dt[,评论内容],sw) my_segwords<-unlist(segwords) #不要列表 #去除遏制词 st<-readLines(file.choose()) #读取遏制词 stopwords<-c(NULL) for(i in 1:length(st)) { stopwords[i]<-st[i] } seg_Words<-filter_segment(my_segwords,stopwords) #去除中文遏制词
总体评论云图展示:
words<-table(seg_Words)%>%data.table() setnames(words,"N","pinshu") words[pinshu>1000] #去除较低频数的词汇(小于1000的) wordcloud2(words[pinshu>1000], size = 2, fontFamily = "微软雅黑",color = "random-light", backgroundColor = "grey")
由于数据太多,导致我的破电脑卡顿,所以在建造云图的时候去掉了频数低于 1000 的词汇。
云图功效如下:
整体来看,各人对这不影片的评论照旧不错呀!剧情,行动,爱国等话题是各人谈论的核心。
评价要害词:吴京、小我私家英雄主义、主旋律、中国、主角光环、达康书记、很燃。
可见,“燃”并不是看完之后的最多反馈,观众更多是对吴京本人的惊叹,以及对爱国主义和小我私家主义的评价。
差异评论品级的云图展示
可是假如把差异评价的人的评论别离展示会是什么样子呢?也就是对五个品级(力荐,推荐,还行,较差,很差)的评论内容建造云图,代码如下(只要改变代码中力荐为其他即可):
1. 力荐的评论人的评论云图
2. 推荐的评论人的评论云图
3. 还行的评论人的评论云图
4. 较差的评论人的评论云图
5. 很差的评论人的评论云图
结论
从差异的评论的分词功效来看,他们都有一个配合的话题:爱国。
在力荐的评论中大概爱国话题的基数比很差的评论中的多,在力荐的评论中人们更愿意接头的是爱国话题之外的工作。在很差的评论中人们接头的大多是爱国话题。并且他们占的比例很有意思,从力荐的人到评论很差的人,爱国话题的比例逐渐增加。
我们不能主观的认为谁对谁错,只能说他们站在的角度纷歧样,所以看到的功效也不太一样。当我们和别人意见差异时,往往是所处的角度差异。评论很差的人思量的更多的是爱国的话题吧(这里只是爱国话题的接头,并不是谁爱不爱国)!!
阐明完了,这部《战狼2》之所以能得到这么多人的支持,基础原因照旧在于从建造上实现了《战狼1》所没有的美国大片级大局势,同时在爱国主义上引起了共识,激起了民气。