kp-030

案例:电商商品数据采集全流程

进阶 ≈ 35 分钟 电商案例价格监控全流程

前置知识

本文基于模型知识整理。案例以公开练习站与合规目标为载体演示方法;对真实电商平台采集前必须完成 kp-004 的合规自检。

一句话定义

本案例串联全库技能,完成一个「竞品价格日度监控」的端到端项目:判型 → 接口/解析 → 翻页与调度 → 落库 → 价格指数分析。

为什么重要

单项技能(解析、翻页、限速)都懂但拼不成项目,是学习期的普遍瓶颈。本篇给出完整的决策链与代码骨架,可作为后续真实项目的模板。

前置知识

kp-010、kp-016;建议先通读 kp-004。

核心概念

  • 需求定义:监控 N 个竞品 SKU 的每日价格 → 回答「我该不该调价」(kp-024 反向设计)。
  • 判型:Ctrl+U 搜价格文本 → 有则静态/接口,无则抓包找接口(kp-012/014)。
  • 两级采集:列表页收集 SKU 链接 → 详情/接口抽取字段(kp-010)。
  • 日度调度 + 历史保留:定时任务 + 只追加价格表(kp-021)。

原理与机制

端到端流水线(各环节对应的知识点标注在括号内):

① 合规自检: robots/频率/数据用途 (kp-004)
② 判型与选路: SSR→解析 / CSR→接口 / 全失败→浏览器 (kp-012)
③ 试抓 50 条 POC: 验证字段可得性与结构稳定性 (kp-007/009)
④ 字段契约: sku_id,title,price,list_time,category,ts (kp-024)
⑤ 正式采集: 列表翻页→URL队列→详情抓取; 限速1QPS+退避 (kp-010/017/021)
⑥ 落库: prices 长表只追加; 原始页按日归档 (kp-011)
⑦ 监控: 入库量/空值率/429率 三条水位线 (kp-023)
⑧ 分析: 重采样→指数化→变价事件→周报 (kp-027/029)

核心采集骨架(把本库多个组件拼起来):

def daily_job():
    bucket = TokenBucket(rate=1.0)                       # kp-017
    with requests.Session() as s:
        skus = []
        for page_url in paginate(list_url_builder):      # kp-010 翻页
            bucket.take()
            r = fetch(s, page_url)                       # kp-006 超时重试
            skus += extract_skus(r.text)                 # kp-007/009 抽取
        for url, etag in dedup(skus):                    # kp-021 去重状态
            bucket.take()
            item = extract_detail(fetch(s, url))
            if item and item.get("price"):               # kp-023 假成功防御
                queue_save(item)                         # kp-011 批量落库
        heartbeat(metrics)                               # kp-023 心跳

实例或案例

练习版落地(books.toscrape.com 充当商品站):50 页翻页 + 每本详情,产出 prices(book_id, ts, price) 长表;跑 5 天后用 kp-027 的指数化画对比图。这个练习完整走过 ①–⑧ 八步,是本库的毕业设计——完成后即可按同一模板替换目标站点。

真实场景的差异点:目标多为 CSR(先抓包)、字段更多(销量/评分/券后价)、有登录墙(评估是否该采)、风控更强(回到 kp-004 决定是否继续)。

常见误区

  • 误区一:跳过 POC 直接全量。 字段契约未验证就跑全站,跑完发现关键页缺字段,全量重抓。
  • 误区二:把「能抓到」当「能长期抓」。 没有监控与原始层归档的任务,站点一改版数据断档且无法回溯。
  • 误区三:价格分析直接用原始值。 不做重采样与指数化的价格对比图无法支撑决策(kp-027 误区回顾)。

自测题

  1. 本案例八步里,哪一步必须在写代码之前完成?

答:① 合规自检与 ④ 字段契约(含 POC 验证)——先确认「该不该采、采什么」,再动手。

  1. 为什么价格表设计成只追加的长表?

答:保留完整历史才能做时序与事件分析;UPDATE 覆盖会销毁历史,趋势分析失去原料。

  1. 案例中三道监控水位线是什么?

答:入库量(骤降=改版/接口失效)、空值率(解析失效)、429 率(触发限流需自动降速)。

与其他知识点的关系

本篇是 kp-005~011、kp-016~017、kp-021、kp-023~024、kp-027~029 的集成应用;项目层面的流程模板见 kp-033。

延伸阅读

本库 kp-033(通用项目工作流);Scrapy 官方 Tutorial(同一需求的框架版实现)。

相关知识点

学习进度