Scrapy 管道数据提取器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/scrapy-pipeline-data-extractor。
技能介绍
它解决什么问题
爬虫能跑起来,不等于数据能用。默认的 Scrapy 爬虫把抓到的字段原样塞进 Item,很快会遇到三类问题:同名字段格式不统一(日期可能是 2024/01/02,也可能是 Jan 2, 2024;价格可能带 ¥、$ 和千分位逗号)、重复行直接落库、爬虫顺着无关链接跑偏到整站。事后在 pandas 里补救要重跑整条链路,而且只在列表页出现的脏数据很容易漏掉。
技能如何组织爬虫
这个技能把处理逻辑放进 Scrapy 的抓取流程,而不是事后清洗:
- 爬取范围:用
scrapy.linkextractors.LinkExtractor声明哪些链接值得跟进,边界写在爬虫配置里,避免整站无差别抓取。 - 字段规范化:用
ItemLoader配合MapCompose处理器,在字段进入 Item 之前逐项做 trim、大小写、日期和数值转换。处理器在加载阶段逐字段执行,管道可以假定收到的数据已经统一。 - 清洗与落库:自定义 Item Pipeline 接在 loader 之后,负责去重、校验、补全和写入存储,清洗规则与抓取规则分开维护。
- 三层职责边界清楚:改字段格式不影响抓取范围,换存储不影响字段解析。
适用边界与注意点
- 依赖 Scrapy 本身,需要 Python 3.10 以上,跨平台可用。
- 框架由 Zyte 维护,行为以 Scrapy 官方文档为准:https://docs.scrapy.org/en/latest/。
MapCompose是逐字段执行的,写在字段上比写在管道里更早介入,但要小心在处理器里做需要全局状态(比如跨行统计)的操作。- 生成的爬虫面向生产使用,存储位置和去重策略需要按自己的数据规模先想清楚,技能不会替你决定这些。
使用场景
- 在写生产级爬虫时,页面里有筛选和分页链接,需要用 LinkExtractor 限定跟进范围,防止爬到全站。
- 列表页返回的日期、价格、编码格式混乱,需要用 ItemLoader 和 MapCompose 在入库前统一字段。
- 清洗逻辑写在管道里后,需要继续加去重、校验和写库,且不想改动字段解析代码。
- 多来源字段命名不一致,需要在统一 Item 结构中映射并补全缺失字段后再落库。
适合人员
- 爬虫工程师:需要把页面解析、字段清洗和落库拆成 Scrapy 里清晰可维护的三层。
- 数据工程师:需要对多个来源做统一 schema 映射和规范化后再入库。
- 数据采集负责人:需要在扩大抓取范围前控制 LinkExtractor 边界和去重策略。
- 后端工程师:需要把去重、校验和存储逻辑放进 Scrapy pipeline 而不是抓取回调。