第4章 · 下行隧道:下载器与中间件 本章要回答的三个问题:请求发出去之后、响应回来之前,框架给了你哪些合法的插手点?目标站的限流、封禁、登录校验,各该在哪一层化解?并发、限速与重试这些"框架托管"的行为,参数怎么调才算既快又稳? 为什么会有这一章 前两章你写的代码都活在"安全区":Spider 只管出票与拆包,管道只管收货。可采集工作的真正摩擦发生在隧道里——对端是一个不愿被批量访问的站点,它会查你的身份、数你的频率、拒绝你的指纹。手写脚本时代,这些问题靠在请求循环里撒补丁解决;Scrapy 把它们集中安置在下行隧道的关卡上:去程改写请求(换身份、换线路、带上通行证),回程检验响应(认出封禁、触发退避、决定重发)。 本章同时接管全框架对抗最激烈的两个话题:访问节奏与失败处理。3.
本章要回答的三个问题:请求发出去之后、响应回来之前,框架给了你哪些合法的插手点?目标站的限流、封禁、登录校验,各该在哪一层化解?并发、限速与重试这些"框架托管"的行为,参数怎么调才算既快又稳?
前两章你写的代码都活在"安全区":Spider 只管出票与拆包,管道只管收货。可采集工作的真正摩擦发生在隧道里——对端是一个不愿被批量访问的站点,它会查你的身份、数你的频率、拒绝你的指纹。手写脚本时代,这些问题靠在请求循环里撒补丁解决;Scrapy 把它们集中安置在下行隧道的关卡上:去程改写请求(换身份、换线路、带上通行证),回程检验响应(认出封禁、触发退避、决定重发)。
本章同时接管全框架对抗最激烈的两个话题:访问节奏与失败处理。3.2 节你见过并发与延迟的配置,那是"静态限速";4.3 节的自动节流是"动态感知"——根据响应快慢实时调节奏。4.4 节的失败处理则把重试、超时、异常三类事件收拢成一套策略,顺带把 2.2 节"失败没有回程"的伏笔补全:errback 收到的到底是什么、失败统计怎么读。
按双程日记的说法,本章是车票离站后、到站前的全部旅程。这段路你看不见页面内容,却能决定每一张票的生死。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 4.1 中间件关卡 | 插手点在哪、顺序怎么算 | 返回值约定与装配数字的实操 |
| 4.2 身份与会话 | 身份与登录态怎么管 | UA 轮换、代理接入、Cookie 策略 |
| 4.3 并发节流 | 节奏怎么自适应 | 静态限速加 AutoThrottle 的组合 |
| 4.4 失败处理 | 票失联了怎么办 | 重试、超时、errback 三件套 |
四节是"关卡、装备、节奏、兜底"的关系。4.1 是基础设施,后三节都是它的应用;跳读请先读 4.1。
隧道走完,票到站了。第 5 章处理到站后的疑难件:要登录的页面、浏览器才能渲染的页面、以及面对一个陌生站点怎么制定采集策略。本章的中间件装备(尤其 4.2 的会话管理)会直接被 5.1 的登录流程征用;而 4.4 的失败统计,是 5.3 站点评估记分卡的重要数据源。