Bilibili弹幕爬取与分析yry11

首先分析B站网页端结构,寻找规律,找出弹幕位于网页的位置。

再将爬取的数据进行持久化处理,后进行各项分析。

三.主题页面的结构特征分析

其中各个参数分别表示:

mode:弹幕类型(<7时为普通弹幕)

size:字号

color:文字颜色

pool:弹幕池ID

author:发送者ID

dbid:数据库记录ID(单调递增)

使用正则表达式,从xml文件中筛选出关键信息,数据获取环节结束。

一.网络爬虫程序设计

导入requests库,使用request.get方法访问弹幕url::

importrequests

为了避免受反爬机制限制,添加headers

headers={

'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/81.0.4044.138Safari/537.36',

}

然后发送请求即可。

结合三中所叙述的解析方式,即可获得该视频所以的弹幕信息。

保存为csv文件即可。

具体代码如下:

defget_data():

url=input('请输入B站视频链接:')

res=requests.get(url)

cid=re.findall(r'"cid":(.*),',res.text)[-1]

res=requests.get(url,headers=headers)

xml_content=res.content.decode('utf-8')

re_patern='(.*)'

comments=re.findall(re_patern,xml_content)

danmus=[]

foritemincomments:

danmus.append(','.join(item))

#列标

headers=['stime','mode','size','color','date','pool','author','dbid','','text']

headers=','.join(headers)

danmus.insert(0,headers)

#弹幕数据结果保存为danmus.csv

withopen('danmus.csv','w',encoding='utf_8_sig')asf:

data=[]

forlineindanmus:

data.append(line+'\n')

f.writelines(data)

由于部分数据经过正则表达式筛选后,仍然不符合统一格式,在读入数据时直接进行异常输出忽略,实现清洗。具体代码如下:

df=pd.read_csv('danmus.csv',error_bad_lines=False)

(1)弹幕词云

实现代码如下:

defword_cloud_main():

withopen('danmus.csv',encoding='utf-8')asf:

lst=[]

forlineinf.readlines():

tmp=line.split(',')[-1]

lst.append(tmp)

text="".join(lst)

words=jieba.cut(text)

_dict={}

forwordinwords:

iflen(word)>=2:

_dict[word]=_dict.get(word,0)+1

items=list(_dict.items())

items.sort(key=lambdax:x[1],reverse=True)

#设置字体保证正常显示中文

plt.rcParams['font.family']=['sans-serif']

plt.rcParams['font.size']='8'

plt.rcParams['font.sans-serif']=['SimHei']

print(items)

w=wordcloud.WordCloud(

width=1000,height=700,

background_color="white",

font_path="msyh.ttc",

max_words=30,

)

w.generate_from_frequencies(_dict)#以词云生成词云

#保存词云图

w.to_file("wordcloud.png")运行结果:

(2)极性分析并绘制极性饼图图

defans_emotion():

text=[]

forlineinf.readlines()[1:]:

text.append(line.split(',')[-1])

