异常

内置异常参考

以下是Scrapy中包含的所有异常及其用途的列表。

关闭爬虫

exception scrapy.exceptions.CloseSpider(reason='cancelled')[源代码]

此异常可以从爬虫回调中引发,以请求关闭/停止爬虫。支持的参数:

Parameters:

原因 (str) – 关闭的原因

例如:

def parse_page(self, response):
    if "Bandwidth exceeded" in response.body:
        raise CloseSpider("bandwidth_exceeded")

不要关闭爬虫

exception scrapy.exceptions.DontCloseSpider[source]

此异常可以在spider_idle信号处理程序中引发,以防止蜘蛛被关闭。

删除项目

exception scrapy.exceptions.DropItem[source]

必须由项目管道阶段引发的异常,以停止处理项目。更多信息请参见项目管道

忽略请求

exception scrapy.exceptions.IgnoreRequest[source]

此异常可以由调度程序或任何下载器中间件引发,以指示应忽略该请求。

未配置

exception scrapy.exceptions.NotConfigured[source]

此异常可能由某些组件引发,以表明它们将保持禁用状态。这些组件包括:

  • Extensions

  • 项目管道

  • 下载器中间件

  • Spider middlewares

异常必须在组件的__init__方法中抛出。

不支持

exception scrapy.exceptions.NotSupported[source]

此异常用于指示不支持的功能。

停止下载

新版本2.2新增。

exception scrapy.exceptions.StopDownload(fail=True)[源代码]

bytes_receivedheaders_received信号处理程序引发,以指示不应再为响应下载更多字节。

fail 布尔参数控制哪个方法将处理生成的响应:

  • 如果 fail=True(默认),则调用请求的错误回调。响应对象作为 StopDownload 异常的 response 属性可用,而该异常又作为接收到的 Failure 对象的 value 属性存储。这意味着在定义为 def errback(self, failure) 的错误回调中,可以通过 failure.value.response 访问响应。

  • 如果 fail=False,则调用请求回调。

在这两种情况下,响应的主体可能会被截断:主体包含在引发异常之前接收到的所有字节,包括在引发异常的信号处理程序中接收到的字节。此外,响应对象在其Response.flags属性中被标记为"download_stopped"

注意

fail 是一个仅关键字参数,即引发 StopDownload(False)StopDownload(True) 将会引发 一个 TypeError

请参阅bytes_receivedheaders_received信号的文档 以及停止下载响应主题以获取更多信息和示例。