企业在做定价和竞争分析时,通常要靠人工每天打开几十个网页看有没有变化,既费时又容易漏。尤其 SaaS 定价页、商品接口这类页面,改一个数字就是一次商业信号,但人盯不过来,而且页面被反爬拦截时人工也看不出是"没变"还是"打不开"。所以要做一个能自动盯、能准确判断、拦截时明确告警的监控系统。
点击空白处退出提示
企业在做定价和竞争分析时,通常要靠人工每天打开几十个网页看有没有变化,既费时又容易漏。尤其 SaaS 定价页、商品接口这类页面,改一个数字就是一次商业信号,但人盯不过来,而且页面被反爬拦截时人工也看不出是"没变"还是"打不开"。所以要做一个能自动盯、能准确判断、拦截时明确告警的监控系统。
1. 目标管理:每个目标 = 一个 URL + 一组字段 + 一个检查间隔,支持 CSS 选择器、XPath、JSONPath、正则四种提取方式。
2. 三级抓取:L1 HTTP 直连、L2 浏览器渲染、L3 反爬对抗池,按目标难度自动升级。
3. 字段级差异:只比对用户指定的字段,输出"从什么变成什么",不做整页哈希,避免无关内容造成误报。
4. BLOCKED 一等状态:403、429、验证码、空响应、JS 墙都有独立状态和告警,绝不伪装成"无变化"。
5. 快照归档:每次抓取保留原始 HTML 哈希和结构化字段,可回滚对比。
6. 告警通道:邮件、Slack、通用 Webhook,支持测试发送。
7. 多租户:租户级数据隔离 + API Key 鉴权,跨租户访问返回 404。
我独立完成全部环节:需求设计、数据库建模、抓取引擎、差异算法、前端面板、部署运维。
技术栈:Python 3.12 + FastAPI + SQLAlchemy + SQLite(WAL) + APScheduler + Playwright + httpx。
难点与亮点:
一是"静默失败"——抓取被拦却当成没变化,产品就失去价值。所以把 BLOCKED 设计成一等状态,任何异常都有独立告警。
二是误报控制——整页哈希会因时间戳、随机 ID、广告位变化而误报,改成字段级结构化比对后误报基本消失。
三是资源控制——简单页面走 HTTP 直连,只有难啃的才启动浏览器,2 核 2G 机器就能稳定跑。



评论