bilibili直播地址获取

本文介绍了一个简单的Python脚本,该脚本能够从B站抓取指定直播间流地址并使用本地播放器播放。此外,还讨论了如何通过修改代码来实现录播功能。
摘要由CSDN通过智能技术生成

一点尝试,获取纯净的播放地址,并使用播放器播放,代码如下

#----------------------import-------------------------
import requests,os
import easygui as g
import time
from threading import Thread

#----------------------常数区---------------------------
res = requests.session()

dic={}
#----cookie保存在cookie.txt文件-----
cookie=open('cookie.txt','r').read()

h={
        "cookie": cookie
    }

#----------------------函数区------------------------------

#-------获取地址---------
def getm3u8(cid):
    url = 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id='+str(cid)+'&no_playurl=0&mask=1&qn=0&platform=web&protocol=0,1&format=0,2&codec=0,1'
    s = res.get(url,headers=h).json()['data']['playurl_info']['playurl']['stream'][0]['format'][0]['codec'][0]
    #stream【0】获取的是flv地址,需配合extra使用,strea【1】获取的是m3u8地址,无需配合extra,但不是所有但房间都有m3u8地址
    return s['url_info'][0]['host']+s['base_url']+s['url_info'][0]['extra']

#------本地播放-----------
def play(s):
    ss = '/Applications/IINA.app/Contents/MacOS/IINA "'#此为mac播放器IIna,如使用ffplay,此行换为 ss='ffplay -v warning "'
    cmd = ss + s+'"'
    os.system(cmd)




#------获取直播列表-------
def getlist():
    page=1
    sat=1
    ts=str(int(time.time()*1000))
    while sat!=0:
        url='https://api.live.bilibili.com/xlive/web-ucenter/v1/xfetter/GetWebList?page='+str(page)+'&page_size=10&_='+ts
        s=res.get(url,headers=h).json()['data']['list']
        sat=len(s)
        for i in s:
            rid=i['roomid']
            name=i['uname']
            
            dic.update({name:rid})
        page+=1

#-------简易ui-------------
def mai():
    cho = g.choicebox('', '', choices=dic.keys())
    if cho!=None:
        url = getm3u8(dic[cho])

        Thread(target=play,args=(url,)).start()
        mai()




#--------------------主函数---------------------------
if __name__ == '__main__':
    getlist()
    mai()


一点个人的尝试,实际使用价值不是很大,目前能想到的用处就是地址获取后也可以用软件进行录播,也欢迎大家一起交流

在这里插入图片描述

这是老魏的公众号,会发布一些爬虫案例和经验分享,感兴趣的小伙伴可以关注下哦

### 获取 Bilibili 直播间弹幕 API 或方法 #### 使用 WebSocket 实现 WebSocket 是一种用于浏览器和服务器之间双向通信的技术,在获取实时弹幕方面具有优势。对于 Flutter/Dart 和 Java 的实现方式,可以通过连接到 B 站官方提供的 WebSocket 地址来接收直播间内的弹幕信息[^1]。 ```dart import 'package:web_socket_channel/io.dart'; void main() { var channel = IOWebSocketChannel.connect('wss://broadcastlv.chat.bilibili.com/sub'); channel.stream.listen((message) { print(message); }); } ``` 此代码展示了如何建立与 B 站直播间的 WebSocket 连接并监听传入的消息流。需要注意的是实际应用中还需要处理认证以及消息解析等问题。 #### HTTP 请求库 Requests 方法 (Python) 另一种方案是利用 `requests` 库向特定 URL 发送 GET 请求从而获得 JSON 格式的响应体,其中包含了最新的几条弹幕内容。这种方式适用于不需要持续更新场景下的简单抓取需求[^2]。 ```python import requests def get_barrage(room_id): url = f"http://api.live.bilibili.com/ajax/msg?roomid={room_id}" response = requests.get(url).json() data = response['data']['room'] for item in reversed(data): # 反转列表以按时间顺序显示最新弹幕 print(item) get_barrage("指定的房间ID") ``` 上述 Python 脚本定义了一个函数用来根据给定的房间 ID 抓取最近一段时间内发送过的所有弹幕,并将其打印出来。 #### 利用 bilibili_api 库简化操作 为了更方便快捷地访问 B 站的各项功能,包括但不限于获取视频详情、评论区留言及弹幕等资源,可以考虑安装第三方开发维护的支持多语言版本(如 Python)的 SDK —— `bilibili_api` 。它不仅封装好了必要的接口调用逻辑而且提供了详尽文档指导使用者快速上手[^3][^4]。 ```python from bilibili_api import Verify, VideoInfo verify = Verify(sessdata="个人账户对应的sessdata", csrf="bili_jct") video_info = VideoInfo(bvid="目标视频编号", verify=verify) with open(r'保存路径', 'a') as file: for danmu_item in video_info.get_danmaku(): file.write(danmu_item.text + '\n') ``` 这段脚本实现了将某部作品下所有的弹幕逐行写入本地文件的功能,便于之后做进一步的数据分析工作比如制作词云图等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值