查看原文
其他

“好哭”是衡量一部好电影的标准吗?

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:崔赵雯,中南财经政法大学金融学院

本文编辑:王玉洁

技术总编:戴   雯

Stata&Python云端课程来啦!

       为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程Stata文本分析正则表达式网络爬虫基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~

哈喽啊,铁铁们~前不久上映的一部电影《关于我妈的一切》,被观众评为“今年最好哭的电影”。该影片从女儿的视角讲述了身患癌症的妈妈在得知自己时日无多后,积极改变全家人生活态度的故事,可谓是肉眼可见的“好哭”。进了电影院,带入故事情节后,基本都逃不掉“摁头哭”。对于这样一部催泪煽情的电影,让我们看看影迷们对该片是如何评价的吧~




我们爬取的是豆瓣上对该影片的评价。首先,我们打开豆瓣关于该影片影评的网页。

我们想要获取的是发表时间、评论标题以及评论的相关信息。接着,我们查看网页源代码。

可以看到发布时间和评论标题是可以直接提取的,而评论的具体内容需要进一步点开url才能获得。分析完源代码,我们就可以大显身手了~话不多说,上程序!

*获取单个网页评论发布时间、评论标题和urlclear allcap mkdir d:/豆瓣影评cd d:/豆瓣影评copy "https://movie.douban.com/subject/35196097/reviews?start=0" temp.txt,replace infix strL v 1-100000 using temp.txt, clear preserve keep if index(v,`"<span content=""') //保留包含<span content="的行replace v=ustrregexra(v,"<.*?>","") //把<>之间的内容替换为空rename v time save time.dta,replace restore keep if index(v,`"<h2><a href="') //保留包含<h2><a href="的行split v,p(`"""') //用双引号作为分隔符分割rename v2 url //重命名v2为urlsplit v3,p(">") //用>作为分隔符分割split v32,p("<") //用<作为分隔符分割rename v321 title keep url title merge using time drop _mergesave "影评1.dta",replace 
得到的结果如下:

接着,我们通过获取到的url对评论的具体内容进行提取。
*获取单个网页的评论内容clearcap mkdir d:/豆瓣影评/二次爬取 cd d:/豆瓣影评/二次爬取 use /Users/cc/Desktop/cc的推文/豆瓣影评/影评1.dta,clear gen v="" forvalues i=1/`=_N'{ replace v=fileread(url) in `i' while filereaderror(v[`i'])!=0 { sleep 5000 replace v=fileread(url) in `i' } }split v,p(`"<div id="link-report">"' `"<div class="copyright">"') keep v2replace v2 = ustrregexra(v2,"\s","",.) //删去v2中的空白符replace v2 = ustrregexra(v2, "<.*?>", "",.) //把<>之间的内容替换为空rename v2 content save "影评内容1.dta",replace
得到的结果如下:

如果我们想获得所有页面的评论内容,只需将以上程序进行循环即可。
clear allcap mkdir d:/豆瓣影评cd d:/豆瓣影评
infix strL v 1-100000 using temp.txt, clear keep if index(v,`"<span class="thispage" data-total-page="')replace v=ustrregexs(0) if ustrregexm(v,"(\d+)") local p=v[1]forvalues i=1/`p'{ local j=(`i'-1)*20 cap copy "https://movie.douban.com/subject/35196097/reviews?start=`j'" temp.txt,replace infix strL v 1-100000 using temp.txt,clear preserve keep if index(v,`"<span content=""') replace v=ustrregexra(v,"<.*?>","") rename v time save time.dta,replace restore keep if index(v,`"<h2><a href="') split v,p(`"""') rename v2 url split v3,p(">") split v32,p("<") rename v321 title keep url title merge using time drop _merge save "影评`i'.dta",replace //第i条评论对应的url、title、time保存为影评i.dta } clearlocal files:dir "." file "影评*.dta"foreach file in `files'{ append using "`file'" //把上面生成的影评i.dta合并起来 }save "影评.dta",replace gen v="" forvalues i=1/`=_N'{ replace v=fileread(url) in `i' while filereaderror(v[`i'])!=0 { sleep `=int(runiform()*5000+5000)' //随机休息5-10秒 replace v=fileread(url) in `i' } sleep `=int(runiform()*5000+5000)' }split v,p(`"<div id="link-report">"' `"<div class="copyright">"')keep v2replace v2 = ustrregexra(v2,"\s","",.)replace v2 = ustrregexra(v2, "<.*?>", "",.)rename v2 contentmerge using "影评.dta"drop _mergeorder (time url title content)save "影评.dta",replace
这样我们就获得豆瓣上所有对该影片的评论了~