emotions={

'positive':0,

'negative':0,

'neutral':0

foritemintext:

ifSnowNLP(item).sentiments>0.6:

emotions['positive']+=1

elifSnowNLP(item).sentiments<0.4:

emotions['negative']+=1

else:

emotions['neutral']+=1

plt.rcParams['font.size']='14'

#print(emotions.keys())

#print(emotions.values())

plt.pie(emotions.values(),

labels=emotions.keys(),#设置饼图标签

plt.title("弹幕情感极性分析饼图")#设置标题

plt.savefig('弹幕情感极性分析饼图.png')

plt.show()运行结果:

(3)弹幕数趋势图

defline_chart():

warnings.filterwarnings("ignore")

col_lst=['stime','mode','size','color','date','pool','author','dbid','','text']

#print(df)

df.columns=col_lst

date_stamp=df['date']

res_date=[]

#print(df['date'])

fordateindate_stamp:

date=time.localtime(date)

str_date=time.strftime('%Y-%m-%d',date)

res_date.append(str_date)

#print(res_date)

res_date=pd.Series(res_date)

date_count=res_date.value_counts()

date_lst=[]

count_lst=[]

foriindate_count.index:

date_lst.append(i)

foriindate_count.values:

count_lst.append(i)

#print(date_lst)

#print(count_lst)

count_dict={}

foriinrange(len(date_lst)):

count_dict[date_lst[i]]=count_lst[i]

sorted_count=sorted(count_dict.items(),key=lambdax:x[0])

#print(sorted_count)

#date

x=[]

#count

y=[]

foriinsorted_count:

x.append(i[0])

y.append(i[1])

print(x)

print(y)

importmatplotlib.pyplotasplt

fig1,ax=plt.subplots(figsize=(14,9))

ax.plot(x,y)

xticks=list(range(0,len(x),20))

xlabels=[x[i]foriinxticks]

xticks.append(len(x))

xlabels.append(x[-1])

ax.set_xticks(xticks)

ax.set_xticklabels(xlabels,rotation=80)

ymajorLocator=MultipleLocator(10)

ax.yaxis.set_major_locator(ymajorLocator)

#ax.xaxis.set_major_locator(ticker.MultipleLocator(40))

THE END
1.Bilibili产品分析商业探索之路bilibili,也被称为哔哩哔哩或简称为B站,是中国大陆第二个弹幕视频网站,也是中国最大的同性交友网站,上海东方传媒(集团)有限公司旗下网站,其前身为视频分享网站Mikufans。Mikufans于2009年6月26日由⑨bishi创建,⑨bishi原为AcFun网友,由于当时AcFun网站在运行不稳定,故建立Mikufans为用户提供一个稳定的弹幕视频分享网站。https://www.jianshu.com/p/cf6507b87c7b
1.B站弹幕宠物练级脚本或者B站自动发弹幕(b站弹幕姬)透明显示与背景设置:弹幕宠物还支持在直播姬中透明显示,并允许主播设置自定义背景,使宠物能够更好地融入直播场景。 商城与皮肤购买:B站还提供了商城系统,观众可以通过赠送互动礼物获取金币,并使用金币在商城中购买宠物皮肤、翅膀、仙剑等装饰物,进一步丰富宠物的外观和互动效果。 https://blog.csdn.net/qq_51408776/article/details/142340879
2.bilibili已发弹幕怎么撤回已发弹幕撤回方法介绍哔哩哔哩是一款十分不错的二次元视频播放平台,小伙伴们在观看视频的同时还能发送弹幕与其他网友们进行互动聊天,那么哔哩哔哩里面的已发送弹幕究竟应该怎么撤回呢?下面小编就给大家介绍一下哔哩哔哩已发弹幕撤回方法介绍,希望能够帮助到大家。 bilibili弹幕撤回方法介绍 ...https://app.3dmgame.com/gl/87568.html
3.GitHubwindowsair/bilibiliwindowsair/bilibili_danmaku Bilibili 弹幕工具集 警告: 该项目暂未准备好用于生产。API、文档、用法的更改恕不另行通知。 live_render, 直播弹幕渲染工具 live_render是一个bilibili直播录制工具,能够在录制直播视频的同时渲染弹幕,在直播结束时直接输出压制好弹幕的视频。https://github.com/windowsair/bilibili_danmaku/
4.哔哩哔哩怎么设置默认关闭弹幕?哔哩哔哩设置默认关闭弹幕教程哔哩哔哩这里我们可以在视频上发布各种弹幕,如果大家不想看到弹幕,还可以去设置默认弹幕关闭,小编带来了详细操作步骤,一起来看看。 Bilibili哔哩哔哩 v7.81.0 安卓版 类型:影音播放 大小:137.21MB 语言:简体中文 时间:2024-06-12 查看详情 哔哩哔哩设置默认关闭弹幕教程 ...https://www.jb51.net/softjc/835410.html
5.小葫芦bilibili抽奖助手Bilibili直播抽奖插件是一款针对bilibili各种节日直播推出的抽奖工具,在这里,主播开启抽奖活动,设置抽奖信息,从弹幕中抽取幸运观众,支持手动抽奖功能,让观众与主播之间互动更丰富。需要的朋友赶快来下载体验吧。 功能介绍: 主播开启抽奖活动,设置抽奖信息,从弹幕中抽取幸运观众。 小葫芦科技为广大的葫芦丝提供超级全面的各项...https://m.qqtn.com/q/161645