2026-09-09 · 原文发布日
挖竞品测评视频评论区,自动归类六大购买异议
每周一自动运行:用Bright Data抓取指定竞品YouTube测评视频的热门或最新评论(不需要YouTube API配额),代码规则把每条评论归入价格、性能、复杂度、缺功能、迁移、信任六类异议,并提取评论者提到的替代产品名,按声量和点赞排序后选代表性原话,再由OpenAI为每类写一句洞察和整体总结,结果逐类写入Google Sheets并把摘要推到Slack。
原文要点
这是n8n.io上的免费工作流模板(编号19404,Daniel Shashko发布)。流程每周一早晨定时或手动启动,从设置节点读取YouTube视频URL列表,调用Bright Data数据集接口抓取评论(不用YouTube API配额),轮询抓取完成后下载快照;代码节点把评论按关键词规则归入价格、性能、复杂度、缺功能、迁移、信任六类异议并提取观众提到的替代产品名,按评论数和点赞数排序选出代表原话,OpenAI为每类写一句洞察加整体总结,逐类追加到Google Sheets,摘要推送到Slack频道。
这次做成什么
在n8n里搭一条每周自动运行的竞品评论异议分析线:抓竞品测评视频评论→规则分类→AI写洞察→落表并推Slack。因模板无工作流文件下载,本站给出独立设计的等价练习方案,界面节点名以n8n实际版本为准。
准备什么
- n8n实例(云端或自托管,可新建空白工作流)
- Bright Data账号及API Token(HTTP Header Auth凭据)
- OpenAI API Key(用于生成洞察文字)
- Slack工作区及可发消息的Bot凭据与目标频道
- 一个已建好的Google Sheet,含run_date/theme/comments/likes/share_pct/top_quote六列
- 3至5个竞品YouTube测评视频链接(练习可用公开视频)
具体怎么做
配置Settings节点与四个凭据
新建工作流,第一个节点放Edit Fields(Set),命名为Settings,写入字段:video_urls(逗号分隔的视频URL)、comments_per_video(如100)、sort_by(top或newest)、min_comment_chars(如20)、sheet_url。在Credentials里分别创建Bright Data的Header Auth(名称Authorization,值Bearer 你的Token)、OpenAI、Slack、Google Sheets OAuth2四条凭据,并在对应节点选中。
加触发器并触发Bright Data抓取
在Settings前加Schedule Trigger,设为每周一上午执行(练习阶段用Manual Trigger手动跑)。Settings后接HTTP Request节点:POST到Bright Data的数据集采集接口,body传入视频URL列表、每视频评论数和排序方式;请求头自动带Bearer凭据。响应里记下snapshot id。
轮询并下载评论快照
再加一个HTTP Request轮询抓取状态,接IF节点判断状态是否为ready,未ready则Wait节点等待后回环重试;ready后用HTTP Request下载快照JSON。接Code节点做过滤:去掉长度小于min_comment_chars的评论,按评论ID去重,并把返回错误或无评论的视频记入crawl_gaps数组随结果下传。
运行六类异议分类代码
接一个Code节点粘贴下方分类代码:对每条评论做小写关键词匹配,命中则归入对应主题(一条评论可属多类),并用正则提取"switched to X / 换成了X"等句式里的替代产品名;随后按主题统计评论数、点赞总和、占比share_pct,各取点赞最高的一条作为top_quote,输出每主题一行的数组。
OpenAI写洞察并落表推Slack
把六类统计结果传给OpenAI Chat节点,用下方提示词让模型为每类写一句洞察和一段整体总结。之后Google Sheets节点选Append操作,把run_date、theme、comments、likes、share_pct、top_quote逐行写入你的表;最后Slack节点向目标频道(如#product)发一条消息,包含整体总结、各主题声量、top quote、被点名的替代产品和crawl_gaps提示。
端到端跑一次并核对
用下方合成评论CSV在Code节点里先行演练分类逻辑,确认六类都有输出后,再真实触发一次完整流程:检查Sheet是否新增六行、Slack摘要是否包含代表原话与抓取缺口说明,确认无误后把Schedule Trigger激活。
可直接复制的材料
六类异议分类与统计代码(Code节点用)
本站独立编写的等价实现,非原作者代码;关键词表可按你的行业增补。
// 输入:items 每项含 {id, text, likes, videoId}
const RULES = {
price: ['expensive','too much','price','pricing','cost','贵','太贵','价格','订阅费'],
performance: ['slow','lag','crash','bug','慢','卡','崩溃','闪退','加载'],
complexity: ['confusing','hard to use','learning curve','complicated','复杂','难用','上手','看不懂'],
missing_features: ['missing','wish it had','no support for','doesn't have','缺少','没有这个功能','希望支持'],
switching: ['switched to','moved to','migrated','换到','换成了','迁移到','改用'],
trust: ['scam','privacy','security','trust','data leak','隐私','不安全','泄露','不放心']
};
const ALT_RE = /(?:switched to|moved to|换到|换成了|改用)\s*([A-Za-z0-9\u4e00-\u9fa5 ._-]{2,30})/i;
const stats = {};
for (const key of Object.keys(RULES)) stats[key] = {theme:key, comments:0, likes:0, top:{text:'',likes:-1}, alternatives:new Set()};
for (const item of $input.all()) {
const t = (item.json.text||'');
const low = t.toLowerCase();
const m = t.match(ALT_RE);
for (const [key, words] of Object.entries(RULES)) {
if (words.some(w => low.includes(w.toLowerCase()))) {
const s = stats[key];
s.comments += 1;
s.likes += (item.json.likes||0);
if ((item.json.likes||0) > s.top.likes) s.top = {text:t, likes:item.json.likes||0};
if (m) s.alternatives.add(m[1].trim());
}
}
}
const total = Object.values(stats).reduce((a,s)=>a+s.comments,0) || 1;
return Object.values(stats).map(s => ({json:{
run_date: new Date().toISOString().slice(0,10),
theme: s.theme,
comments: s.comments,
likes: s.likes,
share_pct: Math.round(s.comments/total*1000)/10,
top_quote: s.top.text,
alternatives: [...s.alternatives].join(', ')
}}));OpenAI洞察提示词
{{ $json }}处接入上一步Code节点输出;可按需改为英文输出。
你是产品竞争情报分析师。下面是某竞品测评视频评论区按六类异议(价格price、性能performance、复杂度complexity、缺功能missing_features、迁移switching、信任trust)统计出的数据,每类含评论数comments、点赞总数likes、占比share_pct、代表性原话top_quote和被观众提到的替代产品alternatives。请用中文输出:1)为每个有评论的类别写一句不超过40字的洞察,必须引用该类数据;2)写一段不超过120字的整体总结,指出声量最高的两类异议和对我们的产品启示;3)如alternatives非空,单独列一行"被提及的替代产品"。只输出这三部分,不要寒暄。
数据:
{{ $json }}合成测试评论数据
本站虚构练习数据,可在Code节点演练分类;真实运行时由Bright Data快照替代。
id,text,likes,videoId
c1,"太贵了,一年订阅费比我预算高一倍",42,vidA
c2,"app经常崩溃,导出大文件就闪退",35,vidA
c3,"界面太复杂,新手完全看不懂",18,vidA
c4,"缺少API接口,希望支持自动化",27,vidB
c5,"我已经换成了NovaCRM,迁移很顺利",51,vidB
c6,"担心隐私问题,不知道数据存哪",12,vidB
c7,"加载特别慢,等半分钟才出报表",22,vidB
c8,"价格还行就是功能少,没有批量导入",9,vidA输入与输出示例
本站虚构演示,未真实运行,数字由合成数据按代码逻辑推得。
输入
video_urls为两条虚构竞品视频vidA/vidB,comments_per_video=100、min_comment_chars=10;用上方8条合成评论代替真实抓取结果喂入分类代码。对应输出
分类统计关键行示例:{theme:'switching',comments:1,likes:51,share_pct:12.5,top_quote:'我已经换成了NovaCRM,迁移很顺利',alternatives:'NovaCRM'};performance类comments=2、likes=57、share_pct=25.0;price类comments=2、likes=51、share_pct=25.0;missing_features类comments=1、likes=27、share_pct=12.5。OpenAI节点据此输出如"整体总结:价格与性能两类异议声量最高(各占25%),观众对订阅费用和运行稳定性不满,已有人迁移到NovaCRM,建议评估定价并优先强化导出稳定性。",Sheet新增六行,Slack收到含top quote和NovaCRM点名的摘要。做完检查这些
- Schedule Trigger设为每周一执行,且Manual Trigger可单独手动触发整流
- Code节点输出恰好覆盖六个主题键,share_pct合计约100%,top_quote取该类点赞最高评论
- Google Sheets每次运行新增六行且列顺序为run_date/theme/comments/likes/share_pct/top_quote
- Slack消息中同时出现整体总结、至少一条代表原话和crawl_gaps说明
- 长度小于min_comment_chars的评论被过滤,重复评论ID只计一次
容易卡住的地方
- Bright Data数据集需先在其后台建好对应YouTube评论采集数据集,否则HTTP请求返回404或空快照
- 轮询没有上限会死循环,建议给IF回环加最大重试次数(如20次)
- 关键词分类是规则匹配,讽刺或双语评论可能误归多类,share_pct按命中计可超过按评论数占比
- OpenAI与Bright Data均按用量计费,comments_per_video调大前先小规模试跑
- 一条评论命中多类是模板设计如此,不要改成单分类
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Mine YouTube buyer objections with Bright Data, OpenAI, Google Sheets and Slack
- 原作者
- Daniel Shashko
- 原始发布日期
- 2026-09-08T16:23:57.636Z
- 来源
- https://n8n.io/workflows/19404