无法在这个位置找到: head2.htm
当前位置: 建站首页 > 新闻 > 公司新闻 >

Python抓取剖析B站日本动漫《柯南》视频弹幕,从数据信息信息内容中分刘海析接下来的剧情

时间:2021-04-14 19:53来源:未知 作者:jianzhan 点击:
序言文中的文本及照片来源于于互联网,仅作学习培训、沟通交流应用,不具备一切商业服务主要用途,著作权归著作人全部,若有难题请立即联络大家以作解决。创作者:栗高新科技一、抓

序言

文中的文本及照片来源于于互联网,仅作学习培训、沟通交流应用,不具备一切商业服务主要用途,著作权归著作人全部,若有难题请立即联络大家以作解决。

创作者:栗高新科技

一、抓取详细介绍

运用Chrome访问器抓包软件得知,B站的视频弹幕文档以XML文本文档式开展存储,以下所显示(共三千条即时视频弹幕)

 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 


 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

其URL为:

.xml

数据则意味着该视頻专享ID,根据更改数据就可以获得相对的视频弹幕文档。开启第一集的视頻,查询源代码,以下图所显示。

 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

不会太难看得出,CID则是相匹配着每个视頻的ID,接下去用正则表达式获取就可以。

详细抓取编码以下

import requests
import re
from bs4 import BeautifulSoup as BS
import os
path='C:/Users/dell/Desktop/柯南'
if os.path.exists(path)==False:
os.makedirs(path)
os.chdir(path)

def gethtml(url,header):
r=requests.get(url,headers=header)
r.encoding='utf-8'
return r.text

ments(r_text):
txt1=gethtml(url,header)
pat='"cid":(\d+)'
chapter_total=re.findall(pat,txt1)[1:-2]
count=1
for chapter in chapter_total:
url_base='{}.xml'.format(chapter)
txt2=gethtml(url_base,header)
soup=BS(txt2,'lxml')
all_d=soup.find_all('d')
with open('{}.txt'.format(count),'w',encoding='utf-8') as f:
for d in all_d:
f.write(d.get_text()+'\n')
print('第{}话视频弹幕载入结束'.format(count))
count+=1

if __name__=='__main__':
url='bangumi/play/ep321808'
header={'user-agent':'Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02'}
r_text=gethtml(url,header)
ments(r_text)

最后的所有视频弹幕文档都会桌面上的"柯南"文档下

 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

注:这儿共抓取到980个视频弹幕文档。【B站的柯南自941集后就跳至994集(交流会员才可以收看的)。尽管现阶段升级到1032话,但并沒有1032集內容,以下图所显示】

 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

二、视频弹幕可视性化

1.关键角色探讨总频次剖析

(1)统计分析总数总频次
注: role.txt是关键角色名文档(需考虑到到视频弹幕一般不容易对角色的全称开展叫法,大部分应用的是呢称,不然将会与具体状况相距很大。)

