目录
一、利用Python爬取弹幕
二、利用几行代码直接生成词云
三、将弹幕属性和内容放入mysql当中
四、分析弹幕在视频各节点的数量
1、分析视频各个片段出现的弹幕数量
2、分析视频各大章节出现的弹幕数量
3.分析视频各小节出现的弹幕数量
五、分析弹幕数量和日期的关系
1、分析不同日期的弹幕数量
2、上午、下午、晚上的弹幕数量
3、每天不同细分时间段的弹幕数量
六、利用LSTM网络对弹幕数量进行预测
七、利用SnowNLP库对弹幕进行情感分析
八、谁是弹幕发射器?
近期,GPT-4在网络上引起了轩然大波,b站上也出现了许许多多关于GPT-4的解说视频,其中有一个解说视频受到了网友的热烈追捧,目前已填充有2万多的弹幕,这也引起了本人的极大兴趣,因此对该视频的弹幕进行了爬取,并记录于mysql数据库中,以进行数据分析、数据挖掘、弹幕数量预测和情绪分类等等。话不多说,正文开始。
一、利用Python爬取弹幕
首先打开以下链接,该链接便是弹幕的视频来源,点击以下链接并打开,右键点击-检查,查看网页编写代码,再依此点击--网络--Fetch-XHR,然后播放视频,随着视频中弹幕的出现,右侧出现一次次请求,直到看到cid代号的出现,如下图右下角,记下cid的值,将该值填入下述网址中:https://comment.bilibili.com/cid值.xml,打开该网址就可以看到一条条弹幕信息了,我们要爬取的对象便是这条网址了。(爬取技术请用于正途)
【渐构】万字科普GPT4为何会颠覆现有工作流;为何你要关注微软Copilot、文心一言等大模型_哔哩哔哩_bilibili
确定了网址,下面开始利用python对该网址进行爬取,代码如下:
import requests from bs4 import BeautifulSoup response = requests.get("https://comment.bilibili.com/1054910356.xml") #要爬取的网址 response.encoding='utf8' #编码方式 html = response.text soup = BeautifulSoup(html) #使用beautifulsoup库快速查找我们想要的信息 all_txt = soup.findAll("d") #寻找到所有包含d的行 txt=[all_txts.attrs ["p"]for all_txts in all_txt] #寻找到所有包含d的行中属性为p的值,这里边包含了弹幕的虚拟id等 txtss=[all_txts.string for all_txts in all_txt] #寻找到所有包含d的行中的字符串数据,即弹幕内容 txtsss=[txts.replace(' ','') for txts in txtss] #将字符串中的空格消除掉 print(txt,txtsss) ###打印便可看见一条条弹幕的属性和内容了。
输出结果如下:
二、利用几行代码直接生成词云
danmustr=''.join(i for i in txtsss) #将所有弹幕拼接在一起 words=list(jieba.cut(danmustr)) ###利用jieba库将弹幕按词进行切分 words=[i for i in words if len(i)>1] ###挑出长度大于1的词语(为去除诸如?,哈,啊等字符) wc=wordcloud.WordCloud(height=1000,width=1000,font_path='simsun.ttc')#利用wordcloud库定义词云图片的信息 wc.generate(' '.join(words)) ##生成图片 print(wc) plt.imshow(wc) plt.show()
执行上述代码,得到以下词云图片:
分析:从该词云图片信息可以知道,大量弹幕中都出现了就是人类、ai、中国等词眼,看来大家都认为gpt-4是一场重大变革,ai的智能程度或可比肩人类,另外大家也在讨论中国应当如何应对这次ai的巨大变革。
三、将弹幕属性和内容放入mysql当中
为便于对弹幕数据的调用和处理,我们需要将其存入mysql数据库中,代码如下:
import pandas as pd from datetime import datetime from sqlalchemy import create_engine,text pg=pd.DataFrame({"paragraphs": txt,"comment":txtsss})#将弹幕属性和弹幕内容放入dataframe中 pg["time_happen"]=pg['paragraphs'].map(lambda x:x.split(',')[0]) #将弹幕的第一个属性值拆分为time_happen列 pg["danmu_gundong"]=pg['paragraphs'].map(lambda x:x.split(',')[1]) #将弹幕的第二个属性值拆分为danmu_gundong列 pg["danmu_size"]=pg['paragraphs'].map(lambda x:x.split(',')[2]) #与上类似 pg["danmu_color"]=pg['paragraphs'].map(lambda x:x.split(',')[3]) #与上类似 pg["danmu_ture_time"]=pg['paragraphs'].map(lambda x:x.split(',')[4]) #与上类似 pg["danmu_mode"]=pg['paragraphs'].map(lambda x:x.split(',')[5]) #与上类似 pg["user_id"]=pg['paragraphs'].map(lambda x:x.split(',')[6]) #与上类似 pg["danmu_ture_time"]=pg['danmu_ture_time'].apply(lambda x:datetime.fromtimestamp(int(x))) #将时间戳先转换为datetime,可不转 pg["danmu_ture_time"]=pg['danmu_ture_time'].apply(lambda x:x.date()) #将datetime转换为date日期,可不转 engine=create_engine('mysql+pymysql://root:123456@localhost/gpt') #利用sqlalchemy库建立mysql的引擎 pg.to_sql(name='gptlast',con=engine,index=False,if_exists='replace')#记得安装pymysql库!!,将数据写入mysql
执行上述代码,便可写入mysql当中,如下:
四、分析弹幕在视频各节点的数量
1、分析视频各个片段出现的弹幕数量
本文爬取了近万条弹幕,绘制了弹幕数量与出现时间的曲线图,绘制曲线图的代码如下:
import matplotlib from matplotlib import pyplot as plt engine=create_engine('mysql+pymysql://root:123456@localhost/gpt') #利用sqlalchemy库建立mysql的引擎 df=pd.read_sql(text('select * from gptlast'),con=engine.connect())#从mysql数据库中查找出所有弹幕信息 list_time_happen=df["time_happen"].tolist() list_count_time_happen=[] for i in range(500): count_time_happen = 0 for j in range(7200): if i * 6.028