信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行一个函数

dispatcher.connect()信号分发器,第一个参数信号触发函数,第二个参数是触发信号,

以下是各种信号

signals.engine_started当Scrapy引擎启动爬取时发送该信号。该信号支持返回deferreds。
signals.engine_stopped当Scrapy引擎停止时发送该信号(例如,爬取结束)。该信号支持返回deferreds。

signals.item_scraped(item, response, spider)当item被爬取,并通过所有 Item Pipeline 后(没有被丢弃(dropped),发送该信号。该信号支持返回deferreds。
  参数:
  item (Item 对象) – 爬取到的item
  spider (Spider 对象) – 爬取item的spider
  response (Response 对象) – 提取item的response

signals.item_dropped(item, exception, spider)当item通过 Item Pipeline ,有些pipeline抛出 DropItem 异常,丢弃item时,该信号被发送。该信号支持返回deferreds。
  参数:
  item (Item 对象) – Item Pipeline 丢弃的item
  spider (Spider 对象) – 爬取item的spider
  exception (DropItem 异常) – 导致item被丢弃的异常(必须是 DropItem 的子类)

signals.spider_closed(spider, reason)当某个spider被关闭时,该信号被发送。该信号可以用来释放每个spider在 spider_opened 时占用的资源。该信号支持返回deferreds。
  参数:
  spider (Spider 对象) – 关闭的spider
  reason (str) – 描述spider被关闭的原因的字符串。如果spider是由于完成爬取而被关闭,则其为 'finished' 。否则,如果spider是被引擎的 close_spider 方法所关闭,则其为调用该方法时传入的   reason 参数(默认为 'cancelled')。如果引擎被关闭(例如, 输入Ctrl-C),则其为 'shutdown' 。

signals.spider_opened(spider)当spider开始爬取时发送该信号。该信号一般用来分配spider的资源,不过其也能做任何事。该信号支持返回deferreds。
  参数: spider (Spider 对象) – 开启的spider

signals.spider_idle(spider)当spider进入空闲(idle)状态时该信号被发送。空闲意味着:
  requests正在等待被下载
  requests被调度
  items正在item pipeline中被处理
当该信号的所有处理器(handler)被调用后,如果spider仍然保持空闲状态, 引擎将会关闭该spider。当spider被关闭后, spider_closed 信号将被发送。您可以,比如,在 spider_idle 处理器中调度某些请求来避免spider被关闭。该信号 不支持 返回deferreds。
  参数: spider (Spider 对象) – 空闲的spider

signals.spider_error(failure, response, spider)当spider的回调函数产生错误时(例如,抛出异常),该信号被发送
  参数:
  failure (Failure 对象) – 以Twisted Failure 对象抛出的异常
  response (Response 对象) – 当异常被抛出时被处理的response
  spider (Spider 对象) – 抛出异常的spider

signals.request_scheduled(request, spider)当引擎调度一个 Request 对象用于下载时,该信号被发送。该信号 不支持 返回deferreds。
  参数:
  request (Request 对象) – 到达调度器的request
  spider (Spider 对象) – 产生该request的spider

signals.response_received(response, request, spider)当引擎从downloader获取到一个新的 Response 时发送该信号。该信号 不支持 返回deferreds。
  参数:
  response (Response 对象) – 接收到的response
  request (Request 对象) – 生成response的request
  spider (Spider 对象) – response所对应的spider

signals.response_downloaded(response, request, spider)当一个 HTTPResponse 被下载时,由downloader发送该信号。该信号 不支持 返回deferreds。
  参数:
  response (Response 对象) – 下载的response
  request (Request 对象) – 生成response的request
  spider (Spider 对象) – response所对应的spider

我们以signals.spider_closed(spider, reason)信号举例其他信号同理:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest
from scrapy.xlib.pydispatch import dispatcher   # 信号分发器
from scrapy import signals                      # 信号class PachSpider(scrapy.Spider):                            #定义爬虫类,必须继承scrapy.Spidername = 'pach'                                           #设置爬虫名称allowed_domains = ['www.dict.cn']                       #爬取域名def start_requests(self):    #起始url函数,会替换start_urlsreturn [Request(url='http://www.dict.cn/9999998888',callback=self.parse)]# 利用数据收集器,收集所有404的url以及,404页面数量handle_httpstatus_list = [404]                                      # 设置不过滤404def __init__(self):self.fail_urls = []                                             # 创建一个变量来储存404URLdispatcher.connect(self.spider_closed, signals.spider_closed)   # dispatcher.connect()信号分发器,第一个参数信号触发函数,第二个参数是触发信号,signals.spider_closed是爬虫结束信号def spider_closed(self, spider, reason):  # 信号触发函数print('爬虫结束 停止爬虫')print(self.fail_urls)  # 打印404URL列表print(self.crawler.stats.get_value('failed_url'))  # 打印数据收集值def parse(self, response):                                          # 回调函数if response.status == 404:                                      # 判断返回状态码如果是404self.fail_urls.append(response.url)                         # 将URL追加到列表self.crawler.stats.inc_value('failed_url')                  # 设置一个数据收集,值为自增,每执行一次自增1else:title = response.css('title::text').extract()print(title)

转载于:https://www.cnblogs.com/meng-wei-zhi/p/8182807.html

三十四 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解相关推荐

  1. 三十五 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题 转载于:https://www.cnblogs.com/meng-wei-zhi/p/8182813.html

  2. Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...

  3. 二十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别...

    第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://github.com/muchrooms/zheye 注意:此程序依赖以下模块包 Keras==2.0.1 Pillow= ...

  4. 第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理...

    第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-深度优先与广度优先原理 网站树形结构 深度优先 是从左到右深度进行爬取的,以深度为准则从左到右的执行(递归方式实现)Scrapy默认 ...

  5. 第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念...

    第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)的基本概念 elasticsearch的基本概念 1.集群:一个或者多个节点组织在一起 2.节点 ...

  6. 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图...

    第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...

  7. 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查...

    第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...

  8. 三十七 Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中...

    Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如 ...

  9. 学习python-day02-24---转自Python分布式爬虫打造搜索引擎Scrapy精讲

    第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...

