四月国漫新番大理寺日志前四集弹幕分析

四月国漫新番大理寺日志前四集弹幕分析

写在前面

今年四月新番出了不少新番,其中百妖谱、大理寺日志、一人之下3等国漫备受期待,相比于百妖谱、一人之下3的前期pv宣传,大理寺日志显得很平淡。但该番上线后,bilibili评分9.8,剧情、画风、特效、配音等皆在线。在技术小白好奇心的驱使下,爬取了该番前四集弹幕,并做了点分析。

数据爬取

数据爬取简单流程图
数据爬取简单流程图
解析网页,获取单集弹幕url,点击进去可以看到获取的网页格式
弹幕url访问页面截图
在这里插入图片描述
弹幕的url规律解析太繁琐,因为比较少,就直接单集访问copy过来存储在list中(对本小白来说比较节省时间)

self.url_list = ['https://api.bilibili.com/x/v1/dm/list.so?oid=178579852',
     'https://api.bilibili.com/x/v1/dm/list.so?oid=178580044',
     'https://api.bilibili.com/x/v1/dm/list.so?oid=178582161',
     'https://api.bilibili.com/x/v1/dm/list.so?oid=181413069']

从弹幕url访问截图可以看到用requests.get()得到的结果,可以用re提取弹幕文字
正则表达式

self.regex='<d p=".*?">(.*?)</d>'

解析

pattern = re.compile(self.regex,re.S)
bullet_screen_list = pattern.findall(html)

最后将爬取的结果存储到csv文件中,按条存储,一条弹幕一行

def save_csv(self,bullet_list):
    with open(self.filename,'a',encoding='utf-8') as f:
        writer = csv.writer(f)
        for i in bullet_list:
            writer.writerow([self.id,i])
            self.id += 1

数据爬取详细代码,写了一个类.

import requests
import csv
import re

class DlsSpider:
    def __init__(self):
        self.url_list = ['https://api.bilibili.com/x/v1/dm/list.so?oid=178579852',
             'https://api.bilibili.com/x/v1/dm/list.so?oid=178580044',
             'https://api.bilibili.com/x/v1/dm/list.so?oid=178582161',
             'https://api.bilibili.com/x/v1/dm/list.so?oid=181413069']
        self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36'}
        self.regex='<d p=".*?">(.*?)</d>'
        self.filename='dalisi.csv'
        self.id = 0

    def get_html(self):
        for url in self.url_list:
            html = requests.get(url=url,headers=self.headers).content.decode()
            self.parse_html(html)

    def parse_html(self,html):
        pattern = re.compile(self.regex,re.S)
        bullet_screen_list = pattern.findall(html)
        self.save_csv(bullet_screen_list)


    def save_csv(self,bullet_list):
        with open(self.filename,'a',encoding='utf-8') as f:
            writer = csv.writer(f)
            for i in bullet_list:
                writer.writerow([self.id,i])
                self.id += 1


    def run(self):
        with open(self.filename,'w',encoding='utf-8') as f:
            writer = csv.writer(f)
            writer.writerow(['id','bullet_screen'])
        self.get_html()



if __name__ == '__main__':
    spider = DlsSpider()
    spider.run()


数据分析

看一眼数据,他大概长这个样子,有12000条
在这里插入图片描述
弹幕人物关注度进行分析,这里列举了前四集主要出场人物,构建了相关人物的词列表,并对人物弹幕出现次数进行统计

libing = ['李饼','猫爷','猫总','大狸子','猫哥','少卿大人','饼哥']
chenshi = ['陈拾','陈姥姥']
wangqi = ['王七','七娘','七姑娘']
alibaba = ['阿里巴巴']
person_num ={}
for person in [libing,chenshi,wangqi,alibaba]:
    person_num[person[0]] = int(data['bullet_screen'].str.contains('|'.join(person)).sum())

查看统计结果如下:
{‘李饼’: 1256, ‘陈拾’: 50, ‘王七’: 165, ‘阿里巴巴’: 65}
从这个结果来看,猫爷果然是主角,关注程度甩其他几位三位数,而其他几位主要角色中,王七关注度最高,阿里巴巴其次,但不排除该角色与某大厂撞名从而受关注的可能性。

对结果进行可视化

bar=(
    Bar().add_xaxis(list(person_num.keys()))
    .add_yaxis('数量',list(person_num.values()))
    .set_global_opts(title_opts=opts.TitleOpts(title='人物弹幕关注数量占比柱状图'))
)

在这里插入图片描述

pie = (
    Pie().add('人物',list(zip(list(person_num.keys()),list(person_num.values()))),
       radius=['40%','80%'],
       rosetype="area")
    .set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a}<br/>{b}:{c} ({d}%)'))
)

圆环图
在这里插入图片描述
弹幕分析,看看大家都在说什么
对弹幕进行统计

count_words = data['bullet_screen'].value_counts()

部分结果展示
在这里插入图片描述
将其结果转换成元组,并存储到列表中

words = []
for index in count_words.index:
    words.append((index,int(count_words[index])))

词云可视化

wordcloud = (
    WordCloud().add('弹幕分析',data_pair=words,word_size_range=[15,60])
    .set_global_opts(
        title_opts=opts.TitleOpts(title='弹幕分析'),
        tooltip_opts=opts.TooltipOpts(is_show=True))
)

在这里插入图片描述
出现频率最高的是度制作团队的敬意“辛苦了”,侧面说明观众对该番剧的认同。之后是对剧中台词的复述,以及对剧情的讨论,可以看出该番剧情也是被观众认同的,一些“哈哈哈”类的开心言论,也可以看出该番搞笑的氛围。此外,五一期间,祝大家假期愉快。

对弹幕进行分词,再来看看大家都在讨论什么
采用jieba分词全模式,之后又去除了弹幕中的常见标点,以及空格
分词

word_txt = " ".join(data['bullet_screen'])
str_quan = jieba.cut(word_txt,cut_all=False)
word_cut = '/'.join(str_quan)

用空格代替常见标点符号

char = '!,。?:…—~~'
word_cut = re.sub(r'[{}]+'.format(char),' ',word_cut)
word_list = word_cut.split('/')

转换成DataFrame格式,去除空格

data_word = pd.DataFrame(word_list,columns=['word'])
data_word=data_word[data_word['word']!=' '] 

看一眼词汇统计
在这里插入图片描述
可视化一下

count = data_word['word'].value_counts()
word=[]
for index in count.index:
    word.append((index,int(count[index])))
 
wordcloud2 = (
    WordCloud().add('弹幕分析',data_pair=word,word_size_range=[15,80])
    .set_global_opts(
        title_opts=opts.TitleOpts(title='弹幕词汇分析'),
        tooltip_opts=opts.TooltipOpts(is_show=True))
)

在这里插入图片描述
从分词之后的结果依然可以看出观众对制作的认可,bilibili评分9.8确实很有实力。
仔细看看,一些“方言”、“口音”的词汇可以看出该番配音形式,“唐朝”、“武则天”可以看出该番有一定的时代背景,此外,弹幕中关于“猫”的词汇出现的比较频繁,可以看出该番与猫有关,结合“猫爷”、“少卿”词汇讨论数量相近,可以猜测主角与猫关系匪浅,剧情上较有吸引力。而“小黑”(番剧罗小黑战记角色)、“护法”(电影大护法角色)的讨论,可以看到背后制作团队的相关性,联想到罗小黑战记和大护法的制作和口碑,可以相信大理寺日志的制作如二者一样可以获得好口碑。

代码数据链接: 欢迎下载.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值