Scrapy框架(二):Downloader Middleware的用法

Downloader Middleware即下载中间件,它是处于Scrapy的Request和Response之间的处理模块。

Scheduler从队列中拿出一个Request发送给Downloader执行下载,这个过程会经过Downloader Middleware的处理。

另外,当Downloader将Request下载完成得到Response返回给Spider时会再次经过Downloader Middleware处理。

修改User-Agent、处理重定向、设置代理,失败重试、设置Cookies等功能都需要借助它来实现。

1.使用说明

Scrapy其实已经提供了许多Downloader Middleware,比如负责失败重试,自动重定向等功能的Middleware,它们被DOWNLOADER_MIDDLEWARES_BASE变量所定义。

数字越小越靠近Scrapy引擎,数字越大越靠近Downloader,数字越小的Downloader Middleware会被优先调用。

2.核心方法

process_request(request,spider)

process_response(request,response,spider)

process_exception(request,exception,spider)

实战练习:设置请求的user_agent,修改响应的返送码

第一步:

在middlewares.py里面添加一个RandomUserAgentMiddleware的类,如下所示

class RandomUserAgentMiddleware():
    def __init__(self):
        self.user_agents = [
            'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)',
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
            'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1'
        ]
    def process_request(self,request,spider):
        request.headers['User-Agent'] = random.choice(self.user_agents)

第二步:

在settings.py中,将DOWNLOADER_MIDDLEWARES取消注释,并设置成如下内容:

DOWNLOADER_MIDDLEWARES = {
    'scrapydownloadertest.middlewares.RandomUserAgentMiddleware': 543,
}

第三步:

在RandomUserAgentMiddleware添加如下代码:

    def process_response(self,request,response,spider):
        response.status = 201
        return response

猜你喜欢

转载自blog.csdn.net/Mai_Dreizehn/article/details/86524665