如何在不使用官方 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 服务器,以及免费市场研究报告。

0 浏览
Back to Blog

相关文章

阅读更多 »