如何在不使用官方 API 的情况下抓取 YouTube 数据(无配额限制)
发布: (2026年3月19日 GMT+8 18:19)
3 分钟阅读
原文: Dev.to
Source: Dev.to
介绍
YouTube Data API 施加了严格的配额限制(每天 10 000 单位,单次搜索消耗 100 单位),这使得你每天大约只能进行 100 次搜索或获取 10 000 条评论。通过使用 YouTube 的内部 Innertube API 并直接解析页面,你可以在不受这些限制的情况下获取相同的数据。
使用 Innertube API 访问视频数据
获取视频页面
// Fetch the video page HTML
const html = await fetch(`https://www.youtube.com/watch?v=${videoId}`)
.then(r => r.text());
提取初始数据
// Parse the ytInitialData JSON object from the page source
const ytData = JSON.parse(
html.match(/ytInitialData\s*=\s*({.*?});/)[1]
);
定位评论区
// Navigate to the comments section within the parsed data
const contents = ytData.contents.twoColumnWatchNextResults
.results.results.contents;
const commentSection = contents.find(
c => c.itemSectionRenderer?.targetId === "comments-section"
);
爬虫会自动处理分页,提取所有评论以及以下信息:
- 作者名称和频道
- 评论正文
- 点赞数
- 回复数
- 发布日期
- 作者的认证状态
获取完整的频道数据
使用相同的方法,你可以获取:
- 订阅者数量
- 视频总数
- 频道描述和外部链接
- 带观看次数的近期视频列表
- 频道创建日期
在 YouTube 上搜索并获取结构化结果
执行搜索时,爬虫会为每个结果返回结构化信息:
- 视频标题、URL 和缩略图
- 观看次数和发布日期
- 频道名称
- 时长
- 描述摘要
提取视频字幕和字幕文件
// Get caption tracks from the player response
const captionMatch = html.match(/"captionTracks":\[(.+?)\]/);
const tracks = JSON.parse(`[${captionMatch[1]}]`);
// Fetch the transcript XML for a specific track
const transcript = await fetch(tracks[0].baseUrl)
.then(r => r.text());
特性
- 支持多语言
- 包含时间戳
- 支持自动生成的字幕
- 兼容 YouTube Shorts
实际应用
- 内容研究 – 分析哪些主题能产生最多观看量。
- 情感分析 – 大规模处理评论以评估观众反应。
- 竞争对手监控 – 跟踪竞争频道的增长指标。
- AI 训练数据 – 从视频字幕构建数据集。
- 营销分析 – 衡量各频道的互动情况。
工具
所有四款工具均可在 Apify Store 上获取,源码和文档托管于 GitHub。其他资源还包括 60+ 网络爬虫工具、15 台用于 AI 代理的 MCP 服务器,以及免费市场研究报告。