python实现 获取b站主播直播间 粉丝牌信息的方法

yizhihongxing

下面是“python实现获取B站主播直播间粉丝牌信息的方法”的完整攻略。

简介

Bilibili(B站)是一家国内知名的视频分享平台,网站内有许多知名的up主,这些up主通过直播和上传视频吸引了大量的粉丝。直播间粉丝牌是B站直播间的一种特殊礼物,拥有这种礼物的用户可以在直播间内展示出自己的特殊身份。本文将介绍如何使用Python获取B站主播直播间粉丝牌的信息。

实现步骤

步骤一:获取直播间编号

要获取直播间粉丝牌信息,首先需要获取直播间的编号。可以在B站直播间页面中查看地址栏中的URL,其中包含了直播间的编号。例如:https://live.bilibili.com/95230,其中95230就是直播间编号。

此外,还可以在B站直播间列表页面中获取直播间的编号。例如,打开https://live.bilibili.com/,找到要获取信息的主播的直播间并打开,直播间编号就在页面URL中。

步骤二:获取直播间的WebSocket地址

获取到直播间编号之后,就可以通过爬取页面源代码来获取直播间的WebSocket地址。页面中的WebSocket地址是跟直播间编号相关联的。通过WebSocket可以实现信息的长连接传输。

获取地址的方法是通过请求直播间页面URL,然后解析页面源代码获取WebSocket地址。例如:

import requests
from bs4 import BeautifulSoup

def get_ws_url(room_id):
    url = 'https://live.bilibili.com/{room_id}'.format(room_id=room_id)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    resp = requests.get(url, headers=headers)
    soup = BeautifulSoup(resp.text, 'html.parser')
    script = soup.find('script', text=lambda x: x and 'var WSS_URL' in x).text
    ws_url = 'wss:' + script.split('=')[-1].strip().replace("'", "")[:-3]
    return ws_url

其中,get_ws_url()函数的参数room_id为直播间编号,函数返回结果是直播间的WebSocket地址。

步骤三:连接WebSocket并获取信息

获取到直播间的WebSocket地址之后,就可以使用Python的WebSocket模块,连接WebSocket并获取信息了。B站直播间WebSocket连接需要提供的头信息包括:User-Agent、Origin、Host和Cookie,其中的Cookie是必须提供的。

下面是一个简单的实例,展示了如何获取直播间信息:

import websocket
import json

ws_url = get_ws_url(95230)

def on_message(ws, message):
    message = json.loads(message)
    cmd = message['cmd']
    if cmd == 'WELCOME':
        print('连接成功')
    elif cmd == 'LIVE':
        print('直播中')

ws = websocket.WebSocketApp(ws_url,
                            on_message=on_message,
                            on_error=lambda ws, error: print(error),
                            on_close=lambda ws: print("Websocket closed"),
                            header={
                                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
                                'Origin': 'https://live.bilibili.com',
                                'Host': 'broadcastlv.chat.bilibili.com',
                                'Cookie': '您的Cookie信息'
                            })
ws.run_forever()

其中,on_message()函数是WebSocket接收消息的回调函数。使用json.loads()函数将获取到的消息转换为Python对象。可以根据cmd参数判断消息的类型。在这个例子中,当收到的消息类型为WELCOME时,表示WebSocket连接成功;当消息类型为LIVE时,表示直播间正在直播。

步骤四:提取直播间粉丝牌信息

在WebSocket连接成功后,便可以收到直播间中发送的所有消息。为了提取直播间粉丝牌信息,需要使用json解析数据,并根据返回的cmd属性来筛选数据。以下是代码示例:

def on_message(ws, message):
    message = json.loads(message)
    cmd = message['cmd']
    if cmd == 'WELCOME':
        print('连接成功')
    elif cmd == 'LIVE':
        print('直播中')
    elif cmd == 'GUARD_MSG':  # 直播间粉丝牌信息
        data = message['data']
        print(data['username'], data['gift_name'])

ws = websocket.WebSocketApp(ws_url,
                            on_message=on_message,
                            on_error=lambda ws, error: print(error),
                            on_close=lambda ws: print("Websocket closed"),
                            header={
                                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
                                'Origin': 'https://live.bilibili.com',
                                'Host': 'broadcastlv.chat.bilibili.com',
                                'Cookie': '您的Cookie信息'
                            })

以上代码可以提取出直播间中所有的粉丝牌信息,并输出粉丝牌拥有者的用户名和粉丝牌名称。

示例一

以下是一个示例,演示如何获取直播间95230的WebSocket地址,并输出直播信息:

import websocket
import json
import requests
from bs4 import BeautifulSoup

def get_ws_url(room_id):
    url = 'https://live.bilibili.com/{room_id}'.format(room_id=room_id)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    resp = requests.get(url, headers=headers)
    soup = BeautifulSoup(resp.text, 'html.parser')
    script = soup.find('script', text=lambda x: x and 'var WSS_URL' in x).text
    ws_url = 'wss:' + script.split('=')[-1].strip().replace("'", "")[:-3]
    return ws_url


ws_url = get_ws_url(95230)

def on_message(ws, message):
    message = json.loads(message)
    cmd = message['cmd']
    if cmd == 'WELCOME':
        print('连接成功')
    elif cmd == 'LIVE':
        print('直播中')

ws = websocket.WebSocketApp(ws_url,
                            on_message=on_message,
                            on_error=lambda ws, error: print(error),
                            on_close=lambda ws: print("Websocket closed"),
                            header={
                                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
                                'Origin': 'https://live.bilibili.com',
                                'Host': 'broadcastlv.chat.bilibili.com',
                                'Cookie': '您的Cookie信息'
                            })
