三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

5分钟拿下B站热门数据:这套Python API工具箱把榜单、评论、弹幕全给你备好了

5分钟拿下B站热门数据:这套Python API工具箱把榜单、评论、弹幕全给你备好了

5分钟拿下B站热门数据:这套Python API工具箱把榜单、评论、弹幕全给你备好了

【免费下载链接】bilibili-apiB站API收集整理及开发,不再维护项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-api

想抓B站的热门视频、用户资料和弹幕,却不想从零啃接口文档?这套bilibili-api项目把散落各处的B站接口整理成了开箱即用的Python函数——读完这篇文章,你能立刻拉出指定分区的热门榜单、抓全某条视频的全部评论、把弹幕转成ASS字幕文件,全程只需要会写几行调用代码。

先说个扎心的真相:自己造轮子的人,多半掉进了坑里

很多人第一次想"碰"B站数据,脑子里都是这么想的:不就是个爬虫嘛,用 requests 把页面拉下来,正则一抠,完事。

然后现实会啪啪打脸。

你会发现:有的接口要签名校验,参数顺序错了直接 403;有的数据藏在 JSON 的第三层嵌套里,解析到怀疑人生;更别提那个经典的"官方文档说 ver=3,实测 ver=1 才能拿到数据"的玄学问题。等你折腾完这些,兴趣早就被磨没了。

这套项目存在的意义,就是帮你把"踩坑"这个步骤整个跳过——作者已经把接口地址、参数规则、返回结构、签名算法全部摸了一遍,你只需要对着现成的函数清单点菜。

先看看后厨菜单:三类接口,三种取法

把 B 站比作一家餐厅的话,这套 API 就是后厨的万能点菜单,而且分成了三档:

第一档:不掏钱也能吃(无需认证)

  • 拉取视频排行榜单、按条件筛选视频
  • 读取视频评论、专题信息、用户基本信息
  • 解析弹幕内容

第二档:需要"会员卡"(appkey + AppSecret)

  • 视频完整详情、新番信息、排行数据
  • 关键词搜索视频和专题

第三档:自己动手翻冰箱(直接爬页面整理)

  • 按时间区间爬取视频排行
  • 按年份月份获取新番列表

这三档在api.md里写得清清楚楚,连每个参数的含义、可选项、返回字段都有标注——文档本身,就是项目最值钱的部分之一。

两行命令,把代码库请进家门

先把仓库拉到本地:

git clone https://gitcode.com/gh_mirrors/bil/bilibili-api

然后你只需要关心python API/目录,它里面躺着三个核心文件:

  • bilibili.py—— 所有 API 函数都在这,照着函数名用就行
  • biclass.py—— 定义了一堆现成的数据类:User、Video、Comment、Bangumi、Danmu 等
  • support.py—— 底层的请求、JSON 解析、签名等杂活,一般不用你碰

用的时候就像这样:

from bilibili import *

完了,准备工作结束。就这么简单。

实战一:把"最近一周最火的视频"搬到你面前

这是项目里最经典的入口函数,也是我建议你上手敲的第一个:

GetPopularVideo(begintime, endtime, sortType=TYPE_BOFANG, zone=0, page=1, original=0)

翻译成人话就是:在某个时间段里,按某种排序方式,取出某个分区的第几页视频

举个例子,想看看 2024 年 1 月上半个月播放量最高的视频:

videoList = GetPopularVideo([2024,1,1], [2024,1,15]) for video in videoList: print(video.title, video.guankan)
  • begintimeendtime是三元数组[年, 月, 日]
  • sortType决定了排序维度,项目里已经给你备好了现成的常量:
常量排序依据
TYPE_BOFANG播放数
TYPE_SHOUCANG收藏数
TYPE_DANMU弹幕数
TYPE_PINGLUN评论数
TYPE_YINGBI硬币数
TYPE_PINGFEN用户评分
  • zone是分区编号,想只看动画就填1,游戏填4,科技填36,具体分区对照表在 api.md 里有完整清单
  • original设为 1 可以只筛原创投稿

一个小提醒:TYPE_PINYIN(拼音)和TYPE_TOUGAO(投稿时间)这两种排序方式比较"挑食",只能用在二级分区上,综合排名和一级分区会直接返回空列表——这不是 bug,是接口本身的限制,作者在源码里已经帮你挡掉了。

实战二:评论区和弹幕,一个都别放过

热门榜单看完了,接下来自然是"扒评论区"。

新接口推荐用这个,走的是官方新版评论 API,返回结构更干净:

