如何用python抓取B站数据
作者:华为云开发者社区 发布时间:2023-07-19 20:02:55
概述
可以获取的数据包括:
video-视频模块
user-用户模块
dynamic-动态模块
这次用“Running Man”十周年特辑的视频,来做个获取弹幕的Demo。
我是对比
没有对比,就没有伤害,就像最近的“哈工大”某学生和“浙大”某学生一样。
这是之前获取弹幕的过程:
1、弹幕数据接口
https://comment.bilibili.com/123072475.xml (一个固定的url地址 + 视频的cid + .xml)
2、利用Request模块,获取数据
3、利用Xpath解析数据
接下来,是时候表演真正的技术了。
经过bilibili_api的封装,弹幕数据获取的部分仅用了一行代码:
danmu = video_info.get_danmaku()
相应的获取视频的基本信息和评论信息也是一样的便捷。
basic_info = video_info.get_video_info()
comments = video_info.get_comments()
快速开始
接下来,本文将用bilibili_api获取“Running Man”十周年特辑的弹幕数据,并绘制词云。
视频的链接:
https://www.bilibili.com/video/BV1gC4y1h722
B站有av号和bv号,改版之后,在链接中直接显示的是bv号,这两个必须提供一个。
bvid是b站新的视频唯一标识符,由12位数字、字母组成,大小写敏感,传入时请包含头部的“BV”
比如:“BV1gC4y1h722”
1)安装过程
安装需要依赖request 模块,它是把B站数据的API封装起来了。
通过pip安装即可:
pip install bilibili_api
导入模块
from bilibili_api import Verify
from bilibili_api.video import VideoInfo
from bilibili_api.video import Danmaku
VideoInfo类-获取视频的信息(弹幕、评论、投币数量、播放量等)
Danmaku类-弹幕类,用于获取和发送弹幕
Verify 类,可用可不用。部分视频信息需要登录(即需要 SESSDATA )后才能使用(如历史弹幕获取)。
对视频进行点赞、投币等用户操作则需要 SESSDATA 和 csrf 。
关于 SESSDATA 和 csrf 获取的详细方法,可参考如下链接:
https://github.com/Passkou/bilibili_api/wiki/SESSDATA和CSRF获取方法(Chrome为例)
2)获取弹幕数据
创建VideoInfo对象,传入两个参数:
bvid="BV1gC4y1h722"(视频的BV号)
verify=verify(根据sessdata和csrf,获取弹幕)
获取的弹幕数据为“Danmaku类”的列表,通过遍历,打印它的text即可
贴个代码:
verify = Verify(sessdata="你的", csrf="你的")
video_info = VideoInfo(bvid="BV1gC4y1h722", verify=verify)
danmu = video_info.get_danmaku()
for i in danmu:
print(i.text)
3)绘制词云
通过jieba分词和WorldCloud绘制词云。
可通过WordCloud对象,传入“背景颜色”,“背景图”,“字体”等参数。
贴个代码:
wc = WordCloud(
background_color='white',
mask=background_Image,
font_path=r'./SourceHanSerifCN-Medium.otf',
color_func=random_color_func,
random_state=50,
)
word_cloud = wc.generate(words_str) # 产生词云
word_cloud.to_file("rm.jpg") #保存图片
# 显示词云图片
plt.imshow(word_cloud)
plt.axis('off')
plt.show()
4)最终效果
通过词云,可以看到最明显的就是 “快乐 十周年”、“RM 十周年”、“哈哈哈哈哈哈”等,
小结
通过这个模块“bilibili_api”,可以快速的获取B站视频和用户的数据,至于数据获取下来怎么玩,就看自己的想象力啦~
本文相关源码下载:https://alltodata.cowtransfer.com/s/6c255cd808b742
来源:https://www.cnblogs.com/huaweiyun/p/13431900.html
猜你喜欢
- 通常我们做统计图的时候需要借助组件来完成例如mschart,aspchart等但是这个类不需要任何组件,而且使用方便,本站测试可用:clsG
- 其实我这样做的本意是为了防止盗链!大家帮忙看一下通过代码能够根治盗链!只要不是HTTP_REFERER来源于(google.com goog
- <% dim total(7,2) total(1,1)=200 total(2,1)=800
- 代码如下:CREATE DATABASE 临时的 ON ( NAME='临时的_Data', FILENAME='h
- 如何实现让每句话的头一个字母都大写? <%dim txtFnametxtFName = &qu
- 如果你已经理解了block formatting contexts那么请继续,否则请先看看这篇文章。Overflow能够做一些很牛掰的事情,
- 启动mysql server 失败,查看/var/log/mysqld.err080329 16:01:29 [ERROR] Can'
- 我用的数据库是Access2000的,系统为Win2000 Advance Server.今天在程序调试中遇到了以下几个怪现象:1.如果Ac
- SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。 在网上找了下,大都说是因为数
- 北京邮电大学 张剑XML的局限性目前,许多Web网站的内容数据都存放在数据库或数据文件中。对于Web程序开发人员来说,如果要想把有用的信息从
- javascript版 俄罗斯方块(Russian box)小游戏,喜欢的朋友可以玩玩。对源代码感兴趣的朋友也可以研究一下。玩法介绍:可以输
- 我们可用如下代码进行监控:函数中使用了fso对象来读取文件属性。Function File_GetLastModifi
- 相信互联网的从业者都有同一个顾虑,那就是怎样将自己网站的用户牢牢抓住。如果以用户的角度来讲,任何网站其实都是一样的,都是我获取东西、获取服务
- 这里使用FSO对象来删除指定文件夹 代码和说明如下:<% set fs=createobject(&qu
- 相信为数不少的系统管理员每天都在做着同一样的工作——对数据进行备份。一旦哪一天疏忽了,而这一天系统又恰恰发生了故障,需要进行数据恢复,那么此
- 我的长博文不少,比较影响阅读体验,有必要添加一个文章目录功能。相比 Wordpress, Typecho 的插件就比较少了。我想找一个像掘金
- 1983年1月19日,苹果公司发布乔布斯领导研制的新一代电脑Lisa,当时Lisa电脑的设计人员就认为,必须将立即执行的命令和需要用户附加输
- 下列语句部分是Mssql语句,不可以在access中使用。SQL语句分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECL
- 前两天写了一篇《浅谈网站用户粘性的含义》的文章,有些个别网友问可否谈谈怎么样加强用户粘性的问题?虽然对此本人没有系统的理论做以支撑,但是既然
- 要实现此效果需要 1 个步骤: 第 1 步: 把下面的代码加到<BODY></BODY&g