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

下面是“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加密与解密模块hashlib与hmac

    Python加密模块hashlib与hmac完整攻略 什么是哈希加密 哈希加密是一种单向加密方式,它通常将任意长度的消息(明文)压缩到一个固定长度(密文)的散列值上,该散列值也称为哈希值。 Python中的hashlib模块提供了很多不同的哈希算法,例如MD5、SHA1、SHA224、SHA256,SHA384和SHA512。这些哈希算法都使用相同的接口,在…

    python 2023年6月2日
    00
  • 基于Python的接口自动化读写excel文件的方法

    下面我将为您讲解Python中关于接口自动化读写Excel文件的方法。 一、准备工作 在使用Python读写Excel文件前,需要安装第三方库openpyxl,使用pip安装即可。 pip install openpyxl 二、读取Excel文件 读取Excel文件需要使用openpyxl的load_workbook函数,示例代码如下: import ope…

    python 2023年5月13日
    00
  • Python使用execjs执行包含中文参数的JavaScript

    Python使用execjs执行包含中文参数的JavaScript攻略 在Python中,我们可以使用execjs库来执行JavaScript代码。但是,当JavaScript代码中包含中文参数时,可能会出现编码问题。本文将详细讲解如何使用execjs执行包含中文参数的JavaScript,并提供两个示例。 环境配置 在使用execjs执行包含中文参数的Ja…

    python 2023年5月15日
    00
  • 零基础写python爬虫之神器正则表达式

    零基础写Python爬虫之神器正则表达式 正则表达式是一种强大的工具,可以用于匹配、查找和替换文本中的模式。在Python爬虫中,正则表达式常用于解析HTML页面,提取所需的数据。本攻略将详细讲解正则表达式的基本用法、常用符号和示例应用。 基本用法 Python中使用re模块提供的函数来操作正则表达式。常用函数: re.search(pattern, str…

    python 2023年5月14日
    00
  • Python 一键获取百度网盘提取码的方法

    下面是详细的“Python 一键获取百度网盘提取码的方法”的攻略: 1. 前言 随着网络发展,大家越来越依赖云存储,其中百度网盘是其中一个较为常用的云存储服务。在使用百度网盘的过程中,我们可能遇到这样的情况:我们想要下载别人分享的文件,但是又不想添加对方的好友或者进入对方的群组,该怎么办呢?这时候,我们可以使用提取码来下载文件。然而,提取码需要手动获取,有时…

    python 2023年6月2日
    00
  • Python数据类型之列表和元组的方法实例详解

    Python数据类型之列表和元组的方法实例详解 在Python中,列表和元组是两种常用的数据类型。本攻略将详细介绍列表和元组的方法,包括如何创建列表和元组、如何访问列表和元组中的元素、如何修改列表和元组、如何添加和删除列表和元组中的元素等。 列表 创建列表 在Python中,列表可以通过方括号[]来创建。以下是一个示例代码,演示如何创建一个列表: # 创建一…

    python 2023年5月13日
    00
  • python json.dumps中文乱码问题解决

    让我来讲解一下“python json.dumps中文乱码问题解决”的攻略。 问题描述 在Python中,我们经常会使用json.dumps方法将一个Python对象转换成Json格式的字符串。但是在使用json.dumps方法转换包含中文字符的Python对象时,有时会出现中文乱码的问题,严重影响程序的可读性和实用性。因此,如何解决json.dumps方法…

    python 2023年5月20日
    00
  • python获取整个网页源码的方法

    Python获取整个网页源码的方法攻略 在本攻略中,我们将介绍如何使用Python获取整个网页源码。将使用Python的requests库和urllib库来实现这个过程。 使用requests库获取整个网页源码 使用以下代码可以使用requests库获取整个网页源码: import requests # 使用requests库获取整个网页源码 def get…

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