python弹幕代码_python实现B站自动刷弹幕

这是根据刚入b站的大佬@小段不二 的av83610261写的,算是交作业了

用到的软件:Chrome Python+pycharm (vs code或者其他ide都可以不过pycharm实在是太香了)

展示成果 62播放的水视频有了1600+弹幕

第一步抓取post(这里就拿大佬视频做实验,视频由于发弹幕必须账号登录所以不在研究不登录账户的情况)

老办法chrome打开一个视频播放一段时间然后按f12 network preseve log可以不用勾选()防止刷新掉图2

然后随意发一个弹幕(务必遵守弹幕礼仪),然后一个无比明显的post请求点开它图3

图4

忽略爆头直接看发送的内容,很明显msg是发送的弹幕内容,aid是视频av号,color跟fpngtsise是弹幕属性,至于其他的progress应该是进度,我们用控制变量法验证下,再发一条不同时间,不同属性的弹幕分别试验下:在58秒处按原格式弹幕的发送值

在58秒发送的同类型弹幕中只有progress变化,根据数值含义推断出这个值为发送的毫秒数

顶部弹幕

顶部弹幕只有mode改变成了5,说明这个是弹幕类型

至于后面的大家可以自己去试,不过有两个定值type跟csrf,我猜测第一个是客户端类型(区分手机跟网页端)第二个是本地的随机值,我在之后去掉后发送仍能成功

确定数据值含义后就开始python实现了

post在请求右键->copy->copy to cULR然后粘贴到https://curl.trillworks.com/#网站上每一个程序员的必备技能ctry c & ctry v

把生成的py代码复制,稍加修改并打印返回值ctry v yes

进行测试,返回值无错误,刷新后弹幕也出现了返回结果

弹幕

并且弹幕出现时间正确 (124983ms≈124s=2m04s)

到此结束,不过频繁的发送会返回错误,另外本文是用于学习交流,请各位遵守弹幕礼仪,不要用来做一些奇怪的事情,本人测试用的弹幕已尽可能的撤回(有两条超过两分钟了无法撤回实在是抱歉),最后再次感谢@

以下是使用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站直播间的房间号,代码自动获取该直播间的真实流媒体地址,然后连接到弹幕服务器并接收弹幕消息。在接收到弹幕消息后,可以根据自己的需要进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值