commentList = GetComment_v2(aid, page=1, order=0) for comment in commentList.comments: print(comment.post_user.name, ':', comment.msg)

order支持1(按热门)和2(按点赞数)排序。如果你不满足于一页,还有一条GetAllComment会自动帮你把多页评论全部翻完,不过它内部会循环请求,慢是慢了点,省心是真省心。

接着上硬菜——弹幕。老读者应该都知道,看视频没弹幕等于白看,做数据分析更是离不开它。项目里提供了三级递进的弹幕玩法:

# 第一级:拿原始弹幕 XML xml_content = GetDanmuku(cid) # 第二级:解析成结构化对象,按时间排好序 danmu_list = ParseDanmuku(cid) for d in danmu_list: print(d.t_video, d.content) # 出现时间、弹幕内容 # 第三级:直接转成 ASS 字幕文件,丢给播放器用 Danmaku2ASS(GetDanmuku(cid), 'output.ass', 640, 360)

弹幕对象里连弹幕类型都分好了:1是滚动、5是顶端、4是底部,颜色、时间戳、用户ID 的 CRC 值全都有。想做"弹幕情感分析""弹幕高频词统计"的话,素材已经喂到你嘴边了。

想省事的话,仓库里还单独放了一个GetDanmuAss/GetAss.py工具,输入 av 号就能直接生成本地弹幕播放用的 ASS 文件,连代码都不用写。

顺手还能干这些:一张越挖越深的隐藏清单

排行榜和弹幕只是冰山一角,这套工具箱里还埋了不少实用功能,随手列几个:

  • 查用户底细GetUserInfoBymid(mid)拿到用户的粉丝数、投稿数、关注列表;GetVideoOfUploader(mid)翻出某个 UP 主的全部投稿
  • 直播状态探测HasLiving(mid)看一个人开没开直播,IsLiving(mid)还能顺带返回直播间标题和封面
  • 视频下载地址解析GetBilibiliUrl(url, appkey)输入视频页面地址,输出真实的下载链接,配套的还有GetVideoUrl/biliDownLoad.py独立工具
  • 新番跟踪GetBangumi(appkey, btype, weekday)按周几拉新番,GetBangumiInfo(bgm_id)获取一整季番剧的剧集详情
  • 承包榜数据GetSponsorInfo(aid)能拉出某部番的承包用户名单,做"谁是真爱粉"分析绰绰有余
  • 全站在线人数GetOnlineUser()一行代码拿到当前网页在线和播放在线人数

往仓库外面看,作者还把 API 玩出了更多花样:bilibili-po/里有一套完整的UP主关注关系网爬取+分析脚本(连分析代码都写好了),bili-monitor/是自动监视新番数据的小机器人,bili_live_guaji/是直播经验挂机脚本,甚至还有几个现成的 Alfred Workflow 放在Alfred/目录下——查番剧、搜视频都能用快捷键呼出来。

动手之前,把这几条潜规则记在小本本上

  1. 认准接口的"含金量":排行榜、评论、弹幕、用户信息这些免认证的接口随便玩;但GetVideoInfoGetBangumibiliVideoSearch这类需要 appkey 和 AppSecret,没有的话可以先跳过,不影响体验大头。
  2. 悠着点刷:尤其GetAllComment这种会自动翻页的,内部都帮你加了time.sleep(0.5)控速——别嫌它慢,这是对服务器最基本的尊重。自己写循环时也记得限个速。
  3. 心态摆正:项目已经停止维护了,B站接口这些年改版了不少次,个别老接口可能已失效。它的价值在于学习接口设计的思路、复用现成的解析逻辑,而不是当生产环境依赖来供着。
  4. 文档是宝:遇到函数参数记不清,别瞎猜,直接翻 api.md,每个接口的输入输出都写得明明白白,比很多商业 SDK 的文档都实在。

下一步,该你上场了

这套项目最妙的地方在于:你不需要懂签名算法,不需要会写正则,甚至不需要理解 JSON 的层层嵌套——你需要的只是一句"我想看什么数据",然后去bilibili.py里找到对应的函数名。

所以别光看了,动手吧。先把那段GetPopularVideo跑起来,把你所在分区的热门榜单拉一份;再挑一个你常看的视频,用ParseDanmuku拆一拆它的弹幕。跑通这两个,你就算真正入门了——接下来是深挖评论情感,还是分析 UP 主关系网,就看你自己的想象力了。

毕竟,数据这东西,看别人文章一百遍,不如自己跑通一行代码。

【免费下载链接】bilibili-apiB站API收集整理及开发,不再维护项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-api

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表