最新文章

  1. 浅谈IO及不同的理解
  2. 在Linux上进行内核参数调整
  3. pytorch教程龙曲良36-40
  4. HDU4311(排序+二分)
  5. eclipse maven项目 maven build 提示jdk版本不对
  6. 马斯克翻跟头机器人_马斯克又搞事情 用VR训练机器人模仿人类动作
  7. Java Persistence with MyBatis 3(中文版) 第一章 MyBatis入门
  8. 一次接口超时排查,花费了我两个星期。。
  9. 全网首发:org.xml.sax.SAXNotRecognizedException: unrecognized features nonvalidating/load-external-dtd
  10. 规划设计计算机配置,平面设计电脑配置
  11. win8优化(win8优化大师设置开始界面)
  12. CSS中文字体如宋体/微软雅黑的英文名称写法
  13. android 夏令时,android 时间处理(夏令时)
  14. JavaScript之E-mail 地址格式验证
  15. Chromium Portable实时更新github下载 最新版本Chromium Portable(谷歌浏览器) 下载
  16. Java 二维码及条形码处理
  17. Lightweight Augmented Graph Network Hashing for Scalable Image Retrieval
  18. 关于图像模式识别的几种分类方法概述
  19. 群晖服务器216j增加硬盘,群晖(Synology)NAS 升级硬盘扩展空间小记
  20. TensorFlow学习日记之tflearn

热门文章

  1. git仓库的推送问题
  2. linux ptrace 内核源码分析,linux 3.5.4 ptrace源码分析分析(系列一)
  3. oracle精确匹配时间,Oracle时间精确到时、分、秒处理方法
  4. html实现拖拽排序,简单的jquery拖拽排序效果实现代码
  5. docker build 变量_DockerFile 设置环境变量
  6. vue 方法获取返回值_vue.js - vuex异步提交,怎么获取返回数据
  7. 荣耀鸿蒙系统开机动画,荣耀赵明:鸿蒙系统首发设备欲屏蔽开机广告
  8. NXP KW38开发杂记(一)MCUXpress 运行进入NMI_Handler
  9. openMVG跑自定义数据出错
  10. linux怎么进去vi编辑器,red hat enterprise linux开机怎么进入vi编辑器界面?