页面载入中,请稍后...

点我安装PWA
您已拒绝通知
    广告广告

    【爬取哔哩哔哩直播弹幕】

    qaq卟言2023-08-20 23:28:04 Python
    小人奔跑效果开始
    • 本文章属于qaq卟言本人自己的学习教程,如果做其不法事情,跟本人无关
    • 爬取哔哩哔哩直播弹幕1.png
    • 开发这个功能是因为我时不时在哔哩哔哩直播,但是基本上是obs推流视频没错就是在挂机直播😅
    • 然后不可能时不时进来看一下直播间吧虽然没有人会看我回放视频😅,可能是因为视频是自己写代码的,进来看见都跑了
    • 不过可以通过我写好的这个脚本,大家可以自定义一下功能,我目前就写了一个记录弹幕
    • 比如直播点歌,语音朗读,或者弄一个互动小游戏
    • 我抓包发现哔哩哔哩直播弹幕有3种协议WebSocketGETPOST
    • WebSocket
    • https://api.live.bilibili.com/room/v1/Room/room_init?id=
    • GET
    • http://api.live.bilibili.com/ajax/msg?roomid=
    • POST
    • https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory
    • 这里使用GET来获取弹幕
    • 水友们其实很喜欢发送类似dddd这类重复单词(叠词),所以我创建cache.tmp文件
    • 过滤重复的弹幕,水友们发现不得劲,没有作用后,就从直播间走了😜
    • 基本上注释我都写了,还看不懂,就联系我我可以不说脏话的来骂你😏
    • 创建配置文件
    • touch config.json
    • 写入内容
    • {
        "url":"http://api.live.bilibili.com/ajax/msg?roomid=",
        "room":"4365864",
        "cache":"cache.tmp",
        "record":"danmu.log"
      }
    • 创建脚本
    • touch main.py
    • 写入内容
    • """
      -------------------------------------------------
      # !~/桌面/弹幕
      # -*- coding: utf-8 -*-
      # @Time : 2023-08-20 21:57:14
      # @Author : buyan<buyan@mail.qaqbuyan.com>
      # @Description : 爬取哔哩哔哩直播弹幕
      -------------------------------------------------
      """
      import requests
      import json
      import os
      
      # 配置文件
      config = "./config.json"
      configuration = json.load(open(config, encoding='utf-8'))
      # 弹幕url
      url = configuration["url"]
      # 房间号
      room = configuration["room"]
      # 缓存数据
      cachedata = configuration["cache"]
      # 所有弹幕记录
      record= configuration["record"]
      
      # 将输出重定向到文件
      def cache(file,content,operation):
        f = open(file,operation)
        f.writelines(content)
        # 当文件结束使用后关闭文件
        f.close()
      
      def get_danmu():
        # 伪装请求头
        headers={"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"}
        # 发送请求
        res = requests.get(url+room,headers=headers).json()
        # 解析最新
        data = res["data"]["room"][9]
        # 获取发言
        text = data["text"]
        # 获取uid
        #uid = data["uid"]
        # 获取昵称
        nickname = data["nickname"]
        # 判断是不是管理员
        if data["isadmin"] == 1:
          user = " 管理"
        else:
          user = ""
        # 获取时间
        timeline = data["timeline"]
        # 如果不存在写缓存数据文件,就自动创建一个
        if not os.path.exists(cachedata):
          cache(cachedata,'','w')
        # 读内容
        f = open(cachedata, 'r')
        # 获取内容
        content = f.read()
        # 当文件结束使用后记住需要关闭文件
        f.close()
        # 判断是不是一样
        if text == content:
          pass
        else:
          danmu = timeline,user," ",nickname," 说 ",text,"\n"
          print(timeline,user,nickname,"说",text)
          # 这里你可以定义自己需要的功能
          # if text[0:4] == "#点歌 ":
          #     点歌
          #     songs()
          # 语音朗读
          # read()
          cache(cachedata,text,'w')
          # 如果不存在弹幕记录文件,就自动创建一个
          if not os.path.exists(record):
            cache(record,danmu,'w')
          else:
            cache(record,danmu,'a')
      if __name__ == '__main__':
        while 1 > 0:
          # 获取弹幕
          get_danmu()
    • 运行脚本
    • python3 ./main.py
    • 运行效果
    • 爬取哔哩哔哩直播弹幕1.png
    • 运行后目录结构
    • 爬取哔哩哔哩直播弹幕2.png
    • 运行后弹幕记录文件danmu.log
    • 爬取哔哩哔哩直播弹幕3.png
    • 其他文章
    • 自用哔哩哔哩每日自动签到
    • 实现哔哩哔哩自动签到
    完结

    🔖本文来源:qaq卟言的个人博客网站声明如损害你的权益请联系我们

    ©️版权声明:本文为【qaq卟言】原创文章,写作不易,转载请您添加本文链接,谢谢您的合作!

    📜著作协议:《知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

    ⚠️部分文章图片来自网络,可能存在版权问题。如发现相关争议请联系qaq卟言处理!

    🔗

    广告广告

    随机文章

    该文章已经关闭评论,评论请前往留言信箱