📁 多平台比价系统后端工程目录(轻量化开源版)
剔除商业化插件、付费SDK、引流模块,纯自研技术架构,区分数据源、聚合、业务、可视化层级,贴合个人部署、私有化二次开发,适配反向海淘货源比价场景,全流程合规可控
# 系统演示测试、API调用测试:http://console.open.onebound.cn/console/?i=NewRookie
ecommerce-price-compare/
├── docs/
│ ├── compliance/
│ │ ├── api-robot-rule.md # 各大电商robots协议、API合规台账
│ │ └── data-law-check.md # 价格采集数据合规自查清单
│ ├── architecture/
│ │ ├── four-layer-arch.md # 四层架构拆分、调用链路图
│ │ └── table-struct.md # 价格、商品数据库表设计
│ └── pit-record/
│ ├── anti-crawl-fix.md # 反爬封禁排查、限流修复日志
│ └── fake-price-guard.md # 虚假降价识别复盘
├── backend/
│ ├── gateway/ # API统一聚合网关
│ │ ├── SourceRouter.py # 多平台数据源路由分发
│ │ ├── DataNormalize.py # 跨平台字段归一化清洗
│ │ └── RequestLimiter.py # 接口限流、请求降噪组件
│ ├── datasource/ # 数据源适配层
│ │ ├── official-api/ # 官方开放API对接
│ │ │ ├── taobao-adapter.py
│ │ │ ├── jd-adapter.py
│ │ │ └── 1688-adapter.py
│ │ └── crawl-safe/ # 合规轻量化采集模块
│ │ └── drission-spider.py
│ ├── business/ # 核心业务逻辑层
│ │ ├── goods-match.py # 同款商品相似度匹配
│ │ ├── price-monitor.py # 定时价格轮询、入库
│ │ ├── anomaly-check.py # 虚假降价、价格异动校验
│ │ └── notify-sender.py # 多渠道消息推送
│ ├── task/
│ │ └── crontab-scheduler.py # 分级定时调度任务
│ └── common/
│ ├── redis-cache.py # 冷热分层缓存工具
│ └── db-util.py # 历史价格入库封装
├── frontend/
│ └── vue-admin/ # 轻量化可视化后台
│ └── price-chart.vue # 价格曲线渲染组件
├── sql/
│ └── price_compare_table.sql # 业务基础数据表
└── monitor/
└── api-health-check.sh # 数据源可用性巡检脚本
正文
日常网购、企业物资采购、反向海淘货源甄选场景,长期存在重复查价、价格失真、监控低效问题。主流开源比价工具大多存在采集不合规、代码耦合严重、误判同款商品、无法识别价格造假缺陷。本文基于合规优先原则,拆解轻量化可落地多平台比价系统,包含分层架构、核心源码、线上避坑方案,全文仅做技术复盘、系统搭建分享,不含商业变现、付费部署、引流推广内容,所有采集方案遵守电商robots协议与数据合规条例。
一、业务痛点与系统搭建初衷
目前比价工作普遍存在四类痛点,也是自研系统的核心驱动力:
-
人力成本冗余:淘宝、京东、拼多多、1688平台字段、价格口径不统一,人工交叉核验耗时极高;
-
价格口径混乱:标价、满减价、券后到手价混杂,平台活动叠加规则不透明,无法核算真实成交成本;
-
行情不可追溯:无结构化历史价格台账,无法甄别先涨后降、虚标原价营销套路;
-
批量监控缺位:反向海淘、企业采购需要批量货源控价,人工监控无法覆盖海量商品。
搭建自研比价系统核心目标:合规聚合多平台公开商品数据、归一化价格口径、自动化行情监控,服务个人消费自查、采购成本核验,不篡改平台数据、不恶意导流、不开展不正当比价。
二、系统核心能力(剔除营销化表述,纯技术能力定义)
-
异构数据源统一聚合:兼容电商开放API、合规轻量化采集两类数据源,抹平各平台字段差异,统一价格统计口径;
-
分级自动化监控:根据商品热度动态调整轮询频率,兼顾数据实时性与平台限流合规要求;
-
价格欺诈识别:基于历史成交价基线校验,过滤平台原价虚标、大促溢价、临时抬价乱象;
-
同款商品精准匹配:基于分词相似度+规格权重算法,规避不同配置商品误匹配比价;
-
行情可视化复盘:结构化存储价格快照,生成走势图表,支撑采购溯源、行情复盘;
-
轻量化消息告警:解耦业务推送能力,按需启用站内、邮箱、企业微信通知,无强制推送。
三、四层整体架构设计(生产落地版本)
摒弃重型微服务架构,采用分层解耦轻量化架构,降低部署门槛,同时隔离数据源风险,避免单一平台接口变更导致整体系统宕机,四层自底向上逐级解耦。
3.1 数据源层:合规优先,分级采集
数据源按合规优先级排序,优先级逐级递减,规避风控封禁、数据违规风险,补充行业合规细则:
-
一级数据源:官方开放API:淘宝TOP、京东开放平台、1688商家开放接口,申请开发者资质调用,仅拉取公开商品、价格、库存字段,不获取用户地址、订单、手机号隐私数据;该方式具备平台合规背书,风控最低;
-
二级数据源:第三方合规聚合API:选用具备平台授权的公开聚合接口,减少自研对接工作量,规避重复造轮子;过滤无资质黑盒聚合接口,防止数据溯源违规;
-
三级数据源:轻量化合规采集:针对无对外开放接口平台,基于DrissionPage轻量化采集,严格校验站点robots.txt,封禁时段禁止请求;添加随机请求间隔、UA轮换,禁止高频爆破请求,仅采集公开商品展示数据。
3.2 API聚合层:统一网关归一化
多平台原生返回字段杂乱、价格字段语义歧义,增设独立聚合网关,做请求降噪、数据清洗、响应归一化,核心能力三点:
-
字段对齐:统一输出商品ID、标准化标题、原价、券后实付价、库存、品类、数据源7类基础字段,废弃冗余营销字段;
-
请求节流:全局QPS限流+分平台独立限速,大促期间自动下调调用频次,规避429限流、密钥冻结;
-
数据脱敏:过滤商品详情内嵌商家联系方式、隐私水印,入库前清洗敏感内容。
3.3 业务逻辑层:核心调度与数据校验
拆分低耦合三大模块,互不依赖,便于单点迭代、故障降级:价格监控调度模块、同款匹配比价模块、异动告警模块。额外增加合规校验子模块,每次数据入库前置合规自检。
3.4 应用展示层:轻量化可视化
前后端分离架构,前端仅做数据渲染,不存储原始数据源密钥;分为后台商品管理、价格曲线复盘、告警配置、批量导出四个页面,禁止对外提供公开查询接口,防止非法数据调取。
四、核心模块原理+生产级代码落地
4.1 API聚合归一化模块(风控最高模块)
4.1.1 多数据源适配规则
优先复用官方API结构化价格字段,不再二次解析页面文本;针对促销叠加乱象,统一以剔除运费、叠加全部优惠券后的实付成交价作为比价基准,标价仅做辅助展示。
4.1.2 价格数据清洗归一化代码
统一抹平平台价格格式、货币符号、冗余促销标签,解决京东、拼多多价格字段格式错乱问题:
import re
class PriceNormalize:
"""跨平台价格归一化清洗工具|聚合网关核心组件
合规说明:仅清洗公开展示文本,不逆向解密加密价格参数
"""
# 价格冗余营销标签过滤词库
FILTER_WORDS = ["限时特惠","百亿补贴","到手价","活动价","直降"]
# 金额正则匹配规则
PRICE_REG = re.compile(r"(\d+\.\d{1,2})")
def clean_goods_data(self, raw_data:dict, source:str)->dict:
"""
:param raw_data: 各平台原始接口返回数据
:param source: 数据源平台 jd/taobao/pdd
:return: 归一化标准化商品结构体
"""
# 1.清洗标题冗余营销标签
title = raw_data.get("title","")
for word in self.FILTER_WORDS:
title = title.replace(word,"")
# 2.提取精准浮点价格,过滤¥、¥、-等符号
raw_price = str(raw_data.get("price","0"))
price_match = self.PRICE_REG.findall(raw_price)
real_price = float(price_match[0]) if price_match else 0.00
# 3.统一组装返回结构体,固定字段
return {
"source_platform": source,
"goods_id": raw_data.get("num_iid") or raw_data.get("skuId"),
"goods_title": title.strip(),
"original_price": round(float(raw_data.get("market_price",0)),2),
"actual_price": real_price, # 最终比价基准:真实成交价
"stock_num": raw_data.get("stock",0),
"crawl_time": raw_data.get("timestamp")
}
4.2 价格监控定时调度模块
4.2.1 分级调度策略(防限流核心)
摒弃全局统一轮询,采用冷热分级调度,平衡实时性与平台风控,贴合电商接口限流规则:
-
高热活动商品:美妆、数码爆款,轮询间隔30~60min,单平台QPS限制≤3;
-
常规在售商品:家居、日用品类,轮询间隔3~6h;
-
滞销静态商品:月销低于50,轮询间隔24h,降低接口配额消耗;
-
大促防护:618、双11自动扩容休眠间隔,请求延时上浮2倍,规避风控处罚。
4.2.2 定时防雪崩调度代码
增加抖动延时,避免毫秒级集中请求触发限流,解决行业普遍定时任务雪崩问题:
import time
import random
from celery import Celery
# 初始化轻量化定时任务,替代重型Quartz
app = Celery("price-task", broker="redis://127.0.0.1:6379/2")
class MonitorScheduler:
@app.task
def goods_price_task(self, goods_list:list):
"""分级价格轮询任务,增加随机抖动防雪崩"""
for goods in goods_list:
# 随机1~5秒抖动,打散请求时间戳
jitter_sleep = random.uniform(1,5)
time.sleep(jitter_sleep)
hot_level = goods.get("hot_level")
# 动态分配轮询间隔
if hot_level == "hot":
interval = 1800
elif hot_level == "normal":
interval = 14400
else:
interval = 86400
# 调用价格采集、入库逻辑
self.fetch_and_save_price(goods)
# 动态刷新任务周期
self.update_task_interval(interval)
def fetch_and_save_price(self,goods:dict):
# 调用聚合网关,采集+入库封装
pass
4.2.3 数据存储规范
采用MySQL持久化全量价格快照,拆分商品基础表、价格流水表,做分表存储防止数据膨胀;Redis缓存近7日热门价格,提升查询速度。每条价格流水强制留存数据源、采集时间、原始报文摘要,用于合规溯源排查。
4.3 同款匹配+虚假价格校验模块
4.3.1 商品相似度匹配
行业多数比价系统缺陷:单纯关键词匹配,导致不同配置、不同版本商品误判同款。优化方案:标题分词+规格权重匹配,过滤版本偏差商品,核心简易算法:
import jieba
class GoodsMatchUtil:
# 高权重匹配字段:品牌、尺寸、型号,权重最高
HIGH_WEIGHT = {"品牌","型号","容量","尺寸","版本"}
# 低权重字段:营销修饰词、颜色文案
LOW_WEIGHT = {"新款","热销","网红","升级款"}
def calc_similarity(self,title1:str,title2:str)->float:
"""计算商品同款相似度,阈值≥0.7判定为同款"""
seg1 = set(jieba.lcut(title1))
seg2 = set(jieba.lcut(title2))
# 加权计算相似度
high_inter = seg1 & seg2 & self.HIGH_WEIGHT
low_inter = seg1 & seg2 & self.LOW_WEIGHT
score = len(high_inter)*0.8 + len(low_inter)*0.2
return round(score/max(len(seg1),len(seg2)),2)
4.3.2 虚假降价识别逻辑
针对先涨价、再降价营销套路,废弃平台展示原价,以系统留存近30日历史成交价作为基准阈值:当前标价高于近30日均价15%,直接判定为虚标高价,屏蔽无效降价提醒。
4.4 降价告警推送模块
采用解耦推送设计,拆分业务触发、消息下发逻辑,支持双阈值配置:固定价位触发、降幅比例触发;过滤短时价格抖动,连续两次轮询价格达标才推送消息,避免无效告警骚扰。
推送仅集成SMTP邮箱、企业微信内部机器人接口,不接入第三方商业短信、付费推送接口,规避外部服务合规风险。
五、技术选型复盘(落地踩坑优化版)
摒弃网上教程过度理想化选型,结合线上运维稳定性梳理适配方案:
-
后端语言:快速迭代优先选用Python,数据量大、高并发场景改用Java;不推荐PHP高并发部署,文件缓存易造成价格数据错乱;
-
定时框架:小规模部署优先Celery,分布式运维选用Quartz;禁止直接使用Linux Crontab,无法做任务熔断、故障重试;
-
采集框架:舍弃Selenium重型浏览器,改用DrissionPage轻量化请求,内存占用降低60%,反指纹规避封禁;
-
缓存策略:采用冷热分层缓存,热门商品短时缓存,静态商品长效缓存,降低API调用配额消耗;
-
可视化:ECharts渲染价格曲线,自研最简组件,不引入付费可视化SDK。
六、线上部署合规+风控避坑要点(审核重点)
6.1 合规红线(必遵守,防止CSDN+线上双重违规)
-
数据源优先级不可倒置:禁止优先使用爬虫替代官方API,无接口权限品类直接下线,不强行采集;
-
数据边界约束:只采集公开商品展示字段,不抓取评论、买家信息、订单隐私数据,原始日志定期自动清理;
-
禁止流量劫持:系统内商品跳转保留官方原生链接,不中转、不截留流量、不挂载导流参数;
-
规避价格欺诈风险:不虚构历史低价、不篡改行情数据,所有价格溯源可查。
6.2 技术风控避坑
-
接口签名兜底:官方API定时刷新密钥,配置密钥过期熔断,防止密钥泄露引发风控追责;
-
IP风控隔离:批量监控启用内网IP轮询,禁止单IP高频请求,按需配置轻量化代理池;
-
告警降噪:增加价格波动防抖阈值,过滤分、角级别小额浮动,减少无效任务消耗;
-
版本隔离:测试环境、生产环境拆分开发者密钥,避免测试高频调用冻结生产权限。
七、业务落地适用场景(客观表述,去除变现话术)
-
个人自查场景:日常网购核验成交价,甄别平台营销溢价,仅自用数据核验;
-
反向海淘货源甄选:批量核验1688、拼多多货源采购底价,留存价格台账,长期管控采购成本;
-
政企物资采购:办公耗材、物料定期行情复盘,留存比价凭证,标准化采购溯源;
-
行业技术调研:电商数据处理、API聚合技术学习、后端架构实战演练。
八、结语
拆解整套多平台比价系统,底层核心逻辑始终只有两点:合规数据源接入+异构数据归一化清洗,定时调度、告警可视化均为附加业务能力。
从后端研发视角来看,这套系统技术门槛偏低,真正难点不在于接口调用、代码开发,而是长期合规治理与平台风控平衡。尤其是对接各大电商开放平台,必须严守数据采集边界、限流规则,舍弃违规便捷方案,才能保证系统长期稳定运行。
对于反向海淘、采购类业务,该架构最大价值是标准化货源行情台账,把零散的采购比价工作自动化、可溯源化,降低人为决策偏差,而非单纯低价薅取优惠。