原标题:Python实战爬B站 | 帮你梳理柯南主线剧情+弹幕
文末扫海报二维码领【本文完整代码】
皖渝 | 作者
凹凸数据 | 来源
https://mp.weixin.qq.com/s/kVsQmTIh-okzH9WZRBC0FA
1
爬取介绍
利用Chrome浏览器抓包可知, B站的弹幕文件以XML文档式进行储存,如下所示(共三千条实时弹幕)
其URL为:
不难看出, CID则是对应着各个视频的ID,接下来用 正则提取即可。
完整爬取代码记得添加【小数】领取哦~
最终的全部弹幕文件都在桌面的"柯南"文件下:
注:这里共爬取到980个弹幕文件。【B站的柯南自941集后就跳到994集(大会员才能观看的)。虽然目前更新到1032话,但并没有1032集内容,如下图所示】
2
弹幕可视化
1.主要人物讨论总次数分析
统计人数总次数
注: role.txt是主要人物名文件(需考虑到弹幕一般不会对人物的全名进行称呼,多数使用的是昵称,否则可能与实际情况相差较大。)
import jieba
import os
import pandas aspd
os. chdir( 'C:/Users/dell/Desktop')
jieba.load_userdict( 'role.txt')
role=[ i.replace( 'n', '') fori in open( 'role.txt', 'r',encoding= 'utf-8').readlines]
txt_all=os.listdir( './柯南/')
txt_all. sort(key=lambda x: int( x. split( '.')[ 0])) #按集数排序
count= 1
def role_count:
df = pd.DataFrame
forchapter in txt_al l:
names={}
data=[]
with open( './柯南/{}'.format(chapter), 'r',encoding= 'utf-8') asf:
forlinein f.readlines:
poss=jieba.cut( line)
forword in pos s:
ifword in role:
ifnames. get(word) isNone:
names[word]= 0
names[word]+= 1
df_new = pd.DataFrame.from_dict(names,orient= 'index',columns=[ '{}'.format( count)])
df = pd.concat([df,df_new],axis= 1)
print( '第{}集人物统计完毕'.format( count))
count+= 1
df.T.to_csv( 'role_count.csv',encoding= 'gb18030')