首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
12.1 Charles 抓包工具的使用
12.2 mitmproxy 抓包工具的使用
12.3 mitmdump 实时抓包处理
12.4 Appium 的使用
12.5 基于 Appium 的 App 爬取实战
12.6 Airtest 的使用
12.7 基于 Airtest 的 App 爬取实战
12.8 手机群控爬取实战
12.9 云手机的使用
13.0 Android 逆向
13.1 jadx 的使用
13.2 JEB 的使用
13.3 Xposed 框架的使用
13.4 基于 Xposed 的爬取实战案例
13.5 Frida 的使用
13.6 SSL Pining 问题的解决方案
13.7 Android 脱壳技术简介与实战
13.8 利用 IDA Pro 静态分析和动态调试 so 文件
13.9 基于 Frida-RPC 模拟执行 so 文件
13.10 基于 AndServer-RPC 模拟执行 so 文件
13.11 基于 unidbg 模拟执行 so 文件
14.1 页面智能解析简介
14.2 详情页智能解析算法简介
14.3 详情页智能解析算法的实现
14.4 列表页智能解析算法简介
14.5 列表页智能解析算法的实现
14.6 如何智能分辨列表页和详情页
15.1 Scrapy框架介绍
15.2 Scrapy入门
15.3 Selector 的使用
15.4 Spider 的使用
15.5 Downloader Middleware的使用
15.6 Spider Middleware的使用
15.7 Item Pipeline的使用
15.8 Extension的使用
15.9 Scrapy 对接 Selenium
15.10 Scrapy 对接 Splash
15.11 Scrapy 对接 Pyppeteer
15.12 Scrapy 规则化爬虫
15.13 Scrapy 实战
16.1 分布式爬虫理念
16.2 Scrapy-Redis原理和源码解析
16.3 基于Scrapy-Redis的分布式爬虫实现
16.4 基于Bloom Filter进行大规模去重
16.5 基于RabbitMQ的分布式爬虫
17.1 Scrapyd和ScrapydAPI的使用
17.2 Scrapyd-Client 的使用
17.3 Gerapy 爬虫管理框架的使用
17.4 将Scrapy 项目打包成 Docker 镜像
17.5 Docker Compose 的使用
17.6 Kubernetes的使用
17.7 用 Kubernetes 部署和管理 Scrapy 爬虫
17.8 Scrapy 分布式爬虫的数据统计方案
17.9 基于Prometheus和Grafana的分布式爬虫监控方案
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(下)
小册名称:Python3网络爬虫开发实战(下)
### 第15章 深入Scrapy框架:Spider Middleware的使用 在Scrapy这个强大的Python爬虫框架中,中间件(Middleware)扮演着至关重要的角色。它们位于Scrapy引擎的核心,允许开发者在不修改框架代码的情况下,插入自定义功能来处理爬取过程中的请求、响应、异常等。本章将重点介绍Spider Middleware(蜘蛛中间件)的使用,帮助读者深入理解如何在Scrapy项目中利用中间件来优化、扩展或修改爬虫的行为。 #### 15.6 Spider Middleware的使用 Spider Middleware是Scrapy中一种特殊的中间件,它专门用于处理Spider的输入(即响应)和输出(即提取的数据项、新的请求等)。通过编写和配置Spider Middleware,开发者可以在Scrapy处理Spider返回的响应之前或之后,以及处理Spider生成的请求和项之前,插入自定义的逻辑。这对于实现复杂的爬虫逻辑、过滤不必要的响应、修改请求参数、增加日志记录等功能非常有用。 ##### 15.6.1 Spider Middleware的工作流程 在Scrapy中,Spider Middleware的工作流程可以概括为以下几个步骤: 1. **请求发送前**:在Scrapy引擎将请求发送给下载器之前,Spider Middleware可以修改这些请求,例如添加或修改HTTP头、设置代理等。 2. **响应接收后**:下载器将响应返回给Scrapy引擎后,Spider Middleware可以在Spider处理这些响应之前对其进行处理,如解压缩、修改响应内容、添加额外的响应信息等。 3. **生成请求时**:当Spider基于当前响应生成新的请求时,Spider Middleware可以拦截这些请求,进行必要的修改或过滤。 4. **生成项时**:Spider解析响应并生成数据项时,Spider Middleware可以在这些数据项被进一步处理(如去重、存储)之前进行干预。 ##### 15.6.2 编写Spider Middleware 要编写一个Spider Middleware,你需要继承`scrapy.spidermiddlewares.SpiderMiddleware`类,并实现其方法。下面是一个简单的Spider Middleware示例,它会在每个响应被处理前打印响应的URL: ```python from scrapy import signals from scrapy.spidermiddlewares.spidermiddleware import SpiderMiddleware class PrintUrlMiddleware(SpiderMiddleware): # 可选:组件激活时接收的信号 @classmethod def from_crawler(cls, crawler): # 这必须从crawler的settings中获取中间件设置 # 如果没有,就返回cls的实例 s = crawler.settings.getint('PRINT_URL_MIDDLEWARE_ENABLED', 0) if not s: raise NotConfigured # 初始化中间件,传入crawler对象 return cls(crawler) def process_spider_input(self, response, spider): # 响应被Spider处理之前调用 print(f"Processing response from {response.url}") # 必须返回响应对象 return None def process_spider_output(self, response, result, spider): # Spider生成的结果(请求或项)被进一步处理前调用 # 可以在这里修改或过滤结果 for item in result: yield item def process_spider_exception(self, response, exception, spider): # Spider处理响应时抛出异常时调用 # 可以在这里记录异常或修改异常行为 pass def process_start_requests(self, start_requests, spider): # Spider开始爬取时,处理其生成的初始请求 for request in start_requests: yield request ``` 注意,`process_spider_input`方法虽然通常用于处理响应,但按照Scrapy的约定,它不直接修改或返回响应对象,而是通过其他方式(如日志记录)来影响流程。真正的响应处理通常是在Spider中完成的。 ##### 15.6.3 配置和使用Spider Middleware 编写好Spider Middleware后,你需要在Scrapy项目的`settings.py`文件中进行配置,以便Scrapy能够识别并使用它。配置通常包括两部分:激活中间件和设置其优先级。 ```python # settings.py # 激活中间件 SPIDER_MIDDLEWARES = { 'myproject.middlewares.PrintUrlMiddleware': 543, } # 设置中间件优先级(可选,数字越小,优先级越高) # 注意:Scrapy默认中间件也有其优先级,确保你的中间件不会意外地覆盖它们 ``` 在上面的配置中,`'myproject.middlewares.PrintUrlMiddleware': 543`指定了中间件的位置和优先级。Scrapy按照从低到高的顺序(即数字从小到大)调用中间件的方法。 ##### 15.6.4 进阶应用 Spider Middleware的应用远不止于简单的日志记录或响应处理。通过合理的设计,你可以利用它们来实现复杂的爬虫逻辑,如: - **动态修改请求参数**:根据当前爬取的状态或响应内容,动态地修改后续请求的URL、头信息等。 - **内容过滤**:在响应被Spider处理之前,基于响应的内容或特征进行过滤,以减少不必要的处理。 - **数据增强**:在数据项被进一步处理前,添加额外的信息或进行格式转换。 - **异常处理**:捕获并处理Spider在处理响应时可能抛出的异常,提高爬虫的健壮性。 ##### 15.6.5 总结 Spider Middleware是Scrapy框架中一个非常强大且灵活的特性,它允许开发者在不修改框架代码的情况下,通过插入自定义的逻辑来优化、扩展或修改爬虫的行为。通过合理使用Spider Middleware,你可以构建出更加高效、健壮、可维护的爬虫系统。在本章中,我们介绍了Spider Middleware的基本概念、工作流程、编写方法、配置方式以及进阶应用,希望这些内容能够帮助你更好地理解和使用Scrapy框架中的这一重要特性。
上一篇:
15.5 Downloader Middleware的使用
下一篇:
15.7 Item Pipeline的使用
该分类下的相关小册推荐:
Python与办公-玩转Word
Python合辑12-面向对象
Python数据分析与挖掘实战(上)
Python与办公-玩转PPT
Python机器学习基础教程(上)
Python合辑2-字符串常用方法
Python合辑9-判断和循环
Python爬虫入门与实战开发(上)
Python编程轻松进阶(四)
Python合辑1-Python语言基础
Python合辑3-字符串用法深度总结
Python机器学习实战