mcpField
S
scraping-youtube-videos-by-keyword

scraping-youtube-videos-by-keyword

github.com/apidojo-io数据与数据库1844 次安装24 周前更新
代码仓库

关于 scraping-youtube-videos-by-keyword

用于按关键词、频道或 URL 收集 YouTube 视频元数据的技能,也可获取热门视频。适合需要视频、频道及互动指标的数据研究与分析流程。

主要功能

  1. 01按关键词、频道或 URL 搜索
  2. 02获取热门视频
  3. 03按日期、时长和特征筛选
  4. 04收集视频与频道指标
  5. 05用自定义函数转换输出

适用场景

  1. 01为搜索主题建立视频数据集
  2. 02比较视频互动情况
  3. 03收集指定频道的视频

MCP 相关

如已安装 Apify MCP 服务,可通过它运行 Apify Actor。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword

安装后在 Claude Code 中输入/scraping-youtube-videos-by-keyword确认已加载。

详细介绍

按关键词抓取 YouTube 视频

适用于任意搜索查询的原始 YouTube 视频数据集。返回视频级元数据,包括互动指标和频道信息。

前提条件

  • 已设置 APIFY_TOKEN 环境变量
  • 可选:已安装 Apify MCP 服务

输入

参数类型必填默认值说明
startUrls数组可选[]YouTube URL — 频道、播放列表、Shorts、搜索结果
youtubeHandles数组可选[]YouTube 频道账号(例如 @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 函数

工作流

Progress:
- [ ] Step 1: Build search query
- [ ] Step 2: Run youtube-scraper
- [ ] Step 3: Poll for SUCCEEDED
- [ ] Step 4: Deliver video dataset
步骤 2:运行 Actor

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

# Quick answer (prints table to chat)
node scripts/run_actor.js \
  --actor "apidojo~youtube-scraper" \
  --input '{"param": "value"}'

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

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

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

如果 Apify MCP 可用:

Tool: apify:run-actor
Actor: "apidojo~youtube-scraper"
Input:
{
  "searchKeywords": "<query>",
  "maxResults": 50,
  "sortBy": "relevance"
}

REST API 备用方案:

curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchKeywords": "<query>", "maxResults": 50}'

将 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"
步骤 3:处理边缘情况
  • 结果少于 20 条:查询条件可能过窄;请扩大搜索词范围。
  • 结果中包含年龄限制内容:这些内容的元数据可能有限 — 对缺少 viewCount 的行进行标记。
  • 视频 ID 重复:按 videoId 去重。

输出格式

# YouTube Video Dataset: "<query>"
Videos collected: N | Sort: <sortBy>

| Video ID | Title | Channel | Views | Likes | Comments | Duration | Published |
|----------|-------|---------|-------|-------|----------|----------|-----------|
| ...      | ...   | ...     | ...   | ...   | ...      | ...      | ...       |

Available fields: videoId, title, channelName, channelId, viewCount, likeCount,
commentCount, duration, publishedAt, videoUrl, thumbnailUrl, description

故障排除

结果少于请求数量: YouTube 搜索对小众查询可能返回的结果有限。 缺少点赞数: YouTube 会隐藏点踩数,但仍提供点赞数;部分视频会隐藏所有计数。

评论

支持 Markdown