zoukankan      html  css  js  c++  java
  • Scrapy学习-21-信号量

    scrapy信号量
    定义
      Scrapy使用信号来通知事情发生。您可以在您的Scrapy项目中捕捉一些信号(使用 extension)来完成额外的工作或添加额外的功能,扩展Scrapy。
      虽然信号提供了一些参数,不过处理函数不用接收所有的参数 - 信号分发机制(singal dispatching mechanism)仅仅提供处理器(handler)接受的参数。
      您可以通过 信号(Signals) API 来连接(或发送您自己的)信号
     
    可用信号
    engine_started      当Scrapy引擎启动爬取时发送该信号
    
    engine_stopped      当Scrapy引擎停止时发送该信号(例如,爬取结束)
    
    item_scraped        当item被爬取,并通过所有 Item Pipeline 后(没有被丢弃(dropped),发送该信号
    
    item_dropped        当item通过 Item Pipeline ,有些pipeline抛出 DropItem 异常,丢弃item时,该信号被发送
    
    spider_closed       当某个spider被关闭时,该信号被发送。该信号可以用来释放每个spider在 spider_opened 时占用的资源
    
    spider_opened       当spider开始爬取时发送该信号。该信号一般用来分配spider的资源,不过其也能做任何事
    
    spider_idle         当spider进入空闲(idle)状态时该信号被发送
    
    spider_error        当spider的回调函数产生错误时(例如,抛出异常),该信号被发送
    
    request_scheduled   当引擎调度一个 Request 对象用于下载时,该信号被发送
    
    request_dropped     当一个请求,由引擎安排在稍后被下载时,被调度程序拒绝
    
    response_received   当引擎从downloader获取到一个新的 Response 时发送该信号
    
    response_downloaded 当一个 HTTPResponse 被下载时,由downloader发送该信号
    信号量使用
    import scrapy
    from scrapy.xlib.pydispatch import dispatcher
    from scrapy import signals
    
    class JobboleSpider(scrapy.Spider):
        name = "jobbole"
        allowed_domains = ["blog.jobbole.com"]
        start_urls = ['http://blog.jobbole.com/all-posts/']
        handle_httpstatus_list = [404]
    
        def __init__(self, **kwargs):
            self.fail_urls = []
            dispatcher.connect(self.handle_spider_closed, signals.spider_closed)
    
        def handle_spider_closed(self, spider, reason):
            self.crawler.stats.set_value("failed_urls", ",".join(self.fail_urls))
    
        def parse(self, response):
            if response.status == 404:
                self.fail_urls.append(response.url)
                self.crawler.stats.inc_value("failed_url")
  • 相关阅读:
    2021冬季学期有感与评价
    Scala变量和数据类型
    Scala运算符
    pytorch基本使用
    Vue组件
    Scala函数式编程
    Python中的运算符
    Scala流程控制
    Scala环境搭建
    用于测试GRPC服务的UI工具BloomRpc
  • 原文地址:https://www.cnblogs.com/cq146637/p/9077558.html
Copyright © 2011-2022 走看看