import jieba
import os
import pandas as pd
os.chdir('C:/Users/dell/Desktop')
jieba.load_userdict('role.txt')
role=[ i.replace('\n','') for i 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()
for chapter in txt_all:
names={}
data=[]
with open('./柯南/{}'.format(chapter),'r',encoding='utf-8') as f:
for line in f.readlines():
poss=jieba.cut(line)
for word in poss:
if word in role:
if names.get(word) is None:
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')

(2)可视性化

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['kaiti']
plt.style.use('ggplot')
df=pd.read_csv('role_count.csv',encoding='gbk')
df=df.fillna(0).set_index('episode')
plt.figure(figsize=(10,5))
role_sum=df.sum().to_frame().sort_values(by=0,ascending=False)
g=sns.barplot(role_sum.index,role_sum[0],palette='Set3',alpha=0.8)
index=np.arange(len(role_sum))
for name,count in zip(index,role_sum[0]):
g.text(name,count+50,int(count),ha='center',va='bottom',)
plt.title('B站名探案柯南视频弹幕——关键角色探讨总频次遍布')
plt.ylabel('探讨频次')
plt.show()
 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

虽然是万年中小学生,柯南還是有变回新一的情况下,且剧情也其实不仅仅"找罪犯—抓罪犯"。接下去从数据信息的视角来,扒扒一些精彩纷呈剧情集数。

2.柯南变回新一集数统计分析

考虑到到一部分集数中澳一是在追忆抽出现的,为降低误差,将探讨的阀值设成250次,绘图以下遍布图

 

其探讨频次結果及连续剧名以下表所显示

 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

有兴趣爱好的朋友能够码一下,除235集外,均是柯南变回新一的集数。

有关编码以下:

df=pd.read_csv('role_count.csv',encoding='gbk')
df=df.fillna(0).set_index('episode')
xinyi=df[df['新一'] =250]['新一'].to_frame()
print(xinyi) #新一出场集数
plt.figure(figsize=(10,5))
plt.plot(df.index,df['新一'],label='新一',color='blue',alpha=0.6)
plt.annotate('集数:50,探讨频次:309',
xy=(50,309),
xytext=(40,330),
arrowprops=dict(color='red',headwidth=8,headlength=8)
)
plt.annotate('集数:206,探讨频次:263',
xy=(206,263),
xytext=(195,280),
arrowprops=dict(color='red',headwidth=8,headlength=8)
)
plt.annotate('集数:571,探讨频次:290',
xy=(571,290),
xytext=(585,310),
arrowprops=dict(color='red',headwidth=8,headlength=8)
)
plt.hlines(xmin=df.index.min(),xmax=df.index.max(),y=250,linestyles='--',colors='red')
plt.legend(loc='best',frameon=False)
plt.xlabel('集数')
plt.ylabel('探讨频次')
plt.title('工藤新一探讨频次遍布图')
plt.show()

以探讨频次数最多的572集,绘图词云图(去除了高频率词"新一",避免忽略别的信息内容)以下所显示:

 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

从图上可看得出,出現頻率较堡垒词有整容、服部、响声、感情等。(来看凶手是整变成新一的样子开展违法犯罪的,也有新兰的情感戏在里边,非常值得一看)

3.主线集数內容剖析

主线剧情关键是紧紧围绕着机构组员(琴酒、威士忌、小熊摩德)进行,绘图遍布图以下:

plt.figure(figsize=(10,5))
names=['琴酒','威士忌','贝姐']
colors=['#090707','#004e66','#EC7357']
alphas=[0.8,0.7,0.6]
for name,color,alpha in zip(names,colors,alphas):
plt.plot(df.index,df[name],label=name,color=color,alpha=alpha)
plt.legend(loc='best',frameon=False)
plt.annotate('集数:{},探讨频次:{}'.
format(df['贝姐'].idxmax(),int(df['贝姐'].max())),
xy=(df['贝姐'].idxmax(),df['贝姐'].max()),
xytext=(df['贝姐'].idxmax()+30,df['贝姐'].max()),
arrowprops=dict(color='red',headwidth=8,headlength=8)
)
plt.xlabel('集数')
plt.ylabel('探讨频次')
plt.title('酒厂组员探讨频次遍布图')
plt.hlines(xmin=df.index.min(),xmax=df.index.max(),y=200,linestyles='--',colors='red')
plt.ylim(0,400)

#輸出主线连续剧
mainline=set(list(df[df['贝姐'] =200].index)+list(df[df['琴酒'] =200].index)) #威士忌可忽视不计入
print(mainline)
 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

从图中剖析得知,机构组员的行動基本一致,在其中贝姐(小熊摩德)的人气值在三人群中是较高的,非常是在375集(与黑喑机构面对对战系列产品),探讨频次达到379。另外,统计分析其探讨频次超过200次的集数,結果以下:

 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

以探讨频次最大的375集为內容,绘图词云图(去除了高频率词"贝姐",避免忽略别的信息内容)以下

 Python爬取分析B站动漫《柯南》弹幕,从数据信息中分析接下去的剧情

 

从图上得知,天使之、琴酒、干妈、心痛、阻击手等语汇出現頻率较高。从词频较低的落败主线中能看出,此次酒厂行動应当是不成功结束。

 

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: ajaxfeedback.htm
栏目列表
推荐内容


扫描二维码分享到微信

在线咨询
联系电话

400-888-8866