最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 爬虫框架 Scrapy入门基础之Spider Middleware

    正文概述    2020-02-03   287

    爬虫框架 Scrapy入门基础之Spider Middleware

    Spider Middleware 是 Scrapy 的 Spider 处理机制的一个钩子框架,我们可以在其中插入自定义功能,以处理发送到 Spider 进行处理的响应以及处理 Spider 生成的请求和项目。

    内置爬虫中间件

    和前文介绍过的 Downloader Middleware 一样, Scrapy 同样为我们内置了一部分的 Spider Middleware ,这些内置的 Spider Middleware 被保存在变量 SPIDER_MIDDLEWARES_BASE 中,具体如下:

    {
        'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
        'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
        'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
        'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
        'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
    }

    同样和 Downloader Middleware 一样的是, Spider Middleware 会被加入到 SPIDER_MIDDLEWARES 的设置中,该设置会和 Scrapy 中定义的 SPIDER_MIDDLEWARES_BASE 合并,根据数值的大小进行优先级排序,第一个 Middleware 是靠近引擎的,最后一个 Middleware 是靠近 Spider 的。

    自定义爬虫中间件

    Scrapy 内置的 Spider Middleware 只提供了一些基础的功能,我们如果需要扩展其功能,实现一个自定义的爬虫中间件,只需要实现以下某几个方法即可。

    核心方法如下:

    processspiderinput(response, spider)
    processspideroutput(response, result, spider)
    processspiderexception(response, exception, spider)
    processstartrequests(start_requests, spider)

    只需要实现其中一个方法就可以定义一个爬虫中间件。

    processspiderinput(response, spider)

    参数:

    response (response 对象)–正在处理的响应

    spider (spider 对象)–此响应预期用于的蜘蛛

    对于通过 Spider Middleware 并进入 Spider 进行处理的每个响应,都会调用此方法。

    processspiderinput() )应该返回 None 或引发异常。

    如果返回 None ,则 Scrapy 将继续处理此响应,并执行所有其他中间件,直到最终将响应交给蜘蛛进行处理。

    如果引发异常, Scrapy 不会费心调用任何其他蜘蛛中间件 processspiderinput() ,并且会在存在错误时调用请求 errback ,否则它将启动 processspiderexception() 链。 errback 的输出在另一个方向上链回,以供 processspideroutput() 处理,或者如果引发异常,则链接到 processspiderexception() 。

    processspideroutput(response, result, spider)

    参数:

    response ( response 对象)–从蜘蛛生成此输出的响应

    result (可迭代的 Request , dict 或 Item 对象)– spider 返回的结果

    spider ( spider 对象)–正在处理其结果的蜘蛛

    处理完响应后,将使用 Spider 从返回的结果中调用此方法。

    processspideroutput() 必须返回 Request , dict 或 Item 对象的可迭代对象。

    processspiderexception(response, exception, spider)

    参数:

    response ( response  对象)–引发异常时正在处理的响应

    exception (Exception对象)–引发的异常

    spider ( spider 对象)–引发异常的蜘蛛

    当 Spider 或 processspideroutput() 方法(来自先前的 Spider 中间件)引发异常时,将调用此方法。

    processspiderexception() 应该返回 None 或可迭代的 Request , dict 或 Item 对象。

    如果返回 None ,则 Scrapy 将继续处理此异常,并在以下中间件组件中执行任何其他 processspiderexception() ,直到没有剩余中间件组件且异常到达引擎为止(记录并丢弃该异常)。

    如果返回可迭代,则从下一个蜘蛛中间件开始, processspideroutput() 管道将启动,并且不会调用其他 processspiderexception() 。

    processstartrequests(start_requests, spider)

    参数:

    start_requests (可迭代的 Request )–启动请求

    spider ( spider 对象)–启动请求所属的蜘蛛

    此方法是由 Spider 的启动请求调用的,其工作原理与 processspideroutput() 方法类似,不同之处在于它没有关联的响应,并且仅返回请求(不返回项目)。

    它接收一个可迭代的(在 start_requests 参数中),并且必须返回另一个可迭代的 Request 对象。

    在实际使用过程中, Spider Middleware 的使用率并不如 Downloader Middleware 高,小编这里就不做示例了,在一些必要的情况下, Spider Middleware 可以用作一些数据处理。


    起源地下载网 » 爬虫框架 Scrapy入门基础之Spider Middleware

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元