

自动识别 URL 或关键词,批量提取 YouTube 视频、频道、播放列表全量元数据,支持字幕、评论下载,JSON/CSV 导出,适用于市场调研与竞品分析。
统一 YouTube 采集器。传入 YouTube URL 或搜索关键词,它会自动识别输入类型并返回带完整元数据的视频。 一个脚本覆盖所有 YouTube 数据类型:
| 输入 | 返回内容 |
|---|---|
视频 URL(watch?v=、youtu.be、/shorts/) | 该单个视频的完整详情 |
频道 URL(/@handle、/channel/UC...、/c/、/user/) | 该频道的视频 / Shorts / 直播 |
播放列表 URL(?list=) | 播放列表中的每个视频 |
搜索结果 URL(/results?search_query=) | 匹配的视频 |
| 搜索关键词 | 匹配的视频 / Shorts / 直播(遵循下面的过滤器) |
按类型独立配额,且按每个搜索词、每个频道分别计数:maxResults(视频)、maxResultsShorts(Shorts)、maxResultStreams(直播)。
搜索词支持完整的 YouTube 搜索过滤器——排序、上传日期、时长、类型 与 Features(HD、字幕/CC、知识共享、3D、直播、已购、4K、360°、地区、HDR、VR180),统一编码进搜索 sp 参数。频道额外支持 publishedAfter(发布日期)与 频道排序。
可选附加项(按视频):字幕 / 转录(downloadSubtitles,含 subtitleFormat srt/vtt/plaintext/json 与 preferAutoGeneratedSubtitles)与评论(includeComments)。
JSON、CSV。
表格列结构 = 每个逻辑字段一列(列数稳定,即下面《字段字典》那些字段)。数组/对象字段(subtitles、descriptionLinks、hashtags、collaborators、aboutChannelInfo、comments 等)保持单列:控制台里折叠显示为「N items」/「N fields」、可点开查看;导出 CSV/XLSX 时整块序列化为该格内的 JSON 字符串。
长字幕提示:整段 SRT 内联在
subtitles那一格的 JSON 里。CSV 无单元格长度上限(长视频字幕完整);Excel/XLSX 单格上限 32767 字符,超长字幕导 XLSX 会截断该格 —— 需要完整长字幕请导 CSV。
以下是结果的示例。
| 字段 | 类型 | 说明 |
|---|---|---|
| title | string | 视频标题 |
| id | string | YouTube 视频 ID |
| url | string | 规范的观看 URL |
| type | string | 条目类型:video、short 或 stream |
| sourceType | string | 视频的发现方式:video、search、channel、playlist |
| input | string | 产生该视频的原始输入(URL 或关键词) |
| thumbnailUrl | string | 最高分辨率缩略图 URL |
| viewCount | string | 观看数文本 |
| date | string | 发布日期或相对发布时间 |
| likes | string | 点赞数文本 |
| commentsCount | string | 评论数 |
| duration | string | 视频时长(H:MM:SS) |
| channelName | string | 频道名称 |
| channelUrl | string | 频道 URL |
| numberOfSubscribers | string | 频道订阅数文本 |
| text | string | 视频描述文本 |
| descriptionLinks | array | 从描述中提取的链接 |
| subtitles | boolean | 是否有字幕 / 隐藏字幕 |
| subtitleLanguage | string | 已下载字幕轨的语言代码 |
| subtitlesText | string | 字幕转录文本,格式由 subtitleFormat 决定(srt/vtt/plaintext/json) |
| transcript | array | 字幕分段 [{start, dur, text}] |
| comments | array | 顶层评论(仅开启评论时)[{cid, replyToCid, type, publishedTimeText, pageUrl, videoId, comment, author, authorIsChannelOwner, voteCount, replyCount, hasCreatorHeart, title, commentsCount}] |
| isMonetized | boolean | 视频是否变现 |
| commentsTurnedOff | boolean | 是否关闭评论 |
| liveStatus | string | 直播状态:is_live / is_upcoming / was_live / not_live |
| availableQualities | array | 可用清晰度,如 ["2160p","1080p","720p"](来自 player 响应) |
| location | string | 录制地点(视频未标注则为 null) |
| error | string | 错误信息(成功时为 null) |
| error_code | string | 错误码(成功时为 null) |
| warning | string | 非阻断警告信息 |
| warning_code | string | 非阻断警告码 |
| success | boolean | 该条数据是否采集成功 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| startURLs | array | 否 | [](空) | 直接的视频 / 频道 / 播放列表 / 搜索 / Shorts URL(搜索过滤器对其不生效)。填了 URL 时以 URL 为准,忽略关键词。 |
| searchKeywords | array | 否 | python tutorial | 搜索关键词;每个解析为匹配的结果。提供 startURLs 时忽略。 |
| maxResults | integer | 否 | 10 | 每个搜索词 / 每个频道的最大普通视频数(0=跳过视频) |
| maxResultsShorts | integer | 否 | 0 | 每个搜索词 / 每个频道的最大 Shorts 数(0=跳过) |
| maxResultStreams | integer | 否 | 0 | 每个搜索词 / 每个频道的最大直播数(0=跳过) |
| sortBy | string | 否 | relevance | 搜索排序:relevance / date / views / rating |
| dateFilter | string | 否 | any | 上传日期:any / hour / today / week / month / year |
| lengthFilter | string | 否 | any | 时长:any / short(<4分) / medium(4–20分) / long(>20分) |
| videoTypeFilter | string | 否 | any | 搜索类型 chip:any / video / channel / playlist / movie |
| features | array | 否 | [] | 搜索特性:hd, subtitles, creativeCommons, 3d, live, purchased, 4k, 360, location, hdr, vr180 |
| downloadSubtitles | boolean | 否 | false | 抓取每个视频的字幕 / 转录文本 |
| subtitleLanguages | array | 否 | [] | 优先字幕语言代码(如 en、es) |
| preferAutoGeneratedSubtitles | boolean | 否 | false | 优先选择自动生成(ASR)轨而非人工字幕 |
| subtitleFormat | string | 否 | srt | subtitlesText 格式:srt / vtt / plaintext / json |
| publishedAfter | string | 否 | "" | 仅频道:只保留 YYYY-MM-DD 当天及之后发布的视频 |
| channelSortBy | string | 否 | latest | 频道视频顺序:latest / popular / oldest |
| includeComments | boolean | 否 | false | 抓取顶层评论(含作者与互动信息) |
| maxComments | integer | 否 | 20 | 每个视频的最大顶层评论数 |
| maxConcurrency | integer | 否 | 8 | 并行富化的视频数(代理够猛可调高;出现空响应/404 增多就调低) |
| perVideoTimeoutSecs | integer | 否 | 30 | 单个视频富化超过该秒数则放弃(0=不限),记为 504 |
startURLs 与 searchKeywords 至少提供其一。两者都给时以 URL 为准、忽略关键词——因此默认值设计为:关键词带示例默认、URL 留空。
需要环境变量 PROXY_AUTH(username:password)与 PROXY_DOMAIN(host:port);
请求代理按 socks5://{PROXY_AUTH}@{PROXY_DOMAIN} 构造。
locale 一致性(反风控): 脚本发送一套自洽的 locale(accept-language + PREF 时区 + hl/gl),
由 GEO 环境变量选档(US/GB/DE/FR/JP/BR/IN,默认 US);ACCEPT_LANGUAGE 可单独覆盖语言。
混合多国轮换代理务必把出口固定到与 GEO 相同的国家(多数轮换代理支持在用户名加 country-XX)——
固定 locale 配随机国家 IP(时区/语言 ≠ IP 国家)是强 bot 信号。InnerTube API 请求(youtubei/v1/*)
使用真实的 fetch/XHR 头档(accept: */*、origin、x-youtube-client-*、JSON content-type),而非页面
导航头;请求身份(TLS+UA+client-hints)进程内保持一致。并发送 CONSENT cookie 跳过 EU 同意墙。
本脚本复用了仓库中已验证的 InnerTube 抓取 + 视频详情 / 评论解析模块。列表解析路径为新增,
并已用真实 YouTube 数据验证:搜索 → 视频、频道 → 视频、播放列表 → 视频 均能正确抽取。
YouTube 会周期性迁移 videoRenderer / lockupViewModel 结构,长时间未维护后请首次运行时复查。
分类型配额与过滤器: maxResults / maxResultsShorts / maxResultStreams 各自独立计数,
按每个搜索词、每个频道分别应用。搜索过滤器(排序 / 日期 / 时长 / 类型 / features)仅对搜索词生效——
它们被编码进搜索 sp protobuf——对直接 URL 不生效。
频道日期范围: publishedAfter 用混合策略按发布日期过滤频道视频——翻页时用相对时间提前停,
出结果时再用每个视频详情里的绝对 ISO 日期精确过滤。channelSortBy=latest 精确;popular / oldest
为 best-effort(走排序 chip),YouTube 不暴露时回退到 latest。
不支持: Apify 的 "Save subtitles to key-value store"——本平台无 key-value store,字幕仅作为
subtitlesText / transcript 字段返回。
运行模型: 作为单个 CoreClaw 任务运行(不按 URL 拆分子任务),对标 Apify——全部搜索词 + 全部直链在一次运行里各抓一遍,并发在脚本内部处理(input schema 不设 b)。
性能(提速): 多个输入(搜索词 / 频道 / URL)并行解析,视频走流水线富化——解析出第一批目标就
立刻开抓,与仍在进行的解析重叠。富化按 maxConcurrency 并发(默认 8)。每个视频会扇出多个子请求(watch 页、
字幕、评论),并发过高会把单个代理出口打满、触发空响应——这与轮换 IP 池多大无关(是「并发连接容量」轴)。
代理够猛再调高 maxConcurrency,出现空响应/404 增多就调低。 perVideoTimeoutSecs(默认 30s)只封顶可选增强项
(字幕/评论):超预算就把这两项留空,视频记录仍带完整详情照常输出——卡住的增强项绝不丢弃整条视频。
单个视频的字幕与评论并行跑,且都复用其详情已抓的 watch 页(不再重复抓页)。
字幕 / 转录: 可用性与语言(subtitles、subtitleLanguage)可稳定识别。
正文采用 yt-dlp 同款级联兜底:(1) 网页端 /api/timedtext(json3→xml);YouTube 越来越多对其加
PO / BotGuard 令牌、返回空体,拿不到时 (2) 依次换多个移动 / 嵌入式 / TV InnerTube 客户端重取 player 响应
(ANDROID_VR→TVHTML5→IOS→MWEB→WEB_EMBEDDED_PLAYER→ANDROID),这些客户端的字幕 baseUrl 通常不被 PO 卡
(各客户端被卡概率不同,多试几个才有机会撞到免门槛轨;第一个出正文即停)—— 这正是 yt-dlp 不靠浏览器也能拿字幕的办法,
多数门槛视频能这样补回正文;最后 (3) InnerTube get_transcript。
全程纯 InnerTube + curl_cffi,无浏览器、无 JS 运行时、无需 PO 令牌提供方。全部落空才返回空并优雅降级。
极少数对所有客户端都加门槛的视频仍需 PO 令牌提供方或浏览器引擎(如 Camoufox),本版本不覆盖。
客户端常量对齐 yt-dlp master,YouTube 轮换客户端版本时可能需要刷新。
探索商店中更多热门采集工具
by CoreClaw
通过输入 URL,批量提取公开的个人资料数据,包括频道名称、订阅数、视频数量、观看次数、简介、热门视频等,输出 CSV 或 JSON 格式。支持竞品分析、用户研究,零代码操作,一键导出结构化数据。
by CoreClaw
通过输入关键词,批量提取公开的 YouTube 频道数据,包括频道名称、订阅数、视频数量、观看次数、简介、热门视频等,输出 CSV 或 JSON 格式。支持竞品分析、用户研究,零代码操作,一键导出结构化数据。
by CoreClaw
通过输入视频 ID,批量提取公开的 YouTube 视频评论数据,包括评论内容、评论者信息、点赞数、回复数、作者是否点赞/回复等,输出 CSV 或 JSON 格式。支持舆情分析、用户洞察,零代码操作,一键导出结构化数据。
by CoreClaw
通过输入视频 ID,批量提取公开的 YouTube 视频数据,包括视频标题、描述、频道信息、播放量、点赞数、评论数、时长等,输出 CSV 或 JSON 格式。支持内容分析、数据统计,零代码操作,一键导出结构化数据。