scrapy信号量
定义
  Scrapy使用信号来通知事情发生。您可以在您的Scrapy项目中捕捉一些信号(使用 extension)来完成额外的工作或添加额外的功能,扩展Scrapy。
  虽然信号提供了一些参数,不过处理函数不用接收所有的参数 - 信号分发机制(singal dispatching mechanism)仅仅提供处理器(handler)接受的参数。
  您可以通过 信号(Signals) API 来连接(或发送您自己的)信号
 
可用信号
  1. engine_started Scrapy引擎启动爬取时发送该信号
  2.  
  3. engine_stopped Scrapy引擎停止时发送该信号(例如,爬取结束)
  4.  
  5. item_scraped item被爬取,并通过所有 Item Pipeline 后(没有被丢弃(dropped),发送该信号
  6.  
  7. item_dropped item通过 Item Pipeline ,有些pipeline抛出 DropItem 异常,丢弃item时,该信号被发送
  8.  
  9. spider_closed 当某个spider被关闭时,该信号被发送。该信号可以用来释放每个spider spider_opened 时占用的资源
  10.  
  11. spider_opened spider开始爬取时发送该信号。该信号一般用来分配spider的资源,不过其也能做任何事
  12.  
  13. spider_idle spider进入空闲(idle)状态时该信号被发送
  14.  
  15. spider_error spider的回调函数产生错误时(例如,抛出异常),该信号被发送
  16.  
  17. request_scheduled 当引擎调度一个 Request 对象用于下载时,该信号被发送
  18.  
  19. request_dropped 当一个请求,由引擎安排在稍后被下载时,被调度程序拒绝
  20.  
  21. response_received 当引擎从downloader获取到一个新的 Response 时发送该信号
  22.  
  23. response_downloaded 当一个 HTTPResponse 被下载时,由downloader发送该信号
信号量使用
  1. import scrapy
  2. from scrapy.xlib.pydispatch import dispatcher
  3. from scrapy import signals
  4.  
  5. class JobboleSpider(scrapy.Spider):
  6. name = "jobbole"
  7. allowed_domains = ["blog.jobbole.com"]
  8. start_urls = ['http://blog.jobbole.com/all-posts/']
  9. handle_httpstatus_list = [404]
  10.  
  11. def __init__(self, **kwargs):
  12. self.fail_urls = []
  13. dispatcher.connect(self.handle_spider_closed, signals.spider_closed)
  14.  
  15. def handle_spider_closed(self, spider, reason):
  16. self.crawler.stats.set_value("failed_urls", ",".join(self.fail_urls))
  17.  
  18. def parse(self, response):
  19. if response.status == 404:
  20. self.fail_urls.append(response.url)
  21. self.crawler.stats.inc_value("failed_url")

Scrapy学习-21-信号量的更多相关文章

  1. Scrapy学习篇(十)之下载器中间件(Downloader Middleware)

    下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 激活Downloader Midd ...

  2. Scrapy学习篇(七)之Item Pipeline

    在之前的Scrapy学习篇(四)之数据的存储的章节中,我们其实已经使用了Item Pipeline,那一章节主要的目的是形成一个笼统的认识,知道scrapy能干些什么,但是,为了形成一个更加全面的体系 ...

  3. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)——Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为“demo” scrapy startproject demo cd demo 稍等片刻后,Scr ...

  4. Scrapy:学习笔记(1)——XPath

    Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...

  5. scrapy学习(完全版)

    scrapy1.6中文文档 scrapy1.6中文文档 scrapy中文文档 Scrapy框架 下载页面 解析页面 并发 深度 安装 scrapy学习教程 如果安装了anconda,可以在anacon ...

  6. Asp.NetCore源码学习[2-1]:日志

    Asp.NetCore源码学习[2-1]:日志 在一个系统中,日志是不可或缺的部分.对于.net而言有许多成熟的日志框架,包括Log4Net.NLog.Serilog 等等.你可以在系统中直接使用这些 ...

  7. python爬虫之Scrapy学习

    在爬虫的路上,学习scrapy是一个必不可少的环节.也许有好多朋友此时此刻也正在接触并学习scrapy,那么很好,我们一起学习.开始接触scrapy的朋友可能会有些疑惑,毕竟是一个框架,上来不知从何学 ...

  8. Scrapy学习篇(十一)之设置随机User-Agent

    大多数情况下,网站都会根据我们的请求头信息来区分你是不是一个爬虫程序,如果一旦识别出这是一个爬虫程序,很容易就会拒绝我们的请求,因此我们需要给我们的爬虫手动添加请求头信息,来模拟浏览器的行为,但是当我 ...

  9. 转载一个不错的Scrapy学习博客笔记

    背景: 最近在学习网络爬虫Scrapy,官网是 http://scrapy.org 官方描述:Scrapy is a fast high-level screen scraping and web c ...

  10. Scrapy学习篇(九)之文件与图片下载

    Media Pipeline Scrapy为下载item中包含的文件(比如在爬取到产品时,同时也想保存对应的图片)提供了一个可重用的 item pipelines . 这些pipeline有些共同的方 ...

随机推荐

  1. 删除项目开发中的.pyc文件

    在实际开发中python会自动生成很多pyc文件,但是这些pyc文件是不需要我们追踪的,删除了对项目也没有影响,下面是删除pyc文件的方法. Linux或Mac系统 find /tmp -name & ...

  2. day14之模块

    一.列表生成式与生成表达式 1.列表生成式(数据量小) 要求:在列表内造100个元素 示例: l=[] for i in range(100): l.append('egg%s'%i) print(l ...

  3. stm32-IIC读写EEPROM—时序说明

    I2C 通讯协议:(Inter-Integrated Circuit)是由Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART.CAN  等通讯协议的外部收发设备,现在 ...

  4. LightOJ 1141 Number Transformation

    Number Transformation In this problem, you are given an integer number s. You can transform any inte ...

  5. 【转】Python操作MongoDB

    Python 操作 MongoDB   请给作者点赞--> 原文链接 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面 ...

  6. HTML插入文件链接(如音乐,照片)

    html中插入音频.H5的标签 src为本地 <audio controls="> <source src="韩庚 - I Don't Give A 屑.mp3& ...

  7. mysql插入、修改、删除

    联合查询: union:合并.联合,将多次查询结果合并成一个结果 语法: 查询语句1: union[all] 查询语句2: union [all] ... 意义 1.将一条比较复杂的查询语句可拆分成多 ...

  8. 03017_ajax

    1.Ajax概述 (1)什么是同步,什么是异步? ①同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态: ②异步现象:客户端发送请求到服务器端,无论服务器是否返回响应, ...

  9. Ping过程&ICMP

    1.ICMP(Internet控制消息协议) ICMP=Internet Control Message Protocol 它是TCP/IP协议族的一个子协议 作用:用于在IP主机.路由之间传递控制消 ...

  10. mysql初始化失败的问题

    首先:my.ini 配置文件中 路径需要改成自己电脑mysql解压的路径. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...