关于python爬虫:Python爬取爱奇艺网剧隐秘的角落弹幕数据实现简单可视化附源码

49次阅读

共计 3169 个字符,预计需要花费 8 分钟才能阅读完成。

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 学习路线图(辞别不入流的学习)

All done~详见个人简介或者私信获取残缺源代码。。

往期回顾

Python 实现“假”数据

Python 爬虫鲁迅学生《经典语录》

Python 爬虫豆瓣热门话题

正文完
 0