• Python3 Scrapy爬虫框架-Spider Middleware


    • Spider Middleware:介于Scrapy的Spider处理机制的钩子框架
      • 在Downloader生成的Response发送给Spider之前对Response进行处理
      • 在Spider生成的Request发送给Schedule之前对Request进行处理
      • 在Spider生成Item发送给Item Pipeline之前对Item进行处理
    • Scrapy其实已经提供了许多Spider Middleware,它们被SPIDER_MIDDLEWARES_BASE这个变量所定义,自定义Spider Middleware首先加入到SPIDER_MIDDLEWARES设置中
    1 SPIDER_MIDDLEWARES_BASE{
    2     'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
    3     'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
    4     'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
    5     'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
    6     'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
    7 }
    • 核心方法
      • process_spider_input(response, spider):当Response被Spider Middleware处理时,process_spider_input()方法被调用
        • response:Response对象,即被处理的Response
        • spider:Spider对象,即该Response对应的Spider
        • 返回None:Scrapy将会继续处理该Response,调用所有其他的Spider Middleware,直到Spider处理该Response
        • 抛出一个异常:Scrapy将不会调用任何其他Spider Middleware的process_spider_input()方法,而调用Request的errback()方法;errback的输出将会被重新输入到中间件中,使用process_spider_output()方法来处理,当其抛出异常时则调用process_spider_exception()来处理
      • process_spider_output(response, result, spider):当Spider处理Response返回结果时,process_spider_output()被调用
        • response:是Response对象,即生成该输出的Response
        • result:包含Request或Item对象的可迭代对象,即Spider返回的结果
        • spider:是Spider对象,即其结果对应的Spider
        • 返回包含Request或Item对象的可迭代对象
      • process_spider_exception(response, exception, spider):当Spider或Spider Middleware的process_spider_input()方法抛出异常时,process_spider_exception()方法被调用
        • response:Response对象,即异常被抛出时被处理的Response
        • exception:Exception对象,即被抛出的异常
        • spider:Spider对象,即抛出该异常的Spider
        • 返回None:Scrapy将继续处理该异常,调用其他Spider Middleware中的process_spider_exception()方法,直到所有Spider Middleware都被调用
        • 返回一个可迭代对象:则其他Spider Middleware的process_spider_output()方法被调用,其他的process_spider_exception()不会被调用
      • process_start_requests(start_requests, spider):该方法以Spider启动的Request为参数被调用,执行的过程类似于process_spider_output(),只不过它没有相关联的Response
        • start_requests:包含Request的可迭代对象,即Start Requests
        • spider:Spider对象,即Start Requests所属的Spider
        • 必须返回另一个包含Request对象的可迭代对象
  • 相关阅读:
    linux下使用g++编译cpp工程
    c++字符串互相转换
    MFC双缓冲绘图实例
    Python进阶之迭代器和生成器
    <大话设计模式>笔记
    配置程序成为Linux服务
    Django的设计模式
    Django ModelForm修改默认的控件属性
    Android活动生命周期
    MySQL必知必会笔记
  • 原文地址:https://www.cnblogs.com/My-Sun-Shine/p/13568269.html
Copyright © 2020-2023  润新知