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

前言

用于实现通过牌子逆向查主播信息这个功能。
插件基于Nonebot2开发,链接:https://github.com/Ikaros-521/nonebot_plugin_searchBiliInfo

工程下载

github:https://github.com/Ikaros-521/get_bili_medal_list
gitee:https://gitee.com/ikaros-521/get_bili_medal_list

目录结构

data.py数据源自vtbs.moe
1.py用于获取数据
2.py用于中断时候的下标检索
data_medal.py用于存储用户结果数据

API

https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByUser?from=0&not_mock_enter_effect=1&room_id= 传入主播的房间号,解析json["data"]["medal"]["up_medal"]["medal_name"],即可。

使用

安装相应的第三方库(aiohttp)后,python 1.py 即可。

核心源码

1.py

import json
import asyncio
import aiohttp
import time
from itertools import islice

# data.py存储着从vtbs.moe获取的主播数据
from data import DATA
# data_medal.py用于存储获取的主播牌子信息
from data_medal import DATA_MEDAL

# 用于存储牌子数据
data_medal_json = DATA_MEDAL
# 请求头
header1 = {
    'content-type': 'text/plain; charset=utf-8',
    # 下方填入你的cookie喵
    'cookie': "",
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.186.400 QQBrowser/11.3.5195.400'
}
# 计数用
num = 0

# 获取主播牌子信息 传入主播房间号
async def get_medal(roomid):
    global header1

    API_URL = 'https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByUser?from=0&not_mock_enter_effect=1&room_id=' + str(roomid)
    async with aiohttp.ClientSession(headers=header1) as session:
        try:
            async with session.get(url=API_URL, headers=header1) as response:
                if response.status != 200:
                    response.raise_for_status()
                ret = await response.json()
        except aiohttp.ClientError as e:
            print(e)
            # 睡眠个3s
            await asyncio.sleep(3)
            # 重试一次
            async with session.get(url=API_URL, headers=header1) as response:
                if response.status != 200:
                    response.raise_for_status()
                ret = await response.json()

    return ret

async def main():
    global data_medal_json, num

    # print(type(DATA))

    # 遍历本地vtb数据 第二个参数的起始值,跳过前n个数据(这个下标可以通过2.py获取已加载到的下标)
    for data in islice(DATA, 4849, None):
        print(data)

        try:
            roomid = data["roomid"]
        except (KeyError, TypeError, IndexError) as e:
            print(e)
            continue

        if roomid == 0:
            continue

        # 睡眠个0.5s
        await asyncio.sleep(0.5)
        json1 = await get_medal(roomid)
        # print(json1)
        try:
            if json1["code"] != 0:
                print(json1)
                continue

            # 获取牌子名
            medal_name = str(json1["data"]["medal"]["up_medal"]["medal_name"])
            # 拼接新的json串
            temp_json = { medal_name: data }
            try:
                # 判断是否已经存在
                if temp_json in DATA_MEDAL:
                    print("已存在 " + medal_name + " 跳过")
                    continue
                else:
                    # 追加入json
                    data_medal_json.append(temp_json)
            except (KeyError, TypeError, IndexError) as e:
                print(e)
                continue
            # 计数+1
            num += 1
            print("获取牌子名:" + medal_name)

            # 每获取10个结果 写入一次数据文件
            if num % 10 == 0 and num != 0:
                filename = 'data_medal.py'
                with open(filename, 'w', encoding="utf-8") as file_object:
                    file_object.write("DATA_MEDAL = " + json.dumps(data_medal_json, ensure_ascii=False))
                file_object.close()
                print("num=" + str(num) + ", 写入" + filename)
        except (KeyError, TypeError, IndexError) as e:
            print(e)
            continue

    filename = 'data_medal.py'
    with open(filename, 'w', encoding="utf-8") as file_object:
        file_object.write("DATA_MEDAL = " + json.dumps(data_medal_json, ensure_ascii=False))
    file_object.close()
    print("num=" + str(num) + ", 写入" + filename)
    print("数据爬取完毕了,收工回家~")
if __name__ == "__main__":
    asyncio.run(main())

