用途
该技能用于从任意 YouTube 视频导出完整评论数据集,返回评论正文、作者及互动数据,供后续分析使用。当用户提出获取某 YouTube 视频全部评论、导出评论等需求时触发。
主要能力
- 抓取指定 YouTube 视频的评论,输出字段包括:id、authorDisplayName、textDisplay、likeCount、totalReplyCount、publishedAt、isReply、parentId。
- 支持通过 videoUrls 指定视频,并可设置 maxComments(最大评论数)与 includeReplies(是否包含回复)。
- 输出可保存为 CSV 或 JSON 文件,也可直接在对话中打印表格。
使用方式
前置条件:设置 APIFY_TOKEN 环境变量;可选安装 Apify MCP 服务器。
工作流程:
- 校验视频 URL。
- 运行 youtube-scraper(评论模式)。
- 轮询直至状态为 SUCCEEDED。
- 交付评论数据集。
推荐使用 run_actor.js 脚本(自动处理等待、输出与文件保存):
# 快速回答(在对话中打印表格)
node scripts/run_actor.js \
--actor "apidojo~youtube-comments-scraper" \
--input '{"param": "value"}'
# 保存为 CSV
node scripts/run_actor.js \
--actor "apidojo~youtube-comments-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.csv --format csv
# 保存为 JSON
node scripts/run_actor.js \
--actor "apidojo~youtube-comments-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.json --format json
APIFY_TOKEN 必须在环境变量或 .env 文件中设置。
若可用 Apify MCP:
工具:apify:run-actor Actor:"apidojo~youtube-comments-scraper" 输入:
{
"videoUrls": ["https://www.youtube.com/watch?v=<VIDEO_ID>"],
"maxComments": 200,
"includeReplies": false
}
REST API 备用方式:
curl -X POST \
"https://api.apify.com/v2/acts/apidojo~youtube-comments-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"videoUrls": ["<url>"], "maxComments": 200}'
保存返回的 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"
输入参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| startUrls | array | 可选 | [] | YouTube URL——频道、播放列表、Shorts、搜索结果 |
| youtubeHandles | array | 可选 | [] | YouTube 频道句柄(如 @kurzgesagt) |
| getTrending | boolean | 可选 | false | 获取热门视频 |
| keywords | array | 可选 | [] | 搜索关键词 |
| gl | string | 可选 | us | 结果国家代码(如 US、GB) |
| hl | string | 可选 | en | 语言代码(如 en、de) |
| uploadDate | string | 可选 | all | 上传日期过滤:any、hour、today、week、month、year |
| duration | string | 可选 | all | 时长过滤:any、short、long |
| features | string | 可选 | all | 特性过滤:4k、hd、live、cc、3d、hdr 等 |
| sort | string | 可选 | r | 搜索结果排序方式 |
| maxItems | number | 可选 | 无限制 | 返回的最大视频数 |
| customMapFunction | string | 可选 | — | 用于转换每个输出对象的 JavaScript 函数 |
输出格式
# YouTube Comment Dataset
Video: <url> | Comments collected: N | Includes replies: YES/NO
| Comment ID | Author | Text | Likes | Replies | Timestamp |
|------------|--------|------|-------|---------|-----------|
| ... | ... | ... | ... | ... | ... |
可用字段:id、authorDisplayName、textDisplay、likeCount、totalReplyCount、publishedAt、isReply、parentId。
边界情况与限制
- 评论已关闭:返回 0,需告知用户。
- 直播:直播/首映视频的评论数据可能不完整。
- 已删除评论:可能显示为空文本字符串,建议过滤掉 text 为 "" 的行。
- 文本截断:YouTube API 可能截断超长评论,获取完整文本需要额外抓取回复。
故障排查
- 评论已关闭:创作者已关闭评论,无法获取。
- 文本截断:YouTube API 可能截断超长评论,完整文本需通过回复抓取获取。