抖音直播间观众排行榜数据抓取​【仅供讨论交流】

查看 67|回复 9
作者:GUoOoOoOoOD   
分享一个无聊时写的Python脚本,用于获取抖音直播间观众排行榜数据。该脚本通过解析直播间链接自动提取房间ID,并调用接口获取观众排名信息(包括用户ID、昵称、性别、等级、粉丝勋章等级等)。完整脚本我放在末尾,自行提取​​功能特点:​​
  • 1.自动解析直播间URL,提取roomID;
  • 2.支持获取观众排行榜数据,并格式化输出;
  • 3.包含异常处理和错误提示机制。
    ​​使用方式:​​运行脚本后输入抖音直播间链接,即可查看排行榜数据。废话不多说,直接上代码!


    a7079ed8cb17fa0f204b390b8bb595de.png (280.72 KB, 下载次数: 2)
    下载附件
    图片
    2025-9-5 19:12 上传

    [Python] 纯文本查看 复制代码import re
    import json
    import requests
    def get_room_id(live_url):
        """从直播间链接获取roomID"""
        try:
            res = requests.get(
                url=live_url,
                headers={
                    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
                },
                cookies={
                    "# 填写cookie"
                },
            )
            res.raise_for_status()
            match_list = re.findall(r'"roomId\\":\\"(\d+)\\",', res.text)
            if not match_list:
                raise ValueError("无法从页面中提取roomID")
            return match_list[0]
        except Exception as e:
            raise Exception(f"获取roomID失败: {e}")
    def get_audience_ranklist(room_id):
        """获取直播间观众排行榜"""
        headers = {
            "accept": "application/json, text/plain, */*",
            "accept-language": "zh-CN,zh;q=0.9",
            "priority": "u=1, i",
            "referer": f"https://live.douyin.com/{room_id}",
            "sec-ch-ua": "\"Chromium\";v=\"140\", \"Not=A?Brand\";v=\"24\", \"Google Chrome\";v=\"140\"",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": "\"Windows\"",
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "same-origin",
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
        }
        cookies = {
    "# 填写cookie"
        }
        url = "https://live.douyin.com/webcast/ranklist/audience/"
        params = {
            "aid": "6383",
            "app_name": "douyin_web",
            "live_id": "1",
            "device_platform": "web",
            "language": "zh-CN",
            "enter_from": "web_live",
            "cookie_enabled": "true",
            "screen_width": "1920",
            "screen_height": "1080",
            "browser_language": "zh-CN",
            "browser_platform": "Win32",
            "browser_name": "Chrome",
            "browser_version": "140.0.0.0",
            "webcast_sdk_version": "2450",
            "room_id": room_id,
            "ignoreToast": "true",
            "rank_type": "30",
            "msToken": "rkjDOYMIQv3b96UcVsymUmIRfpNCtGz4gN7tCmGFVBfoEt_HS6J4-3xLPjE5z0Yo5VQ_LJErVCvbXU587q4sEUULdPf9j1tF4PJc2jLeEsZV7QqUCa3CyqbLzpUqjBJE-guvmqSYUGWRv83Qvpo2pwApp1264SlMHKuotU9Bg7Ur",
            "a_bogus": "df4RgwWJEdWbKVMtYcnfSV2UTgVlNPSymli2Sc/uexuKO70YkRP4Ert-joLWU32hRSBTiq1H3fzMbDVcsdXz1M9komkvuNiR5tVCVU8L2qqDTMvMLNbYCLYFzwMxUcsqlAVGiAgI0Ueq6VnAwrQu/QAry/uKQRSBM1OfkMucE9Bh1MLAL1nHPBGkEXiPUb/6"
        }
        try:
            response = requests.get(url, headers=headers, cookies=cookies, params=params)
            response.raise_for_status()
            data = response.json()
            # 提取用户信息
            users = []
            for rank in data.get('data', {}).get('ranks', []):
                user_info = rank.get('user', {})
                users.append({
                    '用户ID': user_info.get('id', ''),
                    '昵称': user_info.get('nickname', ''),
                    '性别': user_info.get('gender', 0),  # 1=男, 2=女, 0=未知
                    '显示ID': user_info.get('display_id', ''),
                    '等级': user_info.get('pay_grade', {}).get('level', 0),
                    'Sec UID': user_info.get('sec_uid', ''),
                    '粉丝勋章等级': user_info.get('pay_grade', {}).get('level', 0),
                    '粉丝团等级': user_info.get('fans_club', {}).get('data', {}).get('level', 0)
                })
            # 格式化输出
            print("用户信息汇总:")
            print("-" * 120)
            print(
                f"{'排名':
    ​​注意事项:​​
  • 1.本工具仅用于学习和研究,请勿用于商业用途或侵犯他人隐私;

  • 等级, 直播间

  • 最新的   

    不错,不错
    luzanlu   

    错误: 获取roomID失败: 'set' object is not subscriptable
    zephyrcn   


    luzanlu 发表于 2025-9-5 21:50
    错误: 获取roomID失败: 'set' object is not subscriptable

    同样报错 错误: 获取roomID失败: 'set' object is not subscriptable
    chenyong2020   

    软件看着不错,感谢楼主的分享。
    jxkdg   

    tt 适用吗
    sanyezaofang   

    持续关注此贴
    木有海鲜   

    ab是加密的,所以要解密。
    lizhuming   

    6666666666666666666666666666666666666666
    少污污   

    大神,你太牛了。能加入获取直接间的聊天信息弹幕信息。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部