三十四 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解
信号一般使用信号分发器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信号详解相关推荐
- 三十五 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点
1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题 转载于:https://www.cnblogs.com/meng-wei-zhi/p/8182813.html
- Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站
Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...
- 二十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别...
第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://github.com/muchrooms/zheye 注意:此程序依赖以下模块包 Keras==2.0.1 Pillow= ...
- 第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理...
第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-深度优先与广度优先原理 网站树形结构 深度优先 是从左到右深度进行爬取的,以深度为准则从左到右的执行(递归方式实现)Scrapy默认 ...
- 第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念...
第三百六十节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)的基本概念 elasticsearch的基本概念 1.集群:一个或者多个节点组织在一起 2.节点 ...
- 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图...
第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...
- 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查...
第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...
- 三十七 Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中...
Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如 ...
- 学习python-day02-24---转自Python分布式爬虫打造搜索引擎Scrapy精讲
第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...
最新文章
- 浅谈IO及不同的理解
- 在Linux上进行内核参数调整
- pytorch教程龙曲良36-40
- HDU4311(排序+二分)
- eclipse maven项目 maven build 提示jdk版本不对
- 马斯克翻跟头机器人_马斯克又搞事情 用VR训练机器人模仿人类动作
- Java Persistence with MyBatis 3(中文版) 第一章 MyBatis入门
- 一次接口超时排查,花费了我两个星期。。
- 全网首发:org.xml.sax.SAXNotRecognizedException: unrecognized features nonvalidating/load-external-dtd
- 规划设计计算机配置,平面设计电脑配置
- win8优化(win8优化大师设置开始界面)
- CSS中文字体如宋体/微软雅黑的英文名称写法
- android 夏令时,android 时间处理(夏令时)
- JavaScript之E-mail 地址格式验证
- Chromium Portable实时更新github下载 最新版本Chromium Portable(谷歌浏览器) 下载
- Java 二维码及条形码处理
- Lightweight Augmented Graph Network Hashing for Scalable Image Retrieval
- 关于图像模式识别的几种分类方法概述
- 群晖服务器216j增加硬盘,群晖(Synology)NAS 升级硬盘扩展空间小记
- TensorFlow学习日记之tflearn
热门文章
- git仓库的推送问题
- linux ptrace 内核源码分析,linux 3.5.4 ptrace源码分析分析(系列一)
- oracle精确匹配时间,Oracle时间精确到时、分、秒处理方法
- html实现拖拽排序,简单的jquery拖拽排序效果实现代码
- docker build 变量_DockerFile 设置环境变量
- vue 方法获取返回值_vue.js - vuex异步提交,怎么获取返回数据
- 荣耀鸿蒙系统开机动画,荣耀赵明:鸿蒙系统首发设备欲屏蔽开机广告
- NXP KW38开发杂记(一)MCUXpress 运行进入NMI_Handler
- openMVG跑自定义数据出错
- linux怎么进去vi编辑器,red hat enterprise linux开机怎么进入vi编辑器界面?