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")
  • 相关阅读:
    下载安装Apacheweb
    灵魂拷问第4篇:说一说从输入URL到页面呈现发生了什么?——解析算法篇
    灵魂拷问第3篇:说一说从输入URL到页面呈现发生了什么?——网络篇
    灵魂拷问第2篇:能不能说一说浏览器的本地存储?各自优劣如何?
    灵魂拷问第1篇:能不能说一说浏览器缓存?
    为什么是三次握手和四次挥手?
    http协商缓存VS强缓存
    版本管理之Git神器
    JavaScript 运行原理
    「动画演示」:变量提升别有一翻风味
  • 原文地址:https://www.cnblogs.com/cq146637/p/9077558.html
Copyright © 2011-2022 走看看