前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:栗科技

一、爬取介绍

利用Chrome浏览器抓包可知,B站的弹幕文件以XML文档式进行储存,如下所示(共三千条实时弹幕)

其URL为:

http://comment.bilibili.com/183362119.xml

数字183362119则代表该视频专属ID,通过改变数字即可得到相应的弹幕文件。打开第1集的视频,查看源码,如下图所示。

不难看出,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

def crawl_comments(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=‘http://comment.bilibili.com/{}.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=‘https://www.bilibili.com/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)

crawl_comments(r_text)

最终的全部弹幕文件都在桌面的"柯南"文件下

注:这里共爬取到980个弹幕文件。【B站的柯南自941集后就跳到994集(大会员才能观看的)。虽然目前更新到1032话,但并没有1032集内容,如下图所示】

二、弹幕可视化

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()

虽说是万年小学生,柯南还是有变回新一的时候,且剧情也并不只是"找犯人—抓犯人"。接下来从数据的角度来,扒扒一些精彩剧情集数。

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

考虑到部分集数中新一是在回忆中出现的,为减少偏差,将讨论的阈值设为250次,绘制如下分布图

其讨论次数结果及剧集名如下表所示

有兴趣的朋友可以码一下,除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集,绘制词云图(剔除了高频词"新一",防止遗漏其他信息)如下所示:

从图中可看出,出现频率较高地词有整容、服部、声音、爱情等。(看来凶手是整成了新一的模样进行犯罪的,还有新兰的感情戏在里面,值得一看)

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)

从上图分析可知,组织成员的行动基本一致,其中贝姐(贝尔摩德)的人气在三人中是较高的,特别是在375集(与黑暗组织直面对决系列),讨论次数高达379。此外,统计其讨论次数大于200次的集数,结果如下:

以讨论次数最高的375集为内容,绘制词云图(剔除了高频词"贝姐",防止遗漏其他信息)如下

从图中可知,天使、琴酒、干妈、心疼、狙击手等词汇出现频率较高。从词频较低的败北主线中可以看出,这次酒厂行动应该是失败告终。

原文地址:https://www.cnblogs.com/zwhy8/p/13347276.html

python爬取b站弹幕分析_Python爬取分析B站动漫《柯南》弹幕,从数据中分析接下来的剧情...相关推荐

  1. 眼动和脑电多模态数据融合分析

    眼动和脑电多模态数据融合分析 本文参考网址:http://www2.hu-berlin.de/eyetracking-eeg/tutorial.html 本文首发在个人博客(7988888.xyz) ...

  2. python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析

    上一次分享了使用matplotlib对爬取的豆瓣书籍排行榜进行分析,但是发现python本身自带的这个绘图分析库还是有一些局限,绘图不够美观等,在网上搜索了一波,发现现在有很多的支持python的绘图 ...

  3. python猫眼电影分析_Python 爬取猫眼电影《无名之辈》并对其进行数据分析

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 罗昭成 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  4. python爬虫搜特定内容的论文_python爬取指定微信公众号文章

    python怎么抓取微信阅清晨的阳光比不上你的一缕微笑那么动人,傍晚的彩霞比不上你的一声叹息那么心疼,你的一个个举动,一句句话语都给小编带来无尽的幸福. 抓取微信公众号的文章 一.思路分析 目前所知晓 ...

  5. python爬取淘宝商品信息_python爬取淘宝商品信息并加入购物车

    先说一下最终要达到的效果:谷歌浏览器登陆淘宝后,运行python项目,将任意任意淘宝商品的链接传入,并手动选择商品属性,输出其价格与剩余库存,然后选择购买数,自动加入购物车. 在开始爬取淘宝链接之前, ...

  6. python爬取微博非好友圈_python爬取微博好友圈信息

    自从改了'海边长大就喜欢浪'这个id后,就更加喜欢刷新浪微博了,于是乎爬一下新浪微博好友圈信息 通过提交cookie信息模拟登录移动端新浪微博(http://m.weibo.cn),爬取'好友圈'信息 ...

  7. python可以爬取的内容有什么_Python爬取视频(其实是一篇福利)过程解析 Python爬虫可以爬取什么...

    如何用python爬取视频网站的数据 如何用python爬取js渲染加载的视频文件不是每个人都有资格说喜欢,也不是每个人都能选择伴你一生! 有哪位大神指导下,有些视频网站上的视频文件是通过 js 加载 ...

  8. 【php毕业设计】基于php+mysql+apache的网络数据包分析工具设计与实现(毕业论文+程序源码)——网络数据包分析工具

    基于php+mysql+apache的网络数据包分析工具设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于php+mysql+apache的网络数据包分析工具设计与实现,文章末尾附有本毕业设 ...

  9. python爬取b站弹幕分析_python爬取B站视频弹幕分析并制作词云

    目录1.分析网页 2.爬虫+jieba分词+制作词云2.1爬虫 2.2jieba分词 2.3制作词云 3.成品展示 4.完整代码 1.分析网页 视频地址:https://www.bilibili.co ...

  10. python爬取b站弹幕分析_Python 爬取「后浪」弹幕,看看大家都在说什么

    前天,正好是五四青年节, B 站的一条献给年轻人的视频「后浪」火了,一时间到处都是各种讨论「后浪」的声音. 其他的平台先不管,先看看 B 站平台本身用户对「后浪」的评价. B 站的评论是弹幕的形式,想 ...

最新文章

  1. valgrind——hisi平台valgrind
  2. IIS网站服务器性能优化指南
  3. 10分钟搞懂:亿级用户的分布式数据存储解决方案
  4. MySQL快速查询的12条建议,让你不止会用select *
  5. Python selenium环境搭建
  6. 事务概念和事务四大特性和隔离级别
  7. 从代码角度揭示:华为鸿蒙的“套壳”真相!
  8. ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)
  9. MANIFEST.MF和feature.xml版本控制规则
  10. python迭代函数例题_python map 函数使用,遍历访问可迭代对象
  11. 【原】Docker学习_安装篇(一)
  12. 给已经做好的GHO文件添加密码
  13. 2018手机用户体验的11个设计趋势
  14. c语言学习--计算机软件和硬件
  15. python多线程爬取美图录网站图集按模特姓名存储到本地(二)
  16. 污水计算机仿真技术,活性污泥法污水处理计算机仿真软件的开发及应用
  17. 使用 TX2 和 realsense D435i 相机运行 ORBSLAM3
  18. 京东疯狂月薪36k程序员最新Java面试题(常见面试题及答案汇总)
  19. new和malloc区别
  20. Android常见内存泄漏以及解决办法

热门文章

  1. Fedora34/35/36 软件闪退解决
  2. 什么是非接触式IC卡
  3. 一起用Python做个自动化弹钢琴脚本,我竟然弹出了《天空之城》!
  4. 基于arm板linux的语音合成,基于ARM7和μCLinux的中文电子语音阅读系统的研究与应用...
  5. 数字签名(Digital Signature)
  6. 用dnspod进行DNS解析出错的解决方案
  7. 计算机硬盘 打开很慢,电脑读写运行速度慢的8种解决办法
  8. js点击获取短信验证码
  9. 莫迪:“智能城市”可协助解决城市化快速扩张挑战
  10. 注册表禁用计算机管理,解除封锁注册表被禁用的几种解决办法