第2章 · 请求的诞生:Spider 车间 本章要回答的三个问题:一张 Request 是在哪里、以什么方式出生的?Request 与 Response 这对双程车票各自携带哪些信息,解析回调拿到的到底是什么?怎么把网页拆成结构化数据,并给拆出来的数据登记一个受全程监护的"户口"? 为什么会有这一章 工厂通电了,现在轮到雇佣工人。第 1 章的架构图里,Spider 车间是唯一一个"你不写代码框架就没法开工"的地方——调度器、下载器、管道全是通用件,只有 Spider 知道你的目标站点长什么样。这决定了本章是全册动手密度最高的一章:从起始请求的发出方式,到响应对象的解读,再到选择器、数据建模、自动翻页,每一步都在往车间里添置工序。
本章要回答的三个问题:一张 Request 是在哪里、以什么方式出生的?Request 与 Response 这对双程车票各自携带哪些信息,解析回调拿到的到底是什么?怎么把网页拆成结构化数据,并给拆出来的数据登记一个受全程监护的"户口"?
工厂通电了,现在轮到雇佣工人。第 1 章的架构图里,Spider 车间是唯一一个"你不写代码框架就没法开工"的地方——调度器、下载器、管道全是通用件,只有 Spider 知道你的目标站点长什么样。这决定了本章是全册动手密度最高的一章:从起始请求的发出方式,到响应对象的解读,再到选择器、数据建模、自动翻页,每一步都在往车间里添置工序。
很多人把 Spider 写成"能跑就行",结果在项目变大后付出代价:回调函数互相缠绕、字段口径朝令夕改、翻页逻辑写死在循环里。本章的编排正是冲着这些债去的——Request 与 Response 的一节会让你理解回调的进出口协议,Items 一节会让你把数据口径固定成契约,LinkExtractor 一节会让你把翻页从手写循环升级成规则声明。
按双程日记的说法,本章覆盖"车票出生"与"到站拆包"两段:出发时你在 Spider 里造票,到站时响应回到你手里拆货。把这两段吃透,框架剩下的部分(候车、下行)反而更像"别人的岗位"——你只需要知道怎么配置它们。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 2.1 Spider 与起始请求 | 票在哪里出生,怎么驱动多页 | 一个能跑多回调链的 Spider |
| 2.2 Request 与 Response | 车票上印了什么信息 | 进出口协议认知,meta 传话技巧 |
| 2.3 Selectors 选择器 | 到站后怎么拆包 | 双套选择器实操与验证工作流 |
| 2.4 Items 数据项 | 拆出的数据怎么登记 | 契约式数据模型 |
| 2.5 链接提取与自动跟页 | 续票怎么自动化 | 规则声明的 CrawlSpider |
五节按"出生、协议、拆包、登记、续票"排列,前三节是主干,后两节是质量杠杆。若你已有脚本经验,2.2 与 2.4 是与旧习惯差异最大的两节,值得放慢。
本章结束时,你已经能让车票循环起来:出生、到站、拆包、续票。但此刻所有车票都从正门(默认队列)进站,没有优先级、没有去重认知,也没有配置意识。第 3 章把你带进候车大厅——看看框架在你看不见的地方如何排队、如何拦下重复的票。那些在 2.2 里埋下的 Request 参数(priority、dont_filter),也将在那里正式派上用场。