竞品每天都在变:价格页微调、功能文案换版、限时活动上线。对普通人来说,靠手动刷新去追这些信息,既费时间,也容易遗漏。但如果你能花 30 分钟搭一套「定时 + AI 总结」的轻量情报站,这件事就可以从「每天刷一遍」变成「每天早上看一眼摘要」。
这套方案不需要付费监控工具,也不需要复杂架构:一个 Node 脚本、一条 cron 定时任务、一个 LLM 接口,再加一个最便宜的告警通道。站内已经用类似思路跑了很久,这篇文章把它简化成任何人都能复现的版本。
一、核心思路:让机器做「抓取」,让 AI 做「理解」
整个流程分成四步:
- 定时触发:用 cron 每天固定时间跑一次脚本;
- 抓取目标页:把竞品的公开页面(定价页、功能页、更新日志)拉下来;
- 提取关键文本:过滤掉导航、广告、footer 等噪声;
- 交给 LLM 生成摘要:对比前一次快照,用自然语言输出「今天变了什么」。
关键原则是人只负责看结论,不负责追过程。脚本稳定跑起来之后,你每天收到的是一条飞书/钉钉/微信消息,而不是一堆需要逐页打开的浏览器标签。这套思路和站内的AI 工作流入门一脉相承:都是把重复劳动交给机器,人只保留判断环节。
二、最小可运行版本
下面是一个最简化的 Node 脚本,可以监控任意公开页面。为了可读性,我省去了异常重试、指纹校验等生产细节,但骨架是完整的。
// monitor.js
const https = require('https');
const fs = require('fs');
const crypto = require('crypto');
const TARGETS = [
{ name: 'Example 定价页', url: 'https://example.com/pricing' },
{ name: 'Example 更新日志', url: 'https://example.com/changelog' }
];
const DB_FILE = './snapshots.json';
function fetch(url) {
return new Promise((resolve, reject) => {
https.get(url, { headers: { 'User-Agent': 'Mozilla/5.0' } }, (res) => {
const chunks = [];
res.on('data', d => chunks.push(d));
res.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
}).on('error', reject);
});
}
function digest(text) {
return crypto.createHash('sha256').update(text).digest('hex').slice(0, 16);
}
async function main() {
const db = fs.existsSync(DB_FILE) ? JSON.parse(fs.readFileSync(DB_FILE)) : {};
const report = [];
for (const t of TARGETS) {
try {
const html = await fetch(t.url);
// 生产环境这里会再跑一遍 HTML 清洗,提取正文、价格、标题等
const hash = digest(html);
if (db[t.url] !== hash) {
db[t.url] = hash;
report.push({ name: t.name, url: t.url, changed: true });
}
} catch (err) {
report.push({ name: t.name, url: t.url, error: err.message });
}
}
fs.writeFileSync(DB_FILE, JSON.stringify(db, null, 2));
console.log(JSON.stringify(report, null, 2));
}
main();
把这段脚本存成 monitor.js,测试一次:
node monitor.js
第一次运行会生成 snapshots.json,记录每个页面的内容指纹。之后每次运行,只要页面内容变了,就会输出一条变更记录。
三、用 cron 把它变成自动化任务
Linux/macOS 系统自带 cron,让脚本每天 8 点 30 分运行一次:
# 编辑 crontab
crontab -e
# 添加一行(路径换成你的真实路径)
30 8 * * * cd /home/yourname/monitor && /usr/bin/node monitor.js >> /var/log/monitor.log 2>&1
这样每天上午 8:30,脚本会自动跑一次,把结果追加到日志里。如果你想更频繁,比如每小时一次,把 30 8 改成 0 * 即可。
如果你用的是 Windows,可以用「任务计划程序」达到同样效果;如果是云服务器,建议把脚本和日志放在 /opt 或 /home 下,避免占用系统目录。
四、引入 AI:把原始 diff 变成可读摘要
上面的脚本只能告诉你「变了」,但不知道「变了什么」。下一步是把变化内容交给 LLM,让它生成一段人话摘要。
const { callLLMNoCharge } = require('./lib/ai-service');
async function summarizeDiff(oldText, newText) {
const prompt = `下面是一个网页的旧文本和新文本片段,请用中文总结主要变化,控制在 100 字以内,只讲对用户可能有影响的内容:
旧文本片段:
${oldText.slice(0, 2000)}
新文本片段:
${newText.slice(0, 2000)}`;
const { content } = await callLLMNoCharge({
tool: 'competitor-summary',
systemPrompt: '你是竞品情报分析师,只输出事实摘要,不做主观评价。',
userMessage: prompt,
jsonMode: false,
maxTokens: 600
});
return content;
}
生产环境里,我们会把前一次抓取的完整文本也存下来,和新版本做 diff,再交给 LLM。这样它不仅能说「价格变了」,还能说「高级版月费从 69 元涨到 139 元」。
如果你还没有自己的 LLM 接入层,可以直接调用百炼、OpenAI 或 Claude 的 API,把 prompt 里的文本控制在 4000 字以内即可。
五、告警通道:越便宜越好
情报只有送达才有价值。最低成本的方案是:
- 日志 + 邮件:把 summary 写入日志,再用
mailx或ssmtp发到自己的邮箱; - 飞书/钉钉 webhook:创建一个群机器人,把摘要 POST 到 webhook URL;
- 微信:用 Server 酱、PushPlus 等免费推送服务;
- Telegram Bot:如果你用 Telegram,免费 bot 推送也很稳定。
我推荐先用 webhook,因为设置最简单,5 分钟就能跑通。下面是一个飞书 webhook 的示例:
const http = require('http');
function sendFeishu(webhook, text) {
const body = JSON.stringify({ msg_type: 'text', content: { text } });
const req = http.request(webhook, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body) }
}, (res) => { /* 可选:检查 res.statusCode */ });
req.write(body);
req.end();
}
六、真实运行中要注意的三个坑
1. 页面动态渲染抓不到内容
很多现代网站是客户端渲染的,直接 https.get 只能拿到一个空壳。解决方案是用 Playwright 或 Puppeteer 先把页面跑起来再抓取。代价是依赖更重、启动更慢,建议只对必须渲染的目标使用。关于把自动化权限交给第三方工具之前应该问清哪些问题,可以读一下AI 操作电脑三问里的判断顺序。
2. 不要把「例行构建」误判为「重大变化」
有些网站每次构建都会换版本号、nonce、时间戳,导致 diff 永远不为空。解决办法是给变化分级:只关注 title、keywords、H1、价格字段和官方更新条目,其他字段的变化打为「例行构建滚动」不予告警。
3. 小心频率和版权
抓取公开页面通常没问题,但不要把频率调得太高(建议每天 1-2 次),也不要绕过反爬或抓取付费内容。你的目标是「监测公开信息」,不是「爬取数据库」。
七、从「盯竞品」到「管信息」
这套方法不限于竞品监控。你可以用同样的 cron + AI 组合做:
- 每日行业新闻摘要;
- 自己关注的关键词在搜索引擎中的排名变化;
- 开源项目的 Release 提醒;
- 航班、天气、价格等个人信息的定时追踪。
核心思路是一致的:把重复性的信息收集交给 cron,把理解成本交给 AI,人只负责做决策。
站内已有不少相关工具可以帮你完成这套流程中的不同环节:
- 做周报、纪要这类「整理型」输出,可以用 AI 职场效率工具集;
- 需要把网页、PDF 转成可处理文本,可以用 文档处理中心;
- 想把自己的自动化经验分享给其他人,可以去 经验分享墙。
自动化不是让你彻底放手,而是把你从「反复查看」中解放出来,把精力留给真正需要判断的地方。
常见问答
Q: 这套方案需要服务器吗?
不一定。最轻量的做法是在自己电脑或树莓派上跑 cron;如果你有长期开机的电脑或 NAS,直接放上面即可。只有当需要 24 小时不间断监控时,才需要租一台最便宜的云服务器。
Q: 如果我想监控的是 APP 或小程序里的价格,怎么办?
公开网页最容易抓;APP 和小程序通常需要抓包或逆向,复杂度会高很多。对普通用户来说,优先监控官网、公开定价页和官方更新日志,性价比最高。如果你确实需要监控 APP 内容,建议先从「有没有公开网页版」开始查。
Q: AI 摘要会不会编造变化?
会。LLM 可能把无关的文本差异渲染成「重大更新」。降低风险的办法是:① 把新旧文本一起喂给 AI,让它基于原文总结;② 要求 AI 只引用原文中的具体字段,不发散;③ 关键结论人工二次确认。这套方案的定位是「降低信息噪音」,不是替代人工判断。
💬 评论