SuperAPI AI 工具集

scraping-youtube-channel-data

数据与分析

查看项目

更新于 10-15 11:51

技能介绍

用途

该技能用于抓取 YouTube 频道数据,核心是使用 apidojo 的 YouTube scraper(运行在 Apify 平台上)。当用户提出获取频道统计数据、导出频道视频目录等需求时触发。它针对任意一组 YouTube 频道 URL 或频道 handle,导出频道级统计数据以及可选的视频目录。

主要能力

支持导出以下输出字段:channelName、channelId、subscriberCount、viewCount、videoCount、country、joinedDate、description、channelUrl、recentVideos[]。

支持的输入参数包括:

  • startUrls(数组,可选,默认 []):YouTube URL,可为频道、播放列表、Shorts、搜索结果。
  • youtubeHandles(数组,可选,默认 []):YouTube 频道 handle,例如 @kurzgesagt。
  • getTrending(布尔值,可选,默认 false):是否获取热门视频。
  • keywords(数组,可选,默认 []):搜索关键词。
  • gl(字符串,可选,默认 us):结果的国家代码,例如 US、GB。
  • hl(字符串,可选,默认 en):语言代码,例如 en、de。
  • uploadDate(字符串,可选,默认 all):上传日期过滤,可选 any、hour、today、week、month、year。
  • duration(字符串,可选,默认 all):时长过滤,可选 any、short、long。
  • features(字符串,可选,默认 all):特性过滤,例如 4k、hd、live、cc、3d、hdr 等。
  • sort(字符串,可选,默认 r):搜索结果排序方式。
  • maxItems(数字,可选,默认无限):返回视频的最大数量。
  • customMapFunction(字符串,可选,默认无):用于转换每个输出对象的 JavaScript 函数。

使用方式

前置条件:设置 APIFY_TOKEN 环境变量;可选安装 Apify MCP server。

工作流程分为四个步骤:

  1. Step 1:标准化频道 URL。
  2. Step 2:运行 youtube-scraper。
  3. Step 3:轮询直到状态为 SUCCEEDED。
  4. Step 4:交付频道数据集。

Step 2 提供三种运行方式:

推荐使用 run_actor.js(自动处理等待、输出与文件保存):

# 快速回答(在聊天中打印表格)
node scripts/run_actor.js \
  --actor "apidojo~youtube-channel-scraper" \
  --input '{"param": "value"}'

# 保存为 CSV
node scripts/run_actor.js \
  --actor "apidojo~youtube-channel-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.csv --format csv

# 保存为 JSON
node scripts/run_actor.js \
  --actor "apidojo~youtube-channel-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.json --format json

APIFY_TOKEN 必须在环境或 .env 文件中设置。

若 Apify MCP 可用:

  • Tool:apify:run-actor
  • Actor:"apidojo~youtube-channel-scraper"
  • Input:
{
  "channelUrls": ["https://www.youtube.com/@channelhandle"],
  "maxVideos": 30
}

REST API 备用方式:

curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-channel-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channelUrls": ["https://www.youtube.com/@channelhandle"], "maxVideos": 30}'

保存 id 为 RUN_ID,轮询直到 status = SUCCEEDED:

curl "https://api.apify.com/v2/actor-runs/$RUN_ID?token=$APIFY_TOKEN" | grep '"status"'

获取结果:

curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN&format=json"

Step 3 处理边界情况:

  • 频道 URL 未找到:handle 可能已变更,请在 YouTube 上核实。
  • 隐藏订阅数:部分频道隐藏订阅数,该字段返回 null,需标记这些频道。
  • 年龄限制频道:可能返回有限的元数据。

输出格式示例:

# YouTube Channel Dataset
Channels requested: N | Returned: N

| Channel | Subscribers | Total Views | Videos | Joined | Country | Recent Avg Views |
|---------|-------------|-------------|--------|--------|---------|-----------------|
| ...     | ...         | ...         | ...    | ...    | ...     | ...             |

适用场景

适用于需要批量获取 YouTube 频道统计信息或导出频道视频目录的任务,例如收集多个频道的订阅数、总观看量、视频数、加入日期、国家、近期平均观看量等数据。

限制

  • 需要 APIFY_TOKEN 环境变量。
  • 隐藏订阅数的频道,订阅数字段返回 null。
  • 年龄限制频道可能只返回有限元数据。
  • 频道 URL 未找到时,可能因 handle 变更导致失败,需在 YouTube 上核实。
  • 大型视频目录:建议每次运行设置 maxVideos: 100 上限以避免超时。