五分钟上手 changedetection.io:Docker 部署网页变更监控的完整指南
【免费下载链接】changedetection.ioBest and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring—all for free or enjoy our SaaS plan!项目地址: https://gitcode.com/GitHub_Trending/ch/changedetection.io
你盯的那把键盘连续三天降了 300 块,你是在第二天上班刷到别人的晒单帖时才知道的。这种"变化发生在你没看的时候"的信息差,靠人眼盯是盯不住的。changedetection.io 就是干这个的:你在浏览器里填一个 URL,它按固定周期重新抓取页面、对比文本和价格,一有变动就通过 Discord、Telegram、邮件或 Webhook 推到你手机上。自己用 Docker 部署一份,从启动容器到收到第一条变更通知,五分钟以内。
先判断这是不是你要找的那把工具
它解决的是"网页上的变化",且前提是这个变化只有网页这一个入口。三条判断依据,占两条以上就值得部署:
变化只以网页、JSON 或 PDF 的形式发布。竞品调价、政府文件更新、软件发版公告、招聘页新增岗位,这些内容没有数据库接口、没有 webhook,页面就是唯一数据源。如果你能直接读到数据库或订阅官方 API 推送,用别的工具更省事。
你需要"推",而不是"查"。changedetection.io 的价值闭环是"变化 → 自动通知"。如果你只是偶尔手动刷新看一眼,直接开浏览器标签页就够了,没必要自托管一套服务。
你能长期跑一个 Docker 容器。它需要一个 7x24 在线的 Linux 环境(树莓派、ARM 服务器均可),内存 2GB 就能从容跑几百个监控任务。没有服务器又不想买订阅方案的人,这条不满足。
反过来,它不适合:需要秒级实时性的高频盯盘(它的检查周期以分钟起步)、以及内容完全靠 JS 动态加载又拒绝给你接口的大数据平台(后文有 JS 方案,但目标站反爬过强时谁都救不了你)。
最短路径:一条命令把服务拉起来
环境要求一句话:装了 Docker 20.10+ 和 Docker Compose 2 的 Linux 机器。把下面的内容存为docker-compose.yml,changedetection-data数据卷承载全部监控任务与历史记录,是后续备份和迁移的核心:
services: changedetection: image: ghcr.io/dgtlmoon/changedetection.io:latest container_name: changedetection volumes: - changedetection-data:/datastore ports: - "5000:5000" environment: - TZ=Asia/Shanghai restart: unless-stopped volumes: changedetection-data:然后执行:
docker compose up -d首次会拉取镜像,等它下来后用下面的命令验证工作线程是否就绪:
curl -s http://localhost:5000/worker-health返回 JSON 里出现"status": "success"且health_check无异常,说明抓取线程池正常。经验上,curl通了但页面白屏时,九成是 5000 端口被占——docker logs changedetection最后几行会直接告诉你。仓库自带的 docker-compose.yml 里注释了全部可选环境变量,端口、日志级别、代理都有,用到再翻即可。
浏览器打开http://localhost:5000,看到顶部 "Add a new web page change detection watch" 输入框,第一关就过了。在输入框里填一个 URL,点Watch,任务立即入队并执行首次抓取。这一节跟着走下来的目标只有一个:拿到"第一次成功"的可验证信号——任务行上的状态从等待变成检查完成,History 里出现第一条记录。
主流程闭环:把一个降价提醒真正跑通
用"盯一个商品页的降价"这个例子走完整闭环,这是使用 changedetection.io 回报最直接的用法。
在输入框里填入商品页 URL 时,注意下方有两个单选模式:单商品 Re-stock & Price 模式(从 HTML 里自动抽取商品元数据),和通用的 Webpage Text/HTML、JSON and PDF 模式。盯价格选前者,盯普通页面选后者。选完点Watch。
接下来点任务右侧Edit > Watch进设置页。在Filters & Triggers标签页收噪音:用 "Remove text by selector" 删掉页脚、侧栏这类永远在动的区域,或写 "Trigger on text" 要求出现指定关键词才告警。过滤规则收得越窄,误报越少,这是使用这个工具最重要的经验——不设任何过滤的整页监控,基本等于每天被通知轰炸一次。
切到Notifications标签页填通知地址。它基于 Apprise 协议,一个 URI 就是一路渠道,常见写法:
discord://WEBHOOK_ID/TOKEN telegram://BOT_TOKEN/CHAT_ID mailto://user:pass@example.com?to=接收邮箱@example.com json://https://你的接口地址正文里可以用 Jinja2 变量插入变更内容和页面标题。实现细节见 apprise 通知插件源码。保存后不用刷新页面,等下一次例行抓取即可。
目标页面一变,通知就到。回到任务行看差异视图,词级高亮:绿色是新增、红色是删除,改了什么一眼定位。
进阶能力,各配一个开关时机
默认配置覆盖大部分静态页面,下面这些只在特定场景才值得动。
JS 渲染页面才上浏览器。普通 requests 抓取拿不到动态渲染的内容。这时在 compose 里解开注释的sockpuppetbrowser服务(套了 API 的无头 Chrome),并把主服务指向PLAYWRIGHT_DRIVER_URL=ws://browser-sockpuppet-chrome:3000。副作用是内存占用明显上升——纯静态站没必要开。Playwright 通道启用后,可视化选择器才可用,直接画框圈选要监控的元素,不用手写选择器。
任务上百再调并发。FETCH_WORKERS控制并行抓取线程,默认 10;MINIMUM_SECONDS_RECHECK_TIME是全局重查间隔下限,防止任务挤在同一秒打爆目标站。调这两个之前先看curl http://localhost:5000/queue-status确认队列真的在积压。
只在特定时段检查时配调度。设好TZ后,任务设置的 General 页可按星期几定义每天的开始时间和运行时长,例如工作日 9 点到 17 点轮询、周末停检。既省资源,也不把请求频率打到对方脸上。
价格模式可以设上下限和涨跌幅。Re-stock & Price 模式支持价格上限、下限、涨跌百分比触发,库存从"缺货"翻"有货"也算变化,仪表盘上所有商品的价格与库存状态一屏看全,还有历史价格曲线。
JSON API 和登录态场景。轮询型接口用 JSONPath 或jq只抽你关心的字段,字段变了才告警,而不是整个响应一有风吹草动就吵你;需要登录、点按钮、填表单才能看到的页面,用 Browser Steps 配置抓取前的浏览器操作序列。两者都不涉及时,别碰。
踩坑与退路
| 现象 | 原因 | 解法 |
|---|---|---|
| 容器起不来或反复退出 | 端口被占、镜像拉取失败 | docker logs changedetection看最后几行日志,九成是端口或代理问题 |
| 5000 端口打不开 | 本机已有服务占用(macOS 的 AirPlay 常占 5000) | ports 改为"5050:5000",访问地址同步改 |
| 页面内容抓不到 | 内容是 JS 动态渲染 | 按上一节启用 Playwright 通道,或改用 JSON 模式直接读接口 |
| 通知发不出去 | Apprise URI 拼错、渠道凭证失效 | 在 Notifications 页先点测试发送,再排查 URI |
| 升级后行为没变化 | 只删了容器没拉新镜像 | docker compose pull然后docker compose up -d,页面右上角的版本号即当前运行版本 |
数据全在/datastore卷里,丢了卷等于丢了全部任务和历史。三条退路要提前走通:
- 定期导出备份包:界面进入
/backups页面,点Create backup生成changedetection-backup-时间戳.zip(含全部 watch、tag 和历史),下载到容器外存档。实现见 backups 模块。 - 换机迁移:新机器挂上同一个卷直接起容器;或上传备份包在 Restore 页恢复。
- 升级:
docker compose pull && docker compose up -d一条命令,数据卷不受影响。
给你自己的十分钟
打开你购物车里那个等降价的商品页,把 URL 填进刚部署的实例,选 Re-stock & Price 模式,通知地址填你常用的 Discord 或 Telegram——十分钟后,这个监控比你的眼睛更早知道它降价。购物车每加一件,就多一个 watch。
【免费下载链接】changedetection.ioBest and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring—all for free or enjoy our SaaS plan!项目地址: https://gitcode.com/GitHub_Trending/ch/changedetection.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考