到此这篇关于python实现 获取b站主播直播间 粉丝牌信息 的文章就介绍到这了,更多相关python获取b站主播直播间粉丝牌信息 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例

    本文实例讲述了Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息.分享给大家供大家参考,具体如下: import time from multiprocessing import Pool from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.web

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

    前言 用于实现通过牌子逆向查主播信息这个功能.插件基于Nonebot2开发,链接:https://github.com/Ikaros-521/nonebot_plugin_searchBiliInfo 工程下载 github:https://github.com/Ikaros-521/get_bili_medal_listgitee:https://gitee.com/ikaros-521/get_bili_medal_list 目录结构 data.py数据源自vtbs.moe1.py用于获取数

  • Selenium爬取b站主播头像并以昵称命名保存到本地

    申明:资料来源于网络及书本,通过理解.实践.整理成学习笔记. Pythion的Selenium自动化测试之获取哔哩哔哩主播的头像以昵称命名保存到本地文件 效果图 方法1 通过接口获取 首先使用pip下载requests包 pip install requests import requests # 通过接口获取请求的接口:想要获取网页的url url = 'https://api.live.bilibili.com/xlive/web-interface/v1/second/getList?pl

  • python爬虫看看虎牙女主播中谁最“顶”步骤详解

    网页链接:https://www.huya.com/g/4079 这里的主要步骤其实还是和我们之前分析的一样,如下图所示: 这里再简单带大家看一下就行,重点是我们的第二部分. 既然网页结构我们已经分析完了,那么我还是选择用之前的xpath来爬取我们所需要的资源. # 获取所有的主播信息 def getDatas(html): datalist=[] parse=parsel.Selector(html) lis=parse.xpath('//li[@class="game-live-item&q

  • 基于Python实现给喜欢的主播自动发弹幕

    目录 前言 实现步骤 全部代码 前言 发弹幕只是其中一个小小的功能,还可以自动点赞.收藏.投币.自动播放.私信等等,但是我们只演示这个,其它的不做展示. 实现步骤 先打开一个视频或者直播,F12打开开发者工具,点击network. 然后点这个清空一下 再发送一个弹幕,然后可以看到这个send,有一个post请求. 点击payload可以看到我们刚刚发送的弹幕相关数据 然后来写代码 首先导入模块 import random import time 这是我们的url url = 'https://a

  • Java实现获取cpu、内存、硬盘、网络等信息的方法示例

    本文实例讲述了Java实现获取cpu.内存.硬盘.网络等信息的方法.分享给大家供大家参考,具体如下: 1. 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息. 下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files 或点击此处本站下载. 解压压缩包,将lib下sigar.jar导入eclipse的CL

  • PHP获取mysql数据表的字段名称和详细信息的方法

    首先我们需要了解下查询MySQL数据库/表相关信息的SQL语句: 复制代码 代码如下: SHOW DATABASES                                //列出 MySQL Server 数据库. SHOW TABLES [FROM db_name]                    //列出数据库数据表. SHOW CREATE TABLES tbl_name                    //导出数据表结构. SHOW TABLE STATUS [FR

  • 用python写个颜值评分器筛选最美主播

    目录 前言 一.核心功能设计 获取主播直播封面图 主播颜值评分 二.实现步骤 1. 获取主播名称和照片 2. 主播颜值评分 前言 晚上回家闲来无事,想打开某直播平台,看看小姐姐直播.看着一个个多才多艺的小姐姐,眼花缭乱,好难抉择.究竟看哪个小姐姐直播好呢? 今天我们就一起来做个颜值评分器,爬取小姐姐们的直播照片,对每位小姐姐的颜值进行打分排序,选出最靓的star. 一.核心功能设计 总体来说,我们需要做的是获取直播颜值区的主播小姐姐的正在直播的全部主播名称和封面图并保存下来,用百度AI提供的人脸

  • Python爬取英雄联盟MSI直播间弹幕并生成词云图

    一.环境准备 安装相关第三方库 pip install jieba pip install wordcloud 二.数据准备 爬取对象:2021年5月23号,RNG夺冠直播间的弹幕信息 爬取对象路径: 方式1.根据开发者工具(F12),获取请求url.请求头.cookie等信息: 方式2:根据直播地址url,前+字符i 我们这里演示的是,采用方式2. 三.代码如下 import requests, re import jieba, wordcloud """ # 以下是练习代

  • 在Python中获取两数相除的商和余数方法

    方法一:可以使用//求取两数相除的商.%求取两数相除的余数.[/在Python中获取的是相除的结果,一般为浮点数] 方法二:使用divmod()函数,获取商和余数组成的元祖 实例代码: #!/usr/bin/python3 # -*- coding: utf-8 -*- a = int(input(u"输入被除数: ")) b = int(input(u"输入除数:")) div = a // b mod = a % b print("{} / {} =

  • python实现的B站直播录制工具

    项目地址: https://github.com/Redlnn/blive_record 前言 作者: Red_lnn 不允许将本项目运用于非法以及违反B站用户协议的用途 仅支持单个主播,多个主播请复制多份并分开单独启动 运行时如要停止录制并退出,请按键盘 Ctrl+C 如要修改录制设置,请以纯文本方式打开.py文件 利用 FFmpeg 直接抓取主播推送的流,无需打开浏览器 有新功能需求请直接提 Pull requests 建议录制为 flv 格式(默认),以防止意外中断导致录制文件损坏,若要进

随机推荐