多源商品采集的设计演进:从单一解析器到职责链模式
技术领域:采集系统|反爬策略
代购系统的第一个挑战是商品采集。用户输入五花八门:有人粘贴淘宝链接,有人复制1688链接,有人甩过来一串淘口令,有人只会说“我要买个红色的汉服”。如果采集模块无法识别这些输入,用户就会流失。
最初的设计是“单一解析器”——一个函数处理所有输入。但随着输入类型增多,代码越来越臃肿,Bug越来越多。重构后采用“策略模式+责任链模式”:每种输入类型对应一个独立的解析器,所有解析器形成一条链路,逐个尝试,只要有一个解析成功就返回结果。
淘宝和1688的页面结构会不定期改版,单一解析器容易失效。备用方案是多解析器轮询——主解析器依赖官方API,备用解析器使用HTML解析,最后的降级方案是规则库匹配。采集请求通过代理IP池轮换发出,配合随机间隔控制请求频率,降低被封概率。
采集模块的设计不是追求100%成功率——这在技术上几乎不可能实现——而是追求“可观测、可降级、可恢复”。失败率异常时能告警,主解析器失效时能自动切换到备用方案。稳定性的核心不是不出错,而是出错后能快速恢复。