爬B站视频弹幕数据

爬B站弹幕数据

准备工作

视频链接:
https://www.bilibili.com/video/BV1PK4y1b7dt?t=1【周杰伦最新单曲《Mojito》】

弹幕接口:
通过上网搜索,得知B站的弹幕接口为:https://api.bilibili.com/x/v1/dm/list.so?oid=XXX(好像该接口在网页中找不到,所以就先借鉴来使用。ps:oid即为视频的一个编号(不是BV号))

获取oid:
弹幕接口中的oid怎么获取?通过该链接(在页面检查中可找到):https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp,可以获取到我们要的那个cidcid这个键对应的值,就是我们要的oid数字串。如下图所示:
在这里插入图片描述
【注意:由于这个MV只有一个完整的视频,所以这里只有一个cid,如果一个视频是分不同小节发布的,这里就会有多个cid,不同的cid代表不同的视频。】

》通过以上分析,拿到oid的值,再拼接到弹幕接口中,就可以正确获取到弹幕数据了。
完整的弹幕接口为:https://api.bilibili.com/x/v1/dm/list.so?oid=201056987,但是最多只能获取1千条弹幕信息,且会隔段时间进行刷新

开始爬取

》代码如下:

import requests
import json
import chardet
import re
from pprint import pprint

# 1.根据bvid请求得到cid
def get_cid():
    url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp'
    res = requests.get(url).text
    json_dict = json.loads(res)
    # pprint(json_dict)
    return json_dict["data"][0]["cid"]
 
# 2.根据cid请求弹幕,解析弹幕得到最终的数据
def get_data(cid):
    final_url = "https://api.bilibili.com/x/v1/dm/list.so?oid=" + str(cid)
    final_res = requests.get(final_url)
    
    # 👇 chardet.detect() 用于精确判断字符编码
    final_res.encoding = chardet.detect(final_res.content)['encoding']
    final_res = final_res.text
    pattern = re.compile('<d.*?>(.*?)</d>')
    data = pattern.findall(final_res)
    # pprint(final_res)
    return data
 
# 3.保存弹幕列表
def save_to_file(data):
    with open("dan_mu.txt", mode="w", encoding="utf-8") as f:
        for i in data:
            f.write(i)
            f.write("\n")
 
cid = get_cid()
data = get_data(cid)
save_to_file(data)

》以上就是爬B站弹幕的案例代码,最终将弹幕数据存储在txt文本中。
》后面会将爬回来的数据进行处理,制作成词云图。
》本案例参考自✍:https://blog.csdn.net/csdnnews/article/details/106754771

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值