10天学会Scrapy 第5天:核心实战讲义

10天学会Scrapy Day 05 模块化课程讲义,基于 repo 文档完成可执行实现、验证实验与回滚边界。

亿牛云技术团队2026年3月13日2 分钟阅读

Part 5: Feed Export and Incremental Keys

这是《10天学会Scrapy》第 5/10 天。今天解决一个明确问题:如何把“能跑起来”升级为“可复现、可验证、可回滚”的模块化实现。

What Is Feed Export and Incremental Keys?

导出策略与增量抓取 是把抓取流程拆成可独立验证的工作单元。结论:你今天必须交付 JSONL/CSV 双输出与增量键设计,否则课程目标未达成。

Beginners Scrapy Tutorial

学习约束:

  • 只做当天模块,不跨主题扩写
  • 必须留下命令、代码、输出、验证四类证据
  • 发现失败必须记录修复动作

repo 文档主线(仅保留与当日模块相关目录):

  • scrapy/scrapy:重点目录 docs, extras, scrapy, sep
  • scrapy/scrapyd:重点目录 docs, integration_tests, scrapyd, tests
  • scrapy-plugins/scrapy-playwright:重点目录 docs, examples, scrapy_playwright, tests

Step 1 - Environment and Baseline Setup

cd ~/scrapy-labs/day01/bookslab
scrapy crawl books -O output/day05.jsonl
scrapy crawl books -O output/day05.csv

Step 2 - Build the Core Module

核心代码(当日必须可运行):

# add stable key for incremental processing
import hashlib
def build_item_key(title: str, upc: str) -> str:
    raw = f"{title}|{upc}".encode("utf-8")
    return hashlib.sha1(raw).hexdigest()[:16]

Step 3 - Run and Capture Outputs

执行后你应该拿到结构化输出文件,并能回答这两个问题:

  • 关键字段是否完整?
  • 输出规模是否达到当天目标?

Step 4 - Validate and Fix Failures

关键补充代码(用于补齐当日链路):

# usage when yielding
item["item_key"] = build_item_key(item.get("title", ""), item.get("upc", ""))

Step 5 - Boundary and Acceptance

  • 误区1:只看“命令成功”,不看数据质量。
  • 误区2:没有验证脚本,靠肉眼判断。
  • 误区3:一次改太多变量,无法定位问题。

验收表:

检查项通过标准失败信号修复方向
输出规模>= 200 记录明显低于阈值检查分页与请求路径
字段完整度缺失率 <= 5%title/url 空值多回到选择器与清洗逻辑
验证脚本passassert fail对照失败行修复并重跑
回滚能力10 分钟内恢复修改不可逆保留 baseline 配置

Next Steps

  • 总结今天完成的知识点覆盖:core concepts, module implementation, validation and troubleshooting, production boundary
  • 记录一个失败案例与修复方法,作为明天的输入
  • 明天进入下一个 Part,保持同样的 Step 节奏

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。