Scrapy基础之中间件(一)

中间件Middleware

  在Scrapy框架中,使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫。

  在Scrapy中有两种类型:下载器中间件(Downloader Middleware)爬虫中间件(Spider Middleware)

官方文档:https://docs.scrapy.org/en/latest/
中文文档:https://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html

一、下载器中间件(Downloader Middleware)

  下载器中间件是介于Scrapy的request/response处理的钩子框架。 是用于全局修改Scrapy request和response的一个轻量、底层的系统。

主要用法:更换代理更换Cookie随机UA自动重试

激活中间件:在settings中加入到 DOWNLOADER_MIDDLEWARES设置中,该设置是一个字典。 键为中间件类型的路径,值为其中间件的顺序。值数值越小越先执行。


自定义下载器中间件

  • process_request(request, spider):
      每当scrapy进行一个request请求时,这个方法被调用.

  • process_response(request, response, spider):
      process_request() 必须返回以下之一: 返回一个 Response 对象、 返回一个 Request 对象或raise一个 IgnoreRequest 异常。

      如果其返回一个 Response (可以与传入的response相同,也可以是全新的对象), 该response会被在链中的其他中间件的 process_response() 方法处理。

      如果其返回一个 Request 对象,则中间件链停止, 返回的request会被重新调度下载。处理类似于 process_request() 返回request所做的那样。

      如果其抛出一个 IgnoreRequest 异常,则调用request的errback(Request.errback)。 如果没有代码处理抛出的异常,则该异常被忽略且不记录(不同于其他异常那样)。

  • process_exception(request, exception, spider):
      当下载处理器(download handler)或 process_request() (下载中间件)抛出异常(包括 IgnoreRequest 异常)时, Scrapy调用 process_exception() 。

二、爬虫中间件(Spider Middleware)

爬虫中间件的用法与下载器中间件非常相似,只是他们的作用对象不同。下载器中间件的作用对象是请求request和响应response,爬虫中间件的作用对象是爬虫。

核心方法有四个:

  • process_spider_input(response,spider):

  当爬虫里面的某一个回调函数parse()被调用之前,调用process_spider_input()方法;

  • process_spider_output(response,result,spider):

  当运行到yield scrapy.Request() 或者 yield item的时候,被调用;

  • process_start_requests(start_requests,spider):

  当运行到start_requests()的时候,被调用;

  • process_spider_exception(response,exception,spider):

  当爬虫本身的代码出现了Exception的时候,爬虫中间件的process_spider_exception()方法被调用。

爬虫中间件的使用频率不如下载中间件,在必要的情况下他可以用来方便数据的处理和爬虫本身异常的处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值