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")
相关文章
相关标签/搜索