我们对所获得的所有评论内容进行分析,绘制词云图。
*分词处理*导出为txt文档use 影评.dta,clearkeep contentexport delimited using content.txt,replace *调用Python分词clear allpythonimport jieba.possegword=[]with open(r"content.txt",encoding="utf-8") as f: for i in f.readlines(): str=i word.append(str)jieba.load_userdict(r"dict.txt")with open("分词.txt","w",encoding="utf-8") as f2: for unit in word: seg_list = jieba.posseg.cut(unit) for word in seg_list: f2.write(word.word+" "+word.flag+"\n")end *分词结果导入Stata,并删除单字、缺失值、停用词import delimited using 分词.txt, clear encoding("utf-8")split v1,p(" ")drop v1rename (v11 v12) (keyword flag)drop if ustrlen(keyword) == 1 // 删除单字drop if keyword =="" //删除缺失值preserveimport delimited using 停用词表.txt, clear /// encoding("utf-8") varname(nonames)outsheet using 停用词表.txt, replace nonames noquotelevelsof v1, local(keyword)restoreforeach word in `keyword' { drop if keyword == "`word'" //删除停用词}*词频统计bysort keyword: gen frequency = _Ngsort -frequencyduplicates dropsave word,replace

*在分词结果中只保留动词、名词和形容词并绘制词云图:use word,clearkeep if ustrregexm(flag, "^[anv]") keep in 1/100wordcloud keyword frequency using 词云.html, replace size(15 80) range(3840 2160)shellout 词云.html
得到的结果如下:

这部描述母女之间温情的电影,唤起了观众对母爱的记忆,真正催泪的是所有的珍惜与失去。多陪陪这个世界上最喜欢你的人吧~

以上就是今天的全部内容啦,别忘了点赞、转发、关注呦~


最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




腾讯课堂课程二维码








            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!











往期推文推荐        Stata&Python云端课程来啦!

         带你了解Stata中的矩阵

         Seminar|总统的朋友:政治关联与企业价值
         爬虫实战 | 爬取中国天气网

         爬虫实战 | 爬取东方财富网经济数据——以居民消费价格指数(CPI)为例

         Seminar|媒体关联董事对融资和外部治理的影响        神奇的组内交叉合并          PDF分章节转TXT并实现可视化——以胡景北知青日记1971至1978年为例

万物皆可开——shellout妙用

无处不在的系列配置项|从零开始的Pyecharts(三)

使用Python制作自动聊天机器人  

fillin一下,平衡回来~

order命令——快速改变变量顺序的利器 Ajax应用场景——以获取雪球网港股代码及公司名称为例

播放列表中的歌单排行 

在Stata中轻松运用program编写命令

Meta Analysis in Stata17      

芒果TV视频弹幕爬取之《我在他乡挺好的》

Stata中的判断神器——confirm命令

cngdf——名义GDP与实际GDP之间的摆渡船

最近《扫黑风暴》有点火爆!我从豆瓣评论中发现了这些……

随机森林-Random Forest 

复原之神--preserve&restore

合并,“纵”享新丝滑:frameappend & xframeappend
什么是全局配置项?|从零开始的Pyecharts(二)帮你拿下数据可视化|从零开始的Pyecharts 

Stata助力疫情打卡管理——是谁没有接龙呢?

这十年,《金融研究》的编委和读者偏爱哪些研究话题和文章?

【案例展示】Python与数据库交互

学好这一手,英语词典常在手 

玩转Stata中的数学函数

用spmap看中国空气质量

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存