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")