手机分期 SKU 价格数据采集与导入 — 迭代需求
手机分期 SKU 价格数据分两类处理:Android 新机继续使用 Jumia 数据;二手 iPhone 使用 jiji.ng 数据跟踪。采集数据不直接改正式 SKU,先按版本生成线下导入文件,运营确认后导入后台;所有 SKU 价格更新必须记录 log。
1. 目标
- Android 新机:从 Jumia 采集新机价格、型号、图片,用于维护 Android 新机 SKU。
- 二手 iPhone:从 jiji.ng 采集 iPhone 11 起的二手手机信息,并按标准型号和规格聚合价格。
- 后台不直接接入爬虫结果;爬虫结果通过线下导入文件进入后台。
- SKU 价格每次更新都必须可追溯到导入批次、来源数据和操作人。
2. 数据来源与处理方式
| 品类 | 来源 | 采集对象 | 处理方式 |
|---|---|---|---|
| Android 新机 | jumia.ng | 手机分期 SKU 库内 Android 新机型号 | 采集商品标题、型号、价格、图片,匹配到现有 Android SKU |
| 二手 iPhone | jiji.ng | iPhone 11 及以上二手机 | 采集标题、价格、图片、链接,对标题解析并聚合到标准 iPhone 型号和规格 |
不在 SKU 库或标准型号清单内的数据,只保留在采集明细中,不自动创建 SKU。
3. 二手 iPhone 聚合规则
jiji.ng 采集到的标题必须先解析为标准型号和规格,再做价格汇总。
3.1 标准型号
支持 iPhone 11 起的标准型号,包括:
- iPhone 11 / 11 Pro / 11 Pro Max
- iPhone 12 / 12 mini / 12 Pro / 12 Pro Max
- iPhone 13 / 13 mini / 13 Pro / 13 Pro Max
- iPhone 14 / 14 Plus / 14 Pro / 14 Pro Max
- iPhone 15 / 15 Plus / 15 Pro / 15 Pro Max
- iPhone 16 及以上按标准型号清单扩展
标题无法明确解析到标准型号的记录,标记为 UNMATCHED_MODEL,不进入聚合价格。
3.2 规格
规格至少按存储容量区分,例如 64GB、128GB、256GB、512GB、1TB。
标题无法明确解析容量的记录,标记为 UNMATCHED_SPEC,不进入机型规格聚合,但保留在明细中供人工复核。
3.3 汇总指标
每个“标准型号 + 规格”输出一行汇总数据:
| 字段 | 说明 |
|---|---|
| 标准型号 | 如 iPhone 13 Pro Max |
| 规格 | 如 256GB |
| 样本数 | 参与统计的有效明细数量 |
| 平均值 | 有效价格的平均值 |
| 最小值 | 有效价格的最小值 |
| 中位数 | 有效价格的中位数 |
| 最大值 | 有效价格的最大值 |
| 数据来源 | 固定为 jiji.ng |
| 采集版本 | 本次采集批次号 |
价格无法解析、价格为 0、明显非 NGN 价格、重复链接、非 iPhone 11 起机型的记录不参与汇总。
4. 明细输出
每次采集必须输出明细文件,便于运营核查。
| 字段 | Android 新机 | 二手 iPhone |
|---|---|---|
| 采集版本 | 必填 | 必填 |
| 来源站点 | 必填 | 必填 |
| 来源 URL | 必填 | 必填 |
| 原始标题 | 必填 | 必填 |
| 标准型号 | 必填 | 必填;无法识别则标记异常 |
| 规格 | 可选 | 必填;无法识别则标记异常 |
| 原始价格 | 必填 | 必填 |
| 标准价格 | 必填 | 必填 |
| 图片 URL | 必填 | 必填 |
| 异常标记 | 可选 | 可选 |
5. 线下导入后台
爬虫结果不直接写后台数据库。每次采集完成后生成线下导入文件,由运营确认后在后台导入。
导入文件分两类:
| 文件 | 用途 |
|---|---|
| Android 新机 SKU 导入文件 | 用于更新 Android 新机 SKU 的价格、图片等字段 |
| 二手 iPhone 汇总导入文件 | 用于导入各标准型号、规格下的平均值、最小值、中位数、最大值 |
后台导入时必须校验:
- 导入批次号不能为空且不能重复导入。
- SKU 或标准型号必须存在;不存在则整行失败。
- 价格字段必须为合法 NGN 金额。
- 二手 iPhone 汇总行必须包含平均值、最小值、中位数、最大值和样本数。
- 同一批次部分行失败时,成功行和失败行要分别展示,失败原因必须可下载。
6. 存量数据处理
采用“匹配存量、生成差异、确认后覆盖”的方案,不允许导入文件直接新增正式 SKU 或静默覆盖存量价格。
6.1 匹配规则
| 数据类型 | 存量匹配键 | 处理结果 |
|---|---|---|
| Android 新机 | SKU ID 优先;无 SKU ID 时使用品牌 + 标准型号 + 规格 | 匹配成功后进入差异预览;匹配失败则整行失败 |
| 二手 iPhone 汇总 | 标准型号 + 规格 | 匹配成功后进入差异预览;匹配失败则整行失败 |
导入时不自动创建 SKU、不自动创建标准型号、不自动创建规格。缺失的 SKU、型号或规格必须先由运营在正式 SKU 管理中维护,再重新导入。
6.2 差异预览
导入文件校验通过后,后台先生成差异预览,不立即更新存量数据。
差异预览必须展示:
- 当前 SKU / 型号规格;
- 存量价格;
- 本次导入价格;
- 价格变化金额;
- 价格变化比例;
- 存量图片与本次图片;
- 数据来源和采集版本。
价格未变化的行标记为“无变化”,不写正式价格表,但需要记录本次导入明细结果。
6.3 更新规则
- 只有差异预览中状态为“可更新”的行,才允许确认导入。
- 确认导入后,只覆盖本次导入文件中明确提供的字段;导入文件未提供的字段保持存量值不变。
- Android 新机可更新 SKU 价格和图片。
- 二手 iPhone 只更新对应标准型号、规格的价格参考数据;不直接改 Android SKU,不跨型号更新。
- 任一行更新失败时,该行保持原存量数据不变,并记录失败原因。
- 同一批次重复导入时,后台必须拦截,不允许重复覆盖。
6.4 存量快照
每次确认导入前,后台必须保存受影响记录的更新前快照。快照用于价格 log 展示和必要时回查,不依赖爬虫文件重新计算。
7. SKU 价格更新 Log
所有 SKU 价格更新必须记录 log。无 log 的价格更新视为不合格。
log 至少包含:
| 字段 | 说明 |
|---|---|
| 更新批次号 | 对应线下导入批次 |
| SKU ID / 标准型号规格 | 被更新对象 |
| 更新前价格 | 原价格 |
| 更新后价格 | 新价格 |
| 价格来源 | JUMIA_ANDROID_NEW 或 JIJI_IPHONE_USED |
| 来源版本 | 采集版本号 |
| 操作人 | 导入或确认人员 |
| 操作时间 | 更新发生时间 |
| 更新结果 | 成功 / 失败 |
| 失败原因 | 更新失败时必填 |
价格 log 必须可在后台按 SKU、标准型号、批次号、来源和时间查询。
8. 异常处理
- 采集失败、空结果、验证码页、页面结构变化时,只生成失败批次,不生成可导入更新文件。
- Android 新机无法匹配现有 SKU 时,该行不导入正式 SKU。
- 二手 iPhone 无法识别标准型号或规格时,该行只保留在明细,不进入汇总。
- 同一型号规格样本数低于后台配置的最小样本数时,不允许导入该汇总价格。
- 导入失败不会覆盖原 SKU 价格。
9. 验收标准
- Android 新机价格数据来自 Jumia,二手 iPhone 价格数据来自 jiji.ng。
- 二手 iPhone 能按标题解析到标准型号和规格,并输出平均值、最小值、中位数、最大值和明细。
- 爬虫结果通过线下导入文件进入后台,不直接更新正式 SKU。
- 后台能校验导入批次、SKU / 标准型号、价格和二手 iPhone 汇总字段。
- 导入时先匹配存量数据并生成差异预览,未匹配行不会新增或覆盖正式 SKU。
- 价格无变化的行不更新正式价格表;价格变化的行确认后才覆盖存量价格。
- 任意 SKU 价格更新都有 log,可查更新前后价格、来源版本、操作人和操作时间。
- 采集异常、解析异常、导入异常不会覆盖已有 SKU 价格。