《觉醒年代》—带你回到百年前
本文作者:石 艳,中南财经政法大学统计与数学学院
本文编辑:杨婉清
技术总编:陈 鼎
Stata&Python云端课程来啦!
好雨知时节,当春乃发生。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》、《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!
今天这篇文章的材料来源于最近热度很高的一部剧《觉醒年代》,简单来讲,这部剧主要讲述了1915年《青年杂志》问世到1921年《新青年》成为中国共产党机关刊物之间的历史故事,呈现了那个觉醒年代的社会风情和百态人生。而且该剧的导演张永新、编剧龙平平、主演于和伟分别获得白玉兰最佳导演、最佳编剧和最佳男主角,这也引来了更多人的关注,本文从该剧的豆瓣短评出发,进行分析。
该剧豆瓣评分为9.3分,可见受到了绝大多数人的认可,但是众口难调,也总有人会对其表示出不满意的看法,所以在此爬取了豆瓣"觉醒年代 短评"栏目下的500条好评和500条差评,分别绘制好评和差评的词云图,结合评论内容进一步分析产生不同看法的原因。
以第一页为例,短评页面链接为https://movie.douban.com/subject/30228394/comments?start=0&limit=20&status=P&sort=new\_score,当选择好评后,链接变为https://movie.douban.com/subject/30228394/comments?percent\_type=h&start=0&limit=20&status=P&sort=new\_score;选择差评后,链接变为https://movie.douban.com/subject/30228394/comments?percent\_type=l&start=0&limit=20&status=P&sort=new\_score,可以发现二者的不同在于`percent_type`,好评时为h,差评时为l。此外通过翻页观察,`start`的值控制页数,即使登录后也只能到25页,也就是500条数据。可能因为有了页数限制,所以在获取评论数据时并没有出现别的困难,分析网页结构后,发现每一条的评论信息都包含在`<div class="comment-item " data-cid="每一条评论对应一串数字">......</div>`中,直接使用xpath定位提取元素即可,可以利用谷歌浏览器插件XPath Helper来帮助完成。
此处只展示好评的完整代码,差评只需修改为相应的链接。
import requests
import pandas as pd
import time
from lxml import etree
headers = {
"Cookie":'''******''', #自己的登陆Cookie
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36"
}
# 好评
info_h=[]
for i in range(0,25):
print("正在抓取第%s页"%(i+1))
url = "https://movie.douban.com/subject/30228394/comments?percent_type=h&start=%s&limit=20&status=P&sort=new_score"%(i*20)
html = requests.get(url,headers=headers,timeout=10)
html.encoding = 'utf8' # 页面的编码为utf8
res = etree.HTML(html.text)
nodes_list = res.xpath('//*[@id="comments"]/div/div[2]')
for node in nodes_list:
comic = {}
comic['User'] = node.xpath('.//h3/span[2]/a/text()')[0].strip() #用户名
comic['Time'] = node.xpath('.//h3/span[2]/span[3]/text()')[0].strip()#发表时间
comic['Comment'] = node.xpath('.//p/span/text()')[0].strip().replace("\n",'')# 评论内容
info_h.append(comic)
time.sleep(4)
print('抓取结束')
利用获得的评论信息进行图形的绘制和评论情感的分析,代码仍然以上面获得的好评数据为例,并且进行好评和差评的对比。
df_h = pd.DataFrame(info_h)
# 提取评论时间中的月份
df_h['month'] = df_h['Time'].apply(lambda x:x[5:7])
df_h.head()
绘制好评月份的条形图,图形如下:
import seaborn as sns
sns.countplot(data=df_h,x='month')
差评月份条形图如下:
《觉醒年代》自2021年2月1日起在优酷和爱奇艺播出,同时在CCTV-1综合播出,好评时间集中在2~3月,说明该剧刚开始播出的时候口碑较好;差评时间却集中在5~6月份,可能因为随着热度的提升,越来越多的人去看剧却不符合自己预期,从而进行了差评。
接下来看一下评论内容的词云图展示:
好评内容词云图:
import jieba
from wordcloud import WordCloud, STOPWORDS,ImageColorGenerator #导入模块worldcloud
from matplotlib import pyplot as plt
df_h['Comment'].fillna(' ',inplace=True)
df_h['Comment'] = df_h['Comment'].apply(lambda x:' '.join(jieba.cut(x)))
#设置停用词
infile = open(".\stopwords.txt",encoding='utf-8')
stopwords_lst = infile.readlines()
STOPWORDS = [x.strip() for x in stopwords_lst]
stopwords = set(STOPWORDS)
# 绘制图形
texts = df_h['Comment']
text = ' '.join(texts)
wc = WordCloud(font_path="msyh.ttc", background_color='white', max_words=100,stopwords=stopwords, max_font_size=80, random_state=42, margin=3) #配置词云参数
wordcloud = wc.generate(text) #生成词云
plt.imshow(wc,interpolation="bilinear")#作图
plt.axis("off") #不显示坐标轴
差评内容词云图:
好评内容中,“中国”、“陈独秀”、“主旋律”、“鲁迅”等词出现的较多,说明此剧即使为主旋律剧,也受到了许多好评,而陈独秀和鲁迅等人物的塑造也成功吸引了多数人(鲁迅的人物塑造真的很绝,“人血馒头”、“狂人日记的诞生”值得反复看!!!),此外“思想”一词也代表了电视剧所展示的那个年代是一个多种思想共存的时代,这些都把中国历史上的事情真实的进行了展现。
差评内容中,“历史”、“台词”、“说”、“演员”等词出现的较多,结合评论的文本内容,本剧可能会因为台词说教性和人物脸谱化引起一定的差评,以及有些演员并没有达到部分人的满意程度。
仁者见仁,智者见智(自己的观剧体验还是非常好滴~)。记得看到过这样一段话“我们以后人的视角回看历史时,已经不知不觉忘记,当时的人并不知道他们选择的道路就是正确的,他们在不确定未来时的壮烈牺牲比我们所想像的更加悲壮和伟大“。所幸的是我们现在处于一个幸福的时代,希望我们可以继承前辈们的优秀精神,做好当今时代的责任担当。
今天的分享就到这里,欢迎感兴趣的小伙伴点赞评论转发呦~
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
用Stata画的三维图很奇怪怎么办?
如何随机生成满足特定数据特征的新变量?
爬取无法翻页网页——自然科学基金项目及可视化
爬取京东评论数据进行情感分类
Stata与音乐之间的酷炫连接
这些年,爬虫俱乐部走出的博士们!看这里,近五年各校高被引论文上榜名单!
高校经管类核心期刊发文排行榜
疯狂的科研创新加速器——Stata!
可盐可甜,“粽”有所爱,快来pick你最爱的粽子吧!
好玩有趣的手绘图形库——cutecharts
爬虫实战|摩尔庄园微博话题讨论
一季度财报出炉,哪些公司最烧钱?
一季度财报出炉,哪些公司最赚钱?
技能篇 | 图片合并大法
批量空气质量数据文件合并分析
Stata17之日期时间新功能
Stata17之Lasso新功能
爱奇艺视频弹幕爬取之《小舍得》 数据可视化利器——Matplotlib从第七次人口普查看中国人口变化|Stata与Python交互绘图
200万投资者关注!!哪家公司这么牛?
带你领略一天天气之变化
利用pyecharts看微博粉丝地区分布
零值太多怎么办?解锁Stata17新命令ziologit
Stata17新功能之Python API 小罗肥归升级啦|解锁Stata17之新命令xtmlogit 初识PyStata
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。