第2章 请求的诞生:Spider 车间


文档摘要

第2章 · 请求的诞生:Spider 车间 本章要回答的三个问题:一张 Request 是在哪里、以什么方式出生的?Request 与 Response 这对双程车票各自携带哪些信息,解析回调拿到的到底是什么?怎么把网页拆成结构化数据,并给拆出来的数据登记一个受全程监护的"户口"? 为什么会有这一章 工厂通电了,现在轮到雇佣工人。第 1 章的架构图里,Spider 车间是唯一一个"你不写代码框架就没法开工"的地方——调度器、下载器、管道全是通用件,只有 Spider 知道你的目标站点长什么样。这决定了本章是全册动手密度最高的一章:从起始请求的发出方式,到响应对象的解读,再到选择器、数据建模、自动翻页,每一步都在往车间里添置工序。

第2章 · 请求的诞生:Spider 车间

本章要回答的三个问题:一张 Request 是在哪里、以什么方式出生的?Request 与 Response 这对双程车票各自携带哪些信息,解析回调拿到的到底是什么?怎么把网页拆成结构化数据,并给拆出来的数据登记一个受全程监护的"户口"?

为什么会有这一章

工厂通电了,现在轮到雇佣工人。第 1 章的架构图里,Spider 车间是唯一一个"你不写代码框架就没法开工"的地方——调度器、下载器、管道全是通用件,只有 Spider 知道你的目标站点长什么样。这决定了本章是全册动手密度最高的一章:从起始请求的发出方式,到响应对象的解读,再到选择器、数据建模、自动翻页,每一步都在往车间里添置工序。

很多人把 Spider 写成"能跑就行",结果在项目变大后付出代价:回调函数互相缠绕、字段口径朝令夕改、翻页逻辑写死在循环里。本章的编排正是冲着这些债去的——Request 与 Response 的一节会让你理解回调的进出口协议,Items 一节会让你把数据口径固定成契约,LinkExtractor 一节会让你把翻页从手写循环升级成规则声明。

按双程日记的说法,本章覆盖"车票出生"与"到站拆包"两段:出发时你在 Spider 里造票,到站时响应回到你手里拆货。把这两段吃透,框架剩下的部分(候车、下行)反而更像"别人的岗位"——你只需要知道怎么配置它们。

读完能解决什么

  1. 用 start_urls、start_requests 与回调链,写出多页面、多层级页面的抓取逻辑;
  2. 说清 Response 对象上有什么:状态、头、体、选择器接口,以及 meta 字段怎么跨回调传话;
  3. 用 CSS 与 XPath 两套选择器拆出文本、属性、结构化节点,并在交互终端里验证;
  4. 把提取结果定义成 Item 模型,理解"裸字典"与"契约模型"的工程差异;
  5. 用链接提取器与 CrawlSpider 把"跟进新链接"从手写 yield 升级为规则声明。

各节怎么分工

回答哪个问题 关键产出
2.1 Spider 与起始请求 票在哪里出生,怎么驱动多页 一个能跑多回调链的 Spider
2.2 Request 与 Response 车票上印了什么信息 进出口协议认知,meta 传话技巧
2.3 Selectors 选择器 到站后怎么拆包 双套选择器实操与验证工作流
2.4 Items 数据项 拆出的数据怎么登记 契约式数据模型
2.5 链接提取与自动跟页 续票怎么自动化 规则声明的 CrawlSpider

五节按"出生、协议、拆包、登记、续票"排列,前三节是主干,后两节是质量杠杆。若你已有脚本经验,2.2 与 2.4 是与旧习惯差异最大的两节,值得放慢。

本章知识点清单

  • 能解释 start_urls 与 start_requests 的关系,以及为什么需要重写后者(带表单、带初始 meta 时);
  • 能说出 Request 五个常用参数(url、callback、meta、headers、dont_filter)各自的使用时机;
  • 能在解析回调里取到状态码、响应头与响应体,并解释 response.follow 相对手工拼接的便利;
  • 能用 css 与 xpath 选择器完成文本、属性、多值提取,说出两者各自的舒适区;
  • 能定义带字段元信息的 Item 类,并解释 Item 与字典在管道阶段的处理差异;
  • 能用 Rule 加 LinkExtractor 声明翻页与详情页两类跟进规则,并解释 process_links 的用途。

先决条件

  • 第 1 章的工程已建好、能运行;
  • HTML 基本结构:标签、属性、类名(选择器一节的全部前提);
  • Python 生成器语法——Spider 回调大量使用 yield,读不懂生成器会误解执行时序。

往下走到哪

本章结束时,你已经能让车票循环起来:出生、到站、拆包、续票。但此刻所有车票都从正门(默认队列)进站,没有优先级、没有去重认知,也没有配置意识。第 3 章把你带进候车大厅——看看框架在你看不见的地方如何排队、如何拦下重复的票。那些在 2.2 里埋下的 Request 参数(priority、dont_filter),也将在那里正式派上用场。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U