Python爬取《隐秘的角落》弹幕数据,实现简单可视化(附源码)
今天目标爬取201865 条《隐秘的角落》弹幕数据
工具使用
开发环境:
win10、python3.6
开发工具:
pycharm
相关模块 :
requests,stylecloud
思路分析
1、爬虫获取数据
爱奇艺的弹幕数据是以 .z 形式的压缩文件存在的,先获取 tvid 列表,再根据 tvid 获取弹幕的压缩文件,最后对其进行解压及存储,大概就是这样一个过程。
def get_data(tv_name,tv_id):
url = \'https://cmts.iqiyi.com/bullet/{}/{}/{}_300_{}.z\'
datas = pd.DataFrame(columns=[\'uid\',\'contentsId\',\'contents\',\'likeCount\'])
for i in range(1,20):
myUrl = url.format(tv_id[-4:-2],tv_id[-2:],tv_id,i)
print(myUrl)
res = requests.get(myUrl)
if res.status_code == 200:
btArr = bytearray(res.content)
xml=zlib.decompress(btArr).decode(\'utf-8\')
bs = BeautifulSoup(xml,\"xml\")
data = pd.DataFrame(columns=[\'uid\',\'contentsId\',\'contents\',\'likeCount\'])
data[\'uid\'] = [i.text for i in bs.findAll(\'uid\')]
data[\'contentsId\'] = [i.text for i in bs.findAll(\'contentId\')]
data[\'contents\'] = [i.text for i in bs.findAll(\'content\')]
data[\'likeCount\'] = [i.text for i in bs.findAll(\'likeCount\')]
else:
break
datas = pd.concat([datas,data],ignore_index = True)
datas[\'tv_name\']= str(tv_name)
return datas
共爬取得到201865 条《隐秘的角落》弹幕数据。
2、准备弹幕发射器
按照用户id分组并对弹幕id计数,可以得到每位用户的累计发送弹幕数。
#累计发送弹幕数的用户
danmu_counts = df.groupby(\'uid\')[\'contentsId\'].count().sort_values(ascending = False).reset_index()
danmu_counts.columns = [\'用户id\',\'累计发送弹幕数\']
danmu_counts.head()
第一名竟然发送了2561条弹幕,这只是一部12集的网剧啊。
df_top1 = df[df[\'uid\'] == 1810351987].sort_values(by=\"likeCount\",ascending = False).reset_index()
df_top1.head(10)
每一条弹幕都是这位观众的有感而发,可能他/她只是在发弹幕的同时顺便看看剧吧。
这位“弹幕发射器”朋友,在每一集的弹幕量又是如何呢?
是不是通过上图可以侧面说明个别剧集的戏剧冲突更大,更能引发观众吐槽呢?
“弹幕发射器”同志,11、12集请加大输出!
这些弹幕大家都认同、
抛开“弹幕发射器”同志,我们继续探究一下分集的弹幕。
看看每一集当中,哪些弹幕大家都很认同(赞)?
df_like = df[df.groupby([\'tv_name\'])[\'likeCount\'].rank(method=\"first\", ascending=False)==1].reset_index()[[\'tv_name\',\'contents\',\'likeCount\']]
df_like.columns = [\'剧集\',\'弹幕\',\'赞\']
df_like
每一集的最佳弹幕都是当集剧情的浓缩,这些就是观众们票选出来的梗(吐槽)啊!
实在不行我请你去爬山也可
3、朝阳东升
除了剧本、音乐等,“老戏骨”和“小演员”们的演技也获得了网友的一致好评。
这部剧虽然短短12集,但故事线不仅仅在一两个人身上。每个人都有自己背后的故事,又因为种种巧合串联在一起,引发观众的持续性讨论。
我们统计一下演员们在弹幕中的出现次数,看看剧中的哪些角色大家提及最多。
a = {\'张东升\':\'东升|秦昊|张老师\', \'朱朝阳\':\'朝阳\', \'严良\':\'严良\', \'普普\':\'普普\', \'朱永平\':\'朱永平\', \'周春红\':\'春红|大娘子\', \'王瑶\':\'王瑶\', \'徐静\':\'徐静|黄米依\', \'陈冠声\':\'王景春|老陈|陈冠声\', \'叶军\':\'叶军|皮卡皮卡\', \'马主任\':\'主任|老马\', \'朱晶晶\':\'晶晶\',\'叶驰敏\':\'叶驰敏\'}
for key, value in a.items():
df[key] = df[\'contents\'].str.contains(value)
staff_count = pd.Series({key: df.loc[df[key], \'contentsId\'].count() for key in a.keys()}).sort_values()
比较让我疑惑的三个小孩当中的朱朝阳提及量这么低,按理说应该与其其他两位大体相当啊。
又去源数据看了一遍,提及朱朝阳(朝阳)的弹幕确实很少,因为大部分在弹幕中观众一般就叫他“学霸”、“儿子”之类的了。
4、词云
总所周知,一篇数分文章不能少了词云。
每篇的词云都尽量跟上篇文章不同,这次我采用的是stylecloud,它算是wordcloud词云包的升级版,看起来美观多了。
import stylecloud
from IPython.display import Image
stylecloud.gen_stylecloud(text=\' \'.join(text1), collocations=False,
font_path=r\'C:\\Windows\\Fonts\\msyh.ttc\',
icon_name=\'fas fa-play-circle\',size=400,
output_name=\'隐秘的角落-词云.png\')
Image(filename=\'隐秘的角落-词云.png\')
除了主角的名字以外,在这部以“孩子”为主题的剧中,对孩子的思想、行为的探讨占据重要部分,另外,剧中从年长的戏骨到年幼的孩子,每一个人都贡献了高光的演技,对他们演技的称赞也成为高频词汇。
而最出圈的“爬山”梗,更是被频频提及。
从《无证之罪》到《隐秘的角落》,都在证明悬疑犯罪题材在当下并非没有市场,要收获高人气高口碑,如何传播与营销终归只是手段,越来越多的团队沉下心来打磨精品剧集,观众才会愿意为剧买单,让“爬山”这样的梗一步步“出圈”。
文章到这里就结束了,感谢你的观看,Python数据分析系列,下篇文章分享Python 爬取鲁迅先生《经典语录》
为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。
干货主要有:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
⑥ 两天的Python爬虫训练营直播权限
All done~详见个人简介或者私信获取完整源代码。。
往期回顾
Python实现“假”数据
Python爬虫鲁迅先生《经典语录》
Python爬虫豆瓣热门话题
来源:https://www.cnblogs.com/tsp728/p/15157210.html
图文来源于网络,如有侵权请联系删除。