Scrapy – 信号
Scrapy广泛使用信号来通知某些事件何时发生。你可以在你的垃圾项目中捕捉到这些信号(使用 extension 例如)执行其他任务或扩展scrapy以添加框外未提供的功能。
即使信号提供了几个参数,捕获它们的处理程序也不需要接受所有参数——信号调度机制只传递处理程序接收的参数。
您可以通过 信号API .
下面是一个简单的示例,演示如何捕捉信号并执行某些操作:
from scrapy import signals from scrapy import Spider class DmozSpider(Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/", ] @classmethod def from_crawler(cls, crawler, *args, **kwargs): spider = super(DmozSpider, cls).from_crawler(crawler, *args, **kwargs) crawler.signals.connect(spider.spider_closed, signal=signals.spider_closed) return spider def spider_closed(self, spider): spider.logger.info('Spider closed: %s', spider.name) def parse(self, response): pass
延迟信号处理程序¶
一些信号支持返回 Deferred 对象,允许您运行不阻塞Scrapy的异步代码。如果信号处理程序返回 Deferred ,小淘气等着呢 Deferred 开火。
举个例子:
class SignalSpider(scrapy.Spider): name = 'signals' start_urls = ['http://quotes.toscrape.com/page/1/'] @classmethod def from_crawler(cls, crawler, *args, **kwargs): spider = super(SignalSpider, cls).from_crawler(crawler, *args, **kwargs) crawler.signals.connect(spider.item_scraped, signal=signals.item_scraped) return spider def item_scraped(self, item): # Send the scraped item to the server d = treq.post( 'http://example.com/post', json.dumps(item).encode('ascii'), headers={b'Content-Type': [b'application/json']} ) # The next item will be scraped only after # deferred (d) is fired return d def parse(self, response): for quote in response.css('div.quote'): yield { 'text': quote.css('span.text::text').get(), 'author': quote.css('small.author::text').get(), 'tags': quote.css('div.tags a.tag::text').getall(), }
见 内置信号参考 下面要知道哪些信号支持 Deferred .
内置信号参考¶
这是一个零碎的内置信号列表及其含义。
发动机信号¶
engine_started¶
-
scrapy.signals.engine_started()¶ -
当废引擎开始爬行时发送。
此信号支持从其处理程序返回延迟。
注解
此信号可能被触发 之后 这个 spider_opened 信号,取决于蜘蛛是如何启动的。所以 不要 依靠这个信号 spider_opened .
engine_stopped¶
-
scrapy.signals.engine_stopped()¶ -
在报废引擎停止时发送(例如,当爬行过程完成时)。
此信号支持从其处理程序返回延迟。
项目信号¶
注解
最大值时 CONCURRENT_ITEMS 项是并行处理的,许多延迟是使用 DeferredList . 因此,下一批将等待 DeferredList 激发,然后为下一批报废的项运行相应的项信号处理程序。
item_scraped¶
-
scrapy.signals.item_scraped(item, response, spider)¶ -
当一个项目被爬取时发送,当它通过所有 项目管道 阶段(不下降)。
此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 刮掉的东西
-
spider (
Spiderobject) -- 爬取项目的蜘蛛 -
response (
Responseobject) -- 从项目被爬取的地方得到的响应
-
item_dropped¶
-
scrapy.signals.item_dropped(item, response, exception, spider)¶ -
从中删除项目后发送 项目管道 当某个阶段
DropItem例外。此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 从中删除的项 项目管道
-
spider (
Spiderobject) -- 爬取项目的蜘蛛 -
response (
Responseobject) -- 从中删除项的响应 -
exception (
DropItemexception) -- 例外情况(必须是DropItem子类)导致该项被删除
-
item_error¶
-
scrapy.signals.item_error(item, response, spider, failure)¶ -
发送时 项目管道 生成错误(即引发异常),除非
DropItem例外。此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 中导致错误的项 项目管道
-
response (
Responseobject) -- 引发异常时正在处理的响应 -
spider (
Spiderobject) -- 引发异常的蜘蛛 -
failure (twisted.python.failure.Failure) -- 引发的异常
-
蜘蛛信号¶
spider_closed¶
-
scrapy.signals.spider_closed(spider, reason)¶ -
在蜘蛛关闭后发送。这可用于释放在上保留的每个蜘蛛资源
spider_opened.此信号支持从其处理程序返回延迟。
- 参数
-
-
spider (
Spiderobject) -- 已关闭的蜘蛛 -
reason (str) -- 描述蜘蛛关闭原因的字符串。如果它是因为蜘蛛完成了爬取而关闭的,原因是
'finished'. 否则,如果通过调用close_spider引擎方法,则原因是reason该方法的参数(默认为'cancelled')如果发动机停机(例如,按ctrl-c停止发动机),原因将是'shutdown'.
-
spider_opened¶
-
scrapy.signals.spider_opened(spider)¶ -
在蜘蛛被打开爬行后发送。这通常用于为每个蜘蛛保留资源,但可用于打开蜘蛛时需要执行的任何任务。
此信号支持从其处理程序返回延迟。
- 参数
-
spider (
Spiderobject) -- 已经打开的蜘蛛
spider_idle¶
-
scrapy.signals.spider_idle(spider)¶ -
当蜘蛛空闲时发送,这意味着蜘蛛没有更多:
-
等待下载的请求
-
计划的请求
-
正在项管道中处理的项
如果此信号的所有处理程序完成后空闲状态仍然存在,则引擎将开始关闭蜘蛛。蜘蛛完成闭合后,
spider_closed发送信号。你可以举起
DontCloseSpider防止蜘蛛关闭的异常。此信号不支持从其处理程序返回延迟。
- 参数
-
spider (
Spiderobject) -- 空转的蜘蛛
-
注解
在您的 spider_idle 处理程序 not 确保它可以防止蜘蛛被关闭,尽管有时可以。这是因为如果计划程序拒绝了所有计划的请求(例如,由于重复而被筛选),那么spider可能仍然处于空闲状态。
spider_error¶
-
scrapy.signals.spider_error(failure, response, spider)¶ -
当spider回调生成错误(即引发异常)时发送。
此信号不支持从其处理程序返回延迟。
- 参数
-
-
failure (twisted.python.failure.Failure) -- 引发的异常
-
response (
Responseobject) -- 引发异常时正在处理的响应 -
spider (
Spiderobject) -- 引发异常的蜘蛛
-
请求信号¶
request_scheduled¶
-
scrapy.signals.request_scheduled(request, spider)¶ -
在发动机排程A时发送
Request,稍后下载。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达调度程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_dropped¶
-
scrapy.signals.request_dropped(request, spider)¶ -
发送时
Request由引擎计划稍后下载的,被调度程序拒绝。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达调度程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_reached_downloader¶
-
scrapy.signals.request_reached_downloader(request, spider)¶ -
发送时
Request已到达下载程序。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达下载程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_left_downloader¶
-
scrapy.signals.request_left_downloader(request, spider)¶ -
2.0 新版功能.
发送时
Request离开下载程序,即使在失败的情况下。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达下载程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
bytes_received¶
2.2 新版功能.
-
scrapy.signals.bytes_received(data, request, spider)¶ -
当收到特定请求的一组字节时,由http1.1和S3下载处理程序发送。对于同一请求,此信号可能被多次触发,每次都有部分数据。例如,一个25kb响应的可能场景是两个信号用10kb的数据触发,最后一个信号用5kb的数据触发。
此信号不支持从其处理程序返回延迟。
- 参数
-
-
data (
bytesobject) -- 下载处理程序接收的数据 -
request (
Requestobject) -- 生成下载的请求 -
spider (
Spiderobject) -- 与响应关联的蜘蛛
-
注解
此信号的处理程序可以通过引发 StopDownload 例外情况。请参考 停止下载响应 主题以获取更多信息和示例。
响应信号¶
response_received¶
-
scrapy.signals.response_received(response, request, spider)¶ -
当发动机接收到新的
Response从下载程序。此信号不支持从其处理程序返回延迟。
- 参数
-
-
response (
Responseobject) -- 收到的响应 -
request (
Requestobject) -- 生成响应的请求 -
spider (
Spiderobject) -- 响应所针对的蜘蛛
-
注解
这个 request 参数可能不包含到达下载程序的原始请求,如果 下载器中间件 修改 Response 对象并设置特定的 request 属性。
response_downloaded¶
-
scrapy.signals.response_downloaded(response, request, spider)¶ -
由下载者在
HTTPResponse是下载的。此信号不支持从其处理程序返回延迟。
- 参数
-
-
response (
Responseobject) -- 已下载响应 -
request (
Requestobject) -- 生成响应的请求 -
spider (
Spiderobject) -- 响应所针对的蜘蛛
-
延迟信号处理程序¶
一些信号支持返回 Deferred 对象,允许您运行不阻塞Scrapy的异步代码。如果信号处理程序返回 Deferred ,小淘气等着呢 Deferred 开火。
举个例子:
class SignalSpider(scrapy.Spider): name = 'signals' start_urls = ['http://quotes.toscrape.com/page/1/'] @classmethod def from_crawler(cls, crawler, *args, **kwargs): spider = super(SignalSpider, cls).from_crawler(crawler, *args, **kwargs) crawler.signals.connect(spider.item_scraped, signal=signals.item_scraped) return spider def item_scraped(self, item): # Send the scraped item to the server d = treq.post( 'http://example.com/post', json.dumps(item).encode('ascii'), headers={b'Content-Type': [b'application/json']} ) # The next item will be scraped only after # deferred (d) is fired return d def parse(self, response): for quote in response.css('div.quote'): yield { 'text': quote.css('span.text::text').get(), 'author': quote.css('small.author::text').get(), 'tags': quote.css('div.tags a.tag::text').getall(), }
见 内置信号参考 下面要知道哪些信号支持 Deferred .
内置信号参考¶
这是一个零碎的内置信号列表及其含义。
发动机信号¶
engine_started¶
-
scrapy.signals.engine_started()¶ -
当废引擎开始爬行时发送。
此信号支持从其处理程序返回延迟。
注解
此信号可能被触发 之后 这个 spider_opened 信号,取决于蜘蛛是如何启动的。所以 不要 依靠这个信号 spider_opened .
engine_stopped¶
-
scrapy.signals.engine_stopped()¶ -
在报废引擎停止时发送(例如,当爬行过程完成时)。
此信号支持从其处理程序返回延迟。
项目信号¶
注解
最大值时 CONCURRENT_ITEMS 项是并行处理的,许多延迟是使用 DeferredList . 因此,下一批将等待 DeferredList 激发,然后为下一批报废的项运行相应的项信号处理程序。
item_scraped¶
-
scrapy.signals.item_scraped(item, response, spider)¶ -
当一个项目被爬取时发送,当它通过所有 项目管道 阶段(不下降)。
此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 刮掉的东西
-
spider (
Spiderobject) -- 爬取项目的蜘蛛 -
response (
Responseobject) -- 从项目被爬取的地方得到的响应
-
item_dropped¶
-
scrapy.signals.item_dropped(item, response, exception, spider)¶ -
从中删除项目后发送 项目管道 当某个阶段
DropItem例外。此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 从中删除的项 项目管道
-
spider (
Spiderobject) -- 爬取项目的蜘蛛 -
response (
Responseobject) -- 从中删除项的响应 -
exception (
DropItemexception) -- 例外情况(必须是DropItem子类)导致该项被删除
-
item_error¶
-
scrapy.signals.item_error(item, response, spider, failure)¶ -
发送时 项目管道 生成错误(即引发异常),除非
DropItem例外。此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 中导致错误的项 项目管道
-
response (
Responseobject) -- 引发异常时正在处理的响应 -
spider (
Spiderobject) -- 引发异常的蜘蛛 -
failure (twisted.python.failure.Failure) -- 引发的异常
-
蜘蛛信号¶
spider_closed¶
-
scrapy.signals.spider_closed(spider, reason)¶ -
在蜘蛛关闭后发送。这可用于释放在上保留的每个蜘蛛资源
spider_opened.此信号支持从其处理程序返回延迟。
- 参数
-
-
spider (
Spiderobject) -- 已关闭的蜘蛛 -
reason (str) -- 描述蜘蛛关闭原因的字符串。如果它是因为蜘蛛完成了爬取而关闭的,原因是
'finished'. 否则,如果通过调用close_spider引擎方法,则原因是reason该方法的参数(默认为'cancelled')如果发动机停机(例如,按ctrl-c停止发动机),原因将是'shutdown'.
-
spider_opened¶
-
scrapy.signals.spider_opened(spider)¶ -
在蜘蛛被打开爬行后发送。这通常用于为每个蜘蛛保留资源,但可用于打开蜘蛛时需要执行的任何任务。
此信号支持从其处理程序返回延迟。
- 参数
-
spider (
Spiderobject) -- 已经打开的蜘蛛
spider_idle¶
-
scrapy.signals.spider_idle(spider)¶ -
当蜘蛛空闲时发送,这意味着蜘蛛没有更多:
-
等待下载的请求
-
计划的请求
-
正在项管道中处理的项
如果此信号的所有处理程序完成后空闲状态仍然存在,则引擎将开始关闭蜘蛛。蜘蛛完成闭合后,
spider_closed发送信号。你可以举起
DontCloseSpider防止蜘蛛关闭的异常。此信号不支持从其处理程序返回延迟。
- 参数
-
spider (
Spiderobject) -- 空转的蜘蛛
-
注解
在您的 spider_idle 处理程序 not 确保它可以防止蜘蛛被关闭,尽管有时可以。这是因为如果计划程序拒绝了所有计划的请求(例如,由于重复而被筛选),那么spider可能仍然处于空闲状态。
spider_error¶
-
scrapy.signals.spider_error(failure, response, spider)¶ -
当spider回调生成错误(即引发异常)时发送。
此信号不支持从其处理程序返回延迟。
- 参数
-
-
failure (twisted.python.failure.Failure) -- 引发的异常
-
response (
Responseobject) -- 引发异常时正在处理的响应 -
spider (
Spiderobject) -- 引发异常的蜘蛛
-
请求信号¶
request_scheduled¶
-
scrapy.signals.request_scheduled(request, spider)¶ -
在发动机排程A时发送
Request,稍后下载。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达调度程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_dropped¶
-
scrapy.signals.request_dropped(request, spider)¶ -
发送时
Request由引擎计划稍后下载的,被调度程序拒绝。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达调度程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_reached_downloader¶
-
scrapy.signals.request_reached_downloader(request, spider)¶ -
发送时
Request已到达下载程序。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达下载程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_left_downloader¶
-
scrapy.signals.request_left_downloader(request, spider)¶ -
2.0 新版功能.
发送时
Request离开下载程序,即使在失败的情况下。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达下载程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
bytes_received¶
2.2 新版功能.
-
scrapy.signals.bytes_received(data, request, spider)¶ -
当收到特定请求的一组字节时,由http1.1和S3下载处理程序发送。对于同一请求,此信号可能被多次触发,每次都有部分数据。例如,一个25kb响应的可能场景是两个信号用10kb的数据触发,最后一个信号用5kb的数据触发。
此信号不支持从其处理程序返回延迟。
- 参数
-
-
data (
bytesobject) -- 下载处理程序接收的数据 -
request (
Requestobject) -- 生成下载的请求 -
spider (
Spiderobject) -- 与响应关联的蜘蛛
-
注解
此信号的处理程序可以通过引发 StopDownload 例外情况。请参考 停止下载响应 主题以获取更多信息和示例。
响应信号¶
response_received¶
-
scrapy.signals.response_received(response, request, spider)¶ -
当发动机接收到新的
Response从下载程序。此信号不支持从其处理程序返回延迟。
- 参数
-
-
response (
Responseobject) -- 收到的响应 -
request (
Requestobject) -- 生成响应的请求 -
spider (
Spiderobject) -- 响应所针对的蜘蛛
-
注解
这个 request 参数可能不包含到达下载程序的原始请求,如果 下载器中间件 修改 Response 对象并设置特定的 request 属性。
response_downloaded¶
-
scrapy.signals.response_downloaded(response, request, spider)¶ -
由下载者在
HTTPResponse是下载的。此信号不支持从其处理程序返回延迟。
- 参数
-
-
response (
Responseobject) -- 已下载响应 -
request (
Requestobject) -- 生成响应的请求 -
spider (
Spiderobject) -- 响应所针对的蜘蛛
-
发动机信号¶
engine_started¶
-
scrapy.signals.engine_started()¶ -
当废引擎开始爬行时发送。
此信号支持从其处理程序返回延迟。
注解
此信号可能被触发 之后 这个 spider_opened 信号,取决于蜘蛛是如何启动的。所以 不要 依靠这个信号 spider_opened .
engine_stopped¶
-
scrapy.signals.engine_stopped()¶ -
在报废引擎停止时发送(例如,当爬行过程完成时)。
此信号支持从其处理程序返回延迟。
engine_started¶
-
scrapy.signals.engine_started()¶ -
当废引擎开始爬行时发送。
此信号支持从其处理程序返回延迟。
注解
此信号可能被触发 之后 这个 spider_opened 信号,取决于蜘蛛是如何启动的。所以 不要 依靠这个信号 spider_opened .
engine_stopped¶
-
scrapy.signals.engine_stopped()¶ -
在报废引擎停止时发送(例如,当爬行过程完成时)。
此信号支持从其处理程序返回延迟。
项目信号¶
注解
最大值时 CONCURRENT_ITEMS 项是并行处理的,许多延迟是使用 DeferredList . 因此,下一批将等待 DeferredList 激发,然后为下一批报废的项运行相应的项信号处理程序。
item_scraped¶
-
scrapy.signals.item_scraped(item, response, spider)¶ -
当一个项目被爬取时发送,当它通过所有 项目管道 阶段(不下降)。
此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 刮掉的东西
-
spider (
Spiderobject) -- 爬取项目的蜘蛛 -
response (
Responseobject) -- 从项目被爬取的地方得到的响应
-
item_dropped¶
-
scrapy.signals.item_dropped(item, response, exception, spider)¶ -
从中删除项目后发送 项目管道 当某个阶段
DropItem例外。此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 从中删除的项 项目管道
-
spider (
Spiderobject) -- 爬取项目的蜘蛛 -
response (
Responseobject) -- 从中删除项的响应 -
exception (
DropItemexception) -- 例外情况(必须是DropItem子类)导致该项被删除
-
item_error¶
-
scrapy.signals.item_error(item, response, spider, failure)¶ -
发送时 项目管道 生成错误(即引发异常),除非
DropItem例外。此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 中导致错误的项 项目管道
-
response (
Responseobject) -- 引发异常时正在处理的响应 -
spider (
Spiderobject) -- 引发异常的蜘蛛 -
failure (twisted.python.failure.Failure) -- 引发的异常
-
item_scraped¶
-
scrapy.signals.item_scraped(item, response, spider)¶ -
当一个项目被爬取时发送,当它通过所有 项目管道 阶段(不下降)。
此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 刮掉的东西
-
spider (
Spiderobject) -- 爬取项目的蜘蛛 -
response (
Responseobject) -- 从项目被爬取的地方得到的响应
-
item_dropped¶
-
scrapy.signals.item_dropped(item, response, exception, spider)¶ -
从中删除项目后发送 项目管道 当某个阶段
DropItem例外。此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 从中删除的项 项目管道
-
spider (
Spiderobject) -- 爬取项目的蜘蛛 -
response (
Responseobject) -- 从中删除项的响应 -
exception (
DropItemexception) -- 例外情况(必须是DropItem子类)导致该项被删除
-
item_error¶
-
scrapy.signals.item_error(item, response, spider, failure)¶ -
发送时 项目管道 生成错误(即引发异常),除非
DropItem例外。此信号支持从其处理程序返回延迟。
- 参数
-
-
item (item object) -- 中导致错误的项 项目管道
-
response (
Responseobject) -- 引发异常时正在处理的响应 -
spider (
Spiderobject) -- 引发异常的蜘蛛 -
failure (twisted.python.failure.Failure) -- 引发的异常
-
蜘蛛信号¶
spider_closed¶
-
scrapy.signals.spider_closed(spider, reason)¶ -
在蜘蛛关闭后发送。这可用于释放在上保留的每个蜘蛛资源
spider_opened.此信号支持从其处理程序返回延迟。
- 参数
-
-
spider (
Spiderobject) -- 已关闭的蜘蛛 -
reason (str) -- 描述蜘蛛关闭原因的字符串。如果它是因为蜘蛛完成了爬取而关闭的,原因是
'finished'. 否则,如果通过调用close_spider引擎方法,则原因是reason该方法的参数(默认为'cancelled')如果发动机停机(例如,按ctrl-c停止发动机),原因将是'shutdown'.
-
spider_opened¶
-
scrapy.signals.spider_opened(spider)¶ -
在蜘蛛被打开爬行后发送。这通常用于为每个蜘蛛保留资源,但可用于打开蜘蛛时需要执行的任何任务。
此信号支持从其处理程序返回延迟。
- 参数
-
spider (
Spiderobject) -- 已经打开的蜘蛛
spider_idle¶
-
scrapy.signals.spider_idle(spider)¶ -
当蜘蛛空闲时发送,这意味着蜘蛛没有更多:
-
等待下载的请求
-
计划的请求
-
正在项管道中处理的项
如果此信号的所有处理程序完成后空闲状态仍然存在,则引擎将开始关闭蜘蛛。蜘蛛完成闭合后,
spider_closed发送信号。你可以举起
DontCloseSpider防止蜘蛛关闭的异常。此信号不支持从其处理程序返回延迟。
- 参数
-
spider (
Spiderobject) -- 空转的蜘蛛
-
注解
在您的 spider_idle 处理程序 not 确保它可以防止蜘蛛被关闭,尽管有时可以。这是因为如果计划程序拒绝了所有计划的请求(例如,由于重复而被筛选),那么spider可能仍然处于空闲状态。
spider_error¶
-
scrapy.signals.spider_error(failure, response, spider)¶ -
当spider回调生成错误(即引发异常)时发送。
此信号不支持从其处理程序返回延迟。
- 参数
-
-
failure (twisted.python.failure.Failure) -- 引发的异常
-
response (
Responseobject) -- 引发异常时正在处理的响应 -
spider (
Spiderobject) -- 引发异常的蜘蛛
-
spider_closed¶
-
scrapy.signals.spider_closed(spider, reason)¶ -
在蜘蛛关闭后发送。这可用于释放在上保留的每个蜘蛛资源
spider_opened.此信号支持从其处理程序返回延迟。
- 参数
-
-
spider (
Spiderobject) -- 已关闭的蜘蛛 -
reason (str) -- 描述蜘蛛关闭原因的字符串。如果它是因为蜘蛛完成了爬取而关闭的,原因是
'finished'. 否则,如果通过调用close_spider引擎方法,则原因是reason该方法的参数(默认为'cancelled')如果发动机停机(例如,按ctrl-c停止发动机),原因将是'shutdown'.
-
spider_opened¶
-
scrapy.signals.spider_opened(spider)¶ -
在蜘蛛被打开爬行后发送。这通常用于为每个蜘蛛保留资源,但可用于打开蜘蛛时需要执行的任何任务。
此信号支持从其处理程序返回延迟。
- 参数
-
spider (
Spiderobject) -- 已经打开的蜘蛛
spider_idle¶
-
scrapy.signals.spider_idle(spider)¶ -
当蜘蛛空闲时发送,这意味着蜘蛛没有更多:
-
等待下载的请求
-
计划的请求
-
正在项管道中处理的项
如果此信号的所有处理程序完成后空闲状态仍然存在,则引擎将开始关闭蜘蛛。蜘蛛完成闭合后,
spider_closed发送信号。你可以举起
DontCloseSpider防止蜘蛛关闭的异常。此信号不支持从其处理程序返回延迟。
- 参数
-
spider (
Spiderobject) -- 空转的蜘蛛
-
注解
在您的 spider_idle 处理程序 not 确保它可以防止蜘蛛被关闭,尽管有时可以。这是因为如果计划程序拒绝了所有计划的请求(例如,由于重复而被筛选),那么spider可能仍然处于空闲状态。
spider_error¶
-
scrapy.signals.spider_error(failure, response, spider)¶ -
当spider回调生成错误(即引发异常)时发送。
此信号不支持从其处理程序返回延迟。
- 参数
-
-
failure (twisted.python.failure.Failure) -- 引发的异常
-
response (
Responseobject) -- 引发异常时正在处理的响应 -
spider (
Spiderobject) -- 引发异常的蜘蛛
-
请求信号¶
request_scheduled¶
-
scrapy.signals.request_scheduled(request, spider)¶ -
在发动机排程A时发送
Request,稍后下载。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达调度程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_dropped¶
-
scrapy.signals.request_dropped(request, spider)¶ -
发送时
Request由引擎计划稍后下载的,被调度程序拒绝。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达调度程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_reached_downloader¶
-
scrapy.signals.request_reached_downloader(request, spider)¶ -
发送时
Request已到达下载程序。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达下载程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_left_downloader¶
-
scrapy.signals.request_left_downloader(request, spider)¶ -
2.0 新版功能.
发送时
Request离开下载程序,即使在失败的情况下。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达下载程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
bytes_received¶
2.2 新版功能.
-
scrapy.signals.bytes_received(data, request, spider)¶ -
当收到特定请求的一组字节时,由http1.1和S3下载处理程序发送。对于同一请求,此信号可能被多次触发,每次都有部分数据。例如,一个25kb响应的可能场景是两个信号用10kb的数据触发,最后一个信号用5kb的数据触发。
此信号不支持从其处理程序返回延迟。
- 参数
-
-
data (
bytesobject) -- 下载处理程序接收的数据 -
request (
Requestobject) -- 生成下载的请求 -
spider (
Spiderobject) -- 与响应关联的蜘蛛
-
注解
此信号的处理程序可以通过引发 StopDownload 例外情况。请参考 停止下载响应 主题以获取更多信息和示例。
request_scheduled¶
-
scrapy.signals.request_scheduled(request, spider)¶ -
在发动机排程A时发送
Request,稍后下载。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达调度程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_dropped¶
-
scrapy.signals.request_dropped(request, spider)¶ -
发送时
Request由引擎计划稍后下载的,被调度程序拒绝。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达调度程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_reached_downloader¶
-
scrapy.signals.request_reached_downloader(request, spider)¶ -
发送时
Request已到达下载程序。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达下载程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
request_left_downloader¶
-
scrapy.signals.request_left_downloader(request, spider)¶ -
2.0 新版功能.
发送时
Request离开下载程序,即使在失败的情况下。此信号不支持从其处理程序返回延迟。
- 参数
-
-
request (
Requestobject) -- 到达下载程序的请求 -
spider (
Spiderobject) -- 发出请求的蜘蛛
-
bytes_received¶
2.2 新版功能.
-
scrapy.signals.bytes_received(data, request, spider)¶ -
当收到特定请求的一组字节时,由http1.1和S3下载处理程序发送。对于同一请求,此信号可能被多次触发,每次都有部分数据。例如,一个25kb响应的可能场景是两个信号用10kb的数据触发,最后一个信号用5kb的数据触发。
此信号不支持从其处理程序返回延迟。
- 参数
-
-
data (
bytesobject) -- 下载处理程序接收的数据 -
request (
Requestobject) -- 生成下载的请求 -
spider (
Spiderobject) -- 与响应关联的蜘蛛
-
注解
此信号的处理程序可以通过引发 StopDownload 例外情况。请参考 停止下载响应 主题以获取更多信息和示例。
响应信号¶
response_received¶
-
scrapy.signals.response_received(response, request, spider)¶ -
当发动机接收到新的
Response从下载程序。此信号不支持从其处理程序返回延迟。
- 参数
-
-
response (
Responseobject) -- 收到的响应 -
request (
Requestobject) -- 生成响应的请求 -
spider (
Spiderobject) -- 响应所针对的蜘蛛
-
注解
这个 request 参数可能不包含到达下载程序的原始请求,如果 下载器中间件 修改 Response 对象并设置特定的 request 属性。
response_downloaded¶
-
scrapy.signals.response_downloaded(response, request, spider)¶ -
由下载者在
HTTPResponse是下载的。此信号不支持从其处理程序返回延迟。
- 参数
-
-
response (
Responseobject) -- 已下载响应 -
request (
Requestobject) -- 生成响应的请求 -
spider (
Spiderobject) -- 响应所针对的蜘蛛
-
response_received¶
-
scrapy.signals.response_received(response, request, spider)¶ -
当发动机接收到新的
Response从下载程序。此信号不支持从其处理程序返回延迟。
- 参数
-
-
response (
Responseobject) -- 收到的响应 -
request (
Requestobject) -- 生成响应的请求 -
spider (
Spiderobject) -- 响应所针对的蜘蛛
-
注解
这个 request 参数可能不包含到达下载程序的原始请求,如果 下载器中间件 修改 Response 对象并设置特定的 request 属性。
response_downloaded¶
-
scrapy.signals.response_downloaded(response, request, spider)¶ -
由下载者在
HTTPResponse是下载的。此信号不支持从其处理程序返回延迟。
- 参数
-
-
response (
Responseobject) -- 已下载响应 -
request (
Requestobject) -- 生成响应的请求 -
spider (
Spiderobject) -- 响应所针对的蜘蛛
-