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

 更新时间:2023年02月02日 09:49:58   作者:Love丶伊卡洛斯  
这篇文章主要介绍了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站主播直播间粉丝牌信息 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python合并Excel表(多sheet)的实现

    Python合并Excel表(多sheet)的实现

    这篇文章主要介绍了Python合并Excel表(多sheet)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 基于Python+QT的gui程序开发实现

    基于Python+QT的gui程序开发实现

    这篇文章主要介绍了基于Python+QT的gui程序开发实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 基于Python实现敲击木鱼积累功德效果

    基于Python实现敲击木鱼积累功德效果

    最近大家都很流行用手机敲击电子木鱼积累功德,这在很多短视频中也常常见到。本文将用Python语言实现这一效果,感兴趣的小伙伴开业了解一下
    2022-11-11
  • Python 查找算法之二分查找线性查找与哈希查找实例探究

    Python 查找算法之二分查找线性查找与哈希查找实例探究

    这篇文章主要为大家介绍了Python查找算法探究之二分查找、线性查找与哈希查找的实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • python 装饰器详解与应用范例

    python 装饰器详解与应用范例

    装饰器是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。 首先,让我们讨论下如何写你自己的装饰器
    2021-11-11
  • python 贪心算法的实现

    python 贪心算法的实现

    这篇文章主要介绍了python 贪心算法的实现,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • Selenium启动Chrome时配置选项详解

    Selenium启动Chrome时配置选项详解

    这篇文章主要介绍了Selenium启动Chrome时配置选项详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python3实现简单可学习的手写体识别(实例讲解)

    Python3实现简单可学习的手写体识别(实例讲解)

    下面小编就为大家带来一篇Python3实现简单可学习的手写体识别(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • spark编程python实例解读

    spark编程python实例解读

    这篇文章主要介绍了spark编程python实例解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python Pyperclip模块安装和使用详解

    Python Pyperclip模块安装和使用详解

    Pyperclip模块兼容python2和python3,能跨平台使用,这篇文章主要介绍了Pyperclip模块安装和使用详解,需要的朋友可以参考下
    2023-03-03

最新评论