ws.run_forever()

示例二

以下是一个示例,演示如何获取直播间95230的WebSocket地址,并输出直播间中的粉丝牌拥有者和粉丝牌名称:

import websocket
import json
import requests
from bs4 import BeautifulSoup

def get_ws_url(room_id):
    url = 'https://live.bilibili.com/{room_id}'.format(room_id=room_id)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    resp = requests.get(url, headers=headers)
    soup = BeautifulSoup(resp.text, 'html.parser')
    script = soup.find('script', text=lambda x: x and 'var WSS_URL' in x).text
    ws_url = 'wss:' + script.split('=')[-1].strip().replace("'", "")[:-3]
    return ws_url


ws_url = get_ws_url(95230)

def on_message(ws, message):
    message = json.loads(message)
    cmd = message['cmd']
    if cmd == 'WELCOME':
        print('连接成功')
    elif cmd == 'LIVE':
        print('直播中')
    elif cmd == 'GUARD_MSG':
        data = message['data']
        print(data['username'], data['gift_name'])

ws = websocket.WebSocketApp(ws_url,
                            on_message=on_message,
                            on_error=lambda ws, error: print(error),
                            on_close=lambda ws: print("Websocket closed"),
                            header={
                                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
                                'Origin': 'https://live.bilibili.com',
                                'Host': 'broadcastlv.chat.bilibili.com',
                                'Cookie': '您的Cookie信息'
                            })
ws.run_forever()

总结

本文介绍了如何使用Python获取B站主播直播间粉丝牌的信息。其中,包括获取直播间编号、获取直播间的WebSocket地址、连接WebSocket并获取信息、提取直播间粉丝牌信息等步骤。通过本文的教程,读者可以使用Python实现获取B站直播间粉丝牌信息的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现 获取b站主播直播间 粉丝牌信息的方法 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python日期与时间模块(datetime+time+Calendar+dateuil )相关使用讲解

    Python日期与时间模块(datetime+time+Calendar+dateuil )是Python内置模块,用于处理日期和时间相关的问题。本篇攻略将详细讲解该模块的使用方法及示例。 datetime模块 datetime模块是Python内置模块,用于处理日期和时间相关的问题,包含datetime类、time类、timedelta类等。其中,date…

    python 2023年6月2日
    00
  • 用Python输出一个杨辉三角的例子

    好的! Python可以很方便地输出杨辉三角,下面是完整的攻略。 步骤一:准备工作 在输出杨辉三角之前,我们需要先明确杨辉三角的构造方法。杨辉三角是由每个数字的两边相加得到的。 在 Python 中,我们可以使用嵌套列表来存储杨辉三角的数字,这样可以方便地进行对每个数字的计算和输出。具体实现方法如下: triangle = [[1], [1, 1]] 该代码…

    python 2023年6月5日
    00
  • 我想在 Simpy Python 中从 FilterStore 中获取许多项目

    【问题标题】:I want go get many items from FilterStore in Simpy Python我想在 Simpy Python 中从 FilterStore 中获取许多项目 【发布时间】:2023-04-02 13:11:01 【问题描述】: 我想从 FilterStore 中获取许多项目。 factory.stock_pa…

    Python开发 2023年4月8日
    00
  • seek引发的python文件读写的问题及解决

    首先,我们需要明确什么是seek。在Python中,seek()函数用于改变文件指针的位置。文件指针是用于指示文件读写位置的指针。具体来说,seek(offset, whence)函数接收两个参数:offset代表偏移量,whence代表偏移的起始位置。其中whence可取值如下: 0:表示从文件开头开始偏移。即seek(0,0)代表把文件指针定位到文件开头…

    python 2023年6月6日
    00
  • Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享

    Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享 淘宝是中国最大的电子商务平台之一,许多人都会在淘宝上购物。本攻略将介绍如何使用Python模拟登陆淘宝,并统计淘宝消费情况的方法。 1. 安装Python库 我们需要安装Python的selenium、pandas和numpy库。可以使用以下命令进行安装: pip install selenium p…

    python 2023年5月15日
    00
  • Python基于递归算法求最小公倍数和最大公约数示例

    Python基于递归算法求最小公倍数和最大公约数示例 在数学中,最大公约数,也称公因数,指的是多个整数共有约数中最大的一个。而最小公倍数则是指多个整数公有的倍数中最小的一个。针对这两个数学概念,我们可以使用递归算法进行求解。 最大公约数 我们可以使用辗转相除法求解最大公约数,其基本思路是不断地将两个数中较大的数除以较小的数,直到两个数相等为止,此时的较小的那…

    python 2023年6月5日
    00
  • python 一篇文章搞懂装饰器所有用法(建议收藏)

    以下是“Python一篇文章搞懂装饰器所有用法”的完整攻略,包含了装饰器的定义、使用场景、语法、实现方式以及示例说明。 1. 装饰器的定义 装饰器是Python中种特殊的函数,它可以来修改其他函数的行为。装饰器本身是一个函数,它接受一个函数作为参数,并返回一个新函数。新的函数通常会在原函数的基础上添加一些额外的功能,例如日志记录、性能分析、缓存等。 2. 装…

    python 2023年5月14日
    00
  • 安装Python

    转载请注明 来源:http://www.eword.name/Author:ewordEmail:eword@eword.name 安装Python 一、查询是否安装了Python及安装路径 #查看当前Python版本 python –version Python 2.7.16 #查看当前所有Python版本路径 appledeMBP:~ apple$ w…

    python 2023年4月30日
    00
合作推广
合作推广
分享本页
返回顶部