首页 > 解决方案 > 每个请求使用特定的 Scrapy 下载器中间件

问题描述

我使用 Crawlera 作为 IP 轮换服务来抓取一个特定的网站,该网站快速禁止我的 IP,但我只有十几个网站中的一个有这个问题。

由于可以为 Scrapy 项目注册多个中间件,我想知道是否可以定义下载器中间件以使用 PER REQUEST。

所以我只能将我的 Crawlera 配额用于有问题的网站,而不是用于我的所有请求。

标签: pythonscrapycrawlera

解决方案


一种可能的解决方案 - 使用custom_settings蜘蛛属性(并CrawleraMiddleware从项目设置中删除
(假设您每 1 个网站有 1 个蜘蛛并CrawleraMiddleware在项目设置中启用):

class ProblemSpider(scrapy.spider):

    custom_settings = {
        'DOWNLOADER_MIDDLEWARES' : {'scrapy_crawlera.CrawleraMiddleware': 610},
        'CRAWLERA_ENABLED' : True,
        'CRAWLERA_APIKEY' : '<API key>'}

    def parse(self, response):
....

在这种情况下CrawleraMiddleware,将仅在其custom_settings属性中定义的蜘蛛中使用。


推荐阅读