返回介绍

12.2 下载器中间件

发布于 2025-04-21 19:15:29 字数 1567 浏览 0 评论 0 收藏

12.2.1 下载器中间件简介

上一节讲到设置随机的用户代理和随机的 IP 代理能防止爬虫被禁止,这是非常有效的应对反爬虫措施,值得读者学习掌握。设置随机用户代理和 IP 代理都需要用到 Scrapy 下载器中间件。

如前所述,下载器中间件介于 Scrapy 引擎和 Scrapy 下载器之间。Scrapy 所有发出的请求(request)和请求响应(response)都会经过下载器中间件,所以,如果想全局地修改 Scrapy 的 request 和 response,就可以通过下载器中间件来修改。例如现在设置随机 User Agent 和随机 IP 代理,就需要对 Scrapy 框架全局 request 进行修改,因此通过设置下载器中间件来完成。

12.2.2 激活下载器中间件

要使用下载器中间件配置 Scrapy,首先需要激活下载器中间件组件,在 settings.py 文件中将其加进 DOWNLOADER_MIDDLEWARES 设置。该设置是一个字典(dict),键为用户编写的中间件类的路径,值为这个中间件的执行顺序。

打开房天下爬虫的 settings.py 文件,会发现它已包含 DOWNLOADER_MIDDLEWARES 设置,要启用下载中间件,需要将其注释打开。

DOWNLOADER_MIDDLEWARES = {
    'pachong3.middlewares.Pachong3DownloaderMiddleware': 543, 
}

这里字典中的键就是中间件类的路径,后面的数字代表这个中间件的执行顺序。自定义的中间件会与 Scrapy 默认设置的 DOWNLOADER_MIDDLEWARES_BASE 里面的中间件合并。Scrapy 根据设置的执行顺序进行排序,从而得到启用中间件的有序列表,第一个中间件是最靠近引擎的,最后一个中间件是最靠近下载器的。关于如何分配中间件的顺序,请查看 DOWNLOADER_MIDDLEWARES_BASE 设置,然后根据想要放置中间件的位置选择一个值。由于每个中间件执行不同的动作,一个中间件可能依赖于之前(或者之后)执行的中间件,因此顺序是很重要的。

如果想禁止内置的(在 DOWNLOADER_MIDDLEWARES_BASE 中设置并默认启用的)中间件,必须在项目设置文件 DOWNLOADER_MIDDLEWARES 中定义该中间件,并将其值赋为 None。例如,要设置随机 User Agent,就要关闭 Scrapy 默认的 User Agent 中间件。

DOWNLOADER_MIDDLEWARES = {
'pachong3.middlewares.Pachong3DownloaderMiddleware': 543, 
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, } 

12.2.3 编写下载器中间件

每个所谓中间件组件其实就是一个 Python 类。如果要改变 request,就在这个类中定义一个 process_request 方法,当每个 request 通过下载中间件时,该方法将被调用。下一节将通过实例演示编写下载器中间件的具体方法。

也可以编写 process_response 方法和 process_exception 方法来处理 response 对象和异常,感兴趣的读者可以阅读 Scrapy 文档。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。