摘要:反向海淘独立站的核心能力是让用户通过粘贴链接、输入关键词、上传图片等多种方式导入商品。本文基于Taocarts系统的实践,拆解多源商品采集模块的设计:采用策略模式+责任链模式,统一支持淘宝链接、1688链接、淘口令、关键词、图片五类输入源,涵盖链接解析、口令解密、以图搜图、关键词跳转等实战方案,并集成缓存、降级、限流等高可用机制。
一、问题背景
代购用户输入商品的方式五花八门:有的人习惯粘贴商品链接,有的人只会复制淘口令,有的人想用关键词搜索,还有人希望上传图片找同款。一套统一的采集入口需要兼容所有场景。
二、整体架构
采用策略模式为核心。每种输入源对应一个处理器(Parser),所有处理器实现统一的Parser接口。入口层接收用户输入后,通过类型识别器判断输入类型,路由到对应的处理器。责任链模式用于处理组合场景——例如用户同时粘贴了链接和关键词,系统按优先级依次尝试。
三、淘宝/1688链接解析实现
核心逻辑是正则匹配提取商品ID,再调用对应平台的API或模拟请求获取详情。
java
public class TaobaoLinkParser implements Parser {
@Override
public ProductDTO parse(String input) {
// 正则提取商品ID: https://item.taobao.com/item.htm?id=123456789
String pattern = "id=(\d+)";
Matcher matcher = Pattern.compile(pattern).matcher(input);
if (matcher.find()) {
String itemId = matcher.group(1);
return fetchFromTaobaoAPI(itemId);
}
return null;
}
}
1688链接的URL结构与淘宝类似,但起批量信息需要额外解析。Taocarts的实现中还支持识别商品规格选项、价格区间、主图集等关键字段。
四、淘口令解析
淘口令是加密字符串,需要使用淘宝开放平台的解析接口或本地解密库。Taocarts采用备用方案:先尝试调用官方API,失败则降级到本地解密算法。
五、以图搜图
基于阿里云视觉智能平台的以图搜图能力。用户上传图片后,系统调用图片相似度搜索API,返回匹配商品列表。
python
def search_by_image(image_url):
# 调用阿里云视觉智能平台以图搜图接口
resp = clients.search_image(image_url)
return [{"title": item["title"], "price": item["price"]} for item in resp.get("data", [])]
六、高可用保障机制
商品采集面临的外部依赖多(电商平台API、反爬限制),Taocarts设计了以下保障机制:
缓存策略:同一URL的采集结果缓存24小时
降级方案:API超时或返回异常时,使用本地规则库的备选解析逻辑
限流控制:限制同一IP/用户的采集频率,防止被平台封禁
异步队列:批量采集任务放入Celery/RabbitMQ队列异步处理,避免阻塞用户请求
python
Celery异步采集任务
@app.task(bind=True, max_retries=3)
def async_collect(self, input_type, content):
try:
result = collector.collect(content)
except Exception as e:
raise self.retry(exc=e, countdown=2 ** self.request.retries)
return result
七、性能优化
Taocarts的商品采集模块在双十一等大促期间,单日处理百万级链接。核心优化包括:Redis缓存热门商品信息减少重复采集;连接池复用HTTP连接;批量采集时合并同一电商平台的请求。
这套多源采集架构已在Taocarts跨境电商独立站中稳定运行,采集成功率长期保持在99%以上。