返回 Skill 列表
extension
分类: 数据与分析需要 API Key

B站视频爬取技能

核心功能 视频搜索 - 支持关键词搜索、排序、分页 UP主空间爬取 - 获取UP主所有视频列表 单视频下载 - DASH音视频分离下载+ffmpeg合并

person作者: user_34656363hubcommunity

B站视频爬取技能

概述

自动化爬取B站视频内容,支持多种场景:

  • 关键词搜索视频
  • UP主空间批量获取
  • 收藏夹/合集解析
  • 单个视频下载

前置条件

  1. Cookie配置 — 在脚本中设置有效的 COOKIE_STR,必须包含 SESSDATAbili_jct
  2. 安装ffmpeg — 用于合并DASH分离的音视频流
  3. 安装requestspip install requests

核心功能

1. 搜索视频

# 搜索关键词
search_videos("lidar360教程", page=1, order="totalrank")
  • 使用WBI签名请求搜索API
  • 支持排序(总排名、最多点击、最新发布)
  • 自动过滤非视频结果

2. UP主空间爬取

# 获取UP主视频列表
get_space_videos(uid=649019192, pn=1, ps=30)
  • 自动获取UP主所有视频
  • 支持分页浏览
  • 提取标题、BV号、播放量、时长

3. 单个视频下载

# 下载单个视频
download_video("BV1xxxxxx", qn=80)
  • 自动获取DASH音视频流
  • 进度显示
  • ffmpeg合并为MP4
  • 自动清理临时文件

关键技术实现

WBI签名

B站API防爬机制:

MIXIN_ENC_TAB = [46,47,18,2,53,8,23,32,15,50,10,31,58,3,45,35,27,43,5,49,33,9,42,19,29,28,14,39,12,38,41,13,37,48,7,16,24,55,40,61,26,17,0,1,60,51,30,4,22,25,34,56,63,11,36,59,2,21,20,44,62,18,52]

def get_wbi_key():
    # 从nav接口获取img_key和sub_key
    # 拼接并按MIXIN_ENC_TAB重排
    # 返回前32位作为mixin_key
    pass

def sign_params(params):
    # 添加wts时间戳
    # 参数按key排序
    # 去除特殊字符
    # MD5拼接mixin_key
    pass

DASH流处理

B站视频采用DASH分离传输:

  1. 请求 /x/player/playurl 获取音视频流URL
  2. 分别下载 .m4s 文件
  3. 使用ffmpeg合并:ffmpeg -i video.m4s -i audio.m4s -c copy output.mp4

文件名处理

def clean_filename(name):
    # 移除Windows非法字符
    # 截断至80字符
    return cleaned_name

Pitfalls

  • Cookie失效 — SESSDATA通常7天过期,过期后需重新获取
  • WBI签名超时 — 接口有频率限制,建议请求间隔1.5秒
  • 大文件下载 — 高清视频可能数GB,注意磁盘空间
  • 网络波动 — 下载大文件时可能中断,需要重试机制
  • 版权限制 — 部分视频有地域或会员限制
  • WBI参数排序陷阱 — 当 aid 值极大时,aid 参与签名字典排序会导致 -400 错误。请求播放地址时必须同时传 bvid + cid + aid。详见 media/bilibili-downloader 技能的 Pitfalls 章节。
  • 搜索接口签名差异/x/web-interface/search/type 签名方式可能与普通API不同,遇 -400 时用网页端搜索提取BV号替代。

输出格式

下载视频保存至 bilibili_download/ 目录:

bilibili_download/
├── lidar360地面点分类和等高线绘制.mp4
├── lidar360点云数据处理教学视频机载林业-单木分割流程.mp4
└── lidar360点云数据处理教学视频地基林业-单木分割流程.mp4

支持文件

  • templates/search_videos.py — 视频搜索脚本模板
  • templates/space_crawler.py — UP主空间爬取脚本模板
  • templates/video_downloader.py — 单视频下载脚本模板
  • references/bilibili-api-reference.md — B站API完整参考
  • references/search-api-fallback.md — 搜索接口签名问题的网页端替代方案
  • references/skillhub-upload-guide.md — SkillHub平台上传指南(API只读,需Web界面上传)