【python】10行代码下载B站弹幕

弹幕下载

输入B站视频url链接后回车即可下载.xml格式的弹幕

import re
import requests
# 测试样例:https://www.bilibili.com/bangumi/play/ep17617
url = input('请输入B站视频链接: ')
res = requests.get(url)
cid = re.findall(r'"cid":(.*?),', res.text)[-1]
url = f'https://comment.bilibili.com/{cid}.xml'
res = requests.get(url)
with open(f'{cid}.xml', 'wb') as f:
    f.write(res.content)

转换弹幕

xml2ass:http://tiansh.github.io/us-danmaku/bilibili/

弹幕播放

使用PotPlayer播放器播放视频,并将转换后的.ass弹幕文件拖拽到视频中。

在这里插入图片描述

注意事项

实测会员视频的弹幕也能下载:https://www.bilibili.com/bangumi/play/ep341099

温馨提示

B站的精髓就是弹幕,没有弹幕的番剧是没有灵魂滴。

但现在很多B站的番剧都要会员才能观看了,如果我们去第三方的网站比如樱花动漫AGE动漫观看的话又没有弹幕。

这里有一个很好的解决办法:先到AGE动漫中把番剧下载下来,然后再用jjdown这个软件将B站视频弹幕批量下载下来,然后用PotPlayer播放番剧的时候将弹幕拖拽进去,这样就能实现和B站一样看番也有弹幕的效果。

其实我是看jjdown里面有下载弹幕的功能,然后就想着用python来实现一下,于是就有了今天的这篇文章。jjdown里面还支持将xml弹幕直接转换为ass格式。

以下是使用Python爬取B站直播弹幕代码示例: ``` python import requests import json import time def get_real_url(room_id): # 获取直播间的真实流媒体地址 url = 'https://api.live.bilibili.com/xlive/web-room/v1/playUrl/playUrl' params = { 'cid': room_id, 'qn': '10000', 'platform': 'web', 'https_url_req': 1, 'ptype': '16', 'reftype': '0', 'ts': int(time.time()) } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299', 'Referer': f'https://live.bilibili.com/{room_id}' } response = requests.get(url, params=params, headers=headers) response_json = json.loads(response.content.decode('utf-8')) real_url = response_json['data']['durl'][0]['url'] return real_url def get_danmu(room_id): # 获取直播间弹幕 url = f'wss://broadcastlv.chat.bilibili.com:2245/sub' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299', 'Referer': f'https://live.bilibili.com/{room_id}' } real_url = get_real_url(room_id) # 通过websocket连接到B站弹幕服务器 ws = create_connection(url, headers=headers) # 发送认证消息 uid = int(1e14) + int(2e14 * random.random()) auth_data = { 'uid': uid, 'roomid': room_id, 'protover': 2, 'platform': 'web', 'clientver': '1.14.3', 'type': 2, 'key': real_url.split('?')[1], } auth_json = json.dumps(auth_data).encode('utf-8') ws.send(auth_json) # 循环接收弹幕 while True: try: recv_data = ws.recv() recv_json = json.loads(gzip.decompress(recv_data).decode('utf-8')) # 处理收到的数据 if recv_json['cmd'] == 'DANMU_MSG': danmu = recv_json['info'][1] print(danmu) except Exception as e: print(e) ``` 使用上述代码,您需要传入B站直播间的房间号,代码会自动获取该直播间的真实流媒体地址,然后连接到弹幕服务器并接收弹幕消息。在接收到弹幕消息后,可以根据自己的需要进处理。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xavier Jiezou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值