Scrapy – 扩展
扩展框架提供了一种将您自己的自定义功能插入到Scrapy中的机制。
扩展只是在初始化扩展时,在scrapy启动时实例化的常规类。
扩展设置¶
扩展使用 Scrapy settings 管理他们的设置,就像任何其他零碎的代码一样。
扩展通常会在其设置前面加上自己的名称,以避免与现有(和将来)扩展冲突。例如,要处理的假设扩展 Google Sitemaps 将使用如下设置 GOOGLESITEMAP_ENABLED , GOOGLESITEMAP_DEPTH 等等。
加载和激活扩展¶
扩展在启动时通过实例化扩展类的单个实例来加载和激活。因此,所有的扩展初始化代码都必须在类中执行 __init__ 方法。
若要使扩展名可用,请将其添加到 EXTENSIONS 设置你的剪贴设置。在 EXTENSIONS ,每个扩展都由一个字符串表示:扩展类名的完整python路径。例如::
EXTENSIONS = { 'scrapy.extensions.corestats.CoreStats': 500, 'scrapy.extensions.telnet.TelnetConsole': 500, }
如你所见, EXTENSIONS 设置是一个dict,其中键是扩展路径,它们的值是定义扩展的顺序。 加载 秩序。这个 EXTENSIONS 设置与合并 EXTENSIONS_BASE 在scrappy中定义的设置(不打算被重写),然后按顺序排序,以获得已启用扩展的最终排序列表。
由于扩展通常不相互依赖,因此在大多数情况下,它们的加载顺序是不相关的。这就是为什么 EXTENSIONS_BASE 设置以相同的顺序定义所有扩展名 (0 )但是,如果需要添加依赖于已加载的其他扩展的扩展,则可以利用此功能。
可用、启用和禁用扩展¶
并非所有可用的扩展都将启用。其中一些通常取决于特定的设置。例如,HTTP缓存扩展在默认情况下是可用的,但在 HTTPCACHE_ENABLED 设置设置。
禁用扩展¶
为了禁用默认启用的扩展(即 EXTENSIONS_BASE 设置)必须将其顺序设置为 None . 例如::
EXTENSIONS = { 'scrapy.extensions.corestats.CoreStats': None, }
编写自己的扩展名¶
每个扩展都是一个Python类。碎屑扩展(也包括中间产品和管道)的主要入口点是 from_crawler 类方法,它接收 Crawler 实例。通过爬虫对象,您可以访问设置、信号、统计信息,还可以控制爬行行为。
通常,扩展连接到 signals 并执行由它们触发的任务。
最后,如果 from_crawler 方法引发 NotConfigured 异常,扩展将被禁用。否则,将启用扩展。
样本扩展¶
在这里,我们将实现一个简单的扩展来说明前一节中描述的概念。此扩展将每次记录一条消息:
-
蜘蛛被打开了
-
蜘蛛被关闭了
-
特定数量的物品被爬取
扩展将通过 MYEXT_ENABLED 设置和项目数将通过 MYEXT_ITEMCOUNT 设置。
这是这种扩展的代码:
import logging from scrapy import signals from scrapy.exceptions import NotConfigured logger = logging.getLogger(__name__) class SpiderOpenCloseLogging: def __init__(self, item_count): self.item_count = item_count self.items_scraped = 0 @classmethod def from_crawler(cls, crawler): # first check if the extension should be enabled and raise # NotConfigured otherwise if not crawler.settings.getbool('MYEXT_ENABLED'): raise NotConfigured # get the number of items from settings item_count = crawler.settings.getint('MYEXT_ITEMCOUNT', 1000) # instantiate the extension object ext = cls(item_count) # connect the extension object to signals crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened) crawler.signals.connect(ext.spider_closed, signal=signals.spider_closed) crawler.signals.connect(ext.item_scraped, signal=signals.item_scraped) # return the extension object return ext def spider_opened(self, spider): logger.info("opened spider %s", spider.name) def spider_closed(self, spider): logger.info("closed spider %s", spider.name) def item_scraped(self, item, spider): self.items_scraped += 1 if self.items_scraped % self.item_count == 0: logger.info("scraped %d items", self.items_scraped)
内置扩展引用¶
通用扩展¶
日志统计扩展¶
-
class
scrapy.extensions.logstats.LogStats[源代码]¶
记录基本的统计信息,如已爬网的页面和已擦除的项目。
核心统计扩展¶
-
class
scrapy.extensions.corestats.CoreStats[源代码]¶
启用核心统计信息集合,前提是已启用统计信息集合(请参见 统计数据集合 )
Telnet控制台扩展¶
-
class
scrapy.extensions.telnet.TelnetConsole[源代码]¶
提供一个telnet控制台,用于进入当前运行的scrapy进程中的python解释器,这对于调试非常有用。
telnet控制台必须由 TELNETCONSOLE_ENABLED 设置,服务器将侦听中指定的端口 TELNETCONSOLE_PORT .
内存使用扩展¶
-
class
scrapy.extensions.memusage.MemoryUsage¶
注解
此扩展在Windows中不起作用。
监视运行spider的scrapy进程使用的内存,并:
-
超过某个值时发送通知电子邮件
-
当蜘蛛超过某个值时关闭蜘蛛
当达到某个警告值时,可以触发通知电子邮件。 (MEMUSAGE_WARNING_MB )当达到最大值时 (MEMUSAGE_LIMIT_MB )这也会导致蜘蛛被关闭,碎屑过程被终止。
此扩展由 MEMUSAGE_ENABLED 设置,可以使用以下设置进行配置:
-
MEMUSAGE_LIMIT_MB -
MEMUSAGE_WARNING_MB -
MEMUSAGE_NOTIFY_MAIL -
MEMUSAGE_CHECK_INTERVAL_SECONDS
内存调试器扩展¶
-
class
scrapy.extensions.memdebug.MemoryDebugger[源代码]¶
调试内存使用情况的扩展。它收集以下信息:
-
python垃圾收集器未收集的对象
-
不应该保留的对象。有关详细信息,请参阅 使用调试内存泄漏 trackref
要启用此扩展,请打开 MEMDEBUG_ENABLED 设置。信息将存储在统计信息中。
关闭星形延长件¶
-
class
scrapy.extensions.closespider.CloseSpider[源代码]¶
当满足某些条件时,使用每个条件的特定关闭原因自动关闭蜘蛛。
关闭蜘蛛的条件可以通过以下设置进行配置:
-
CLOSESPIDER_TIMEOUT -
CLOSESPIDER_ITEMCOUNT -
CLOSESPIDER_PAGECOUNT -
CLOSESPIDER_ERRORCOUNT
CLOSESPIDER_TIMEOUT¶
违约: 0
指定秒数的整数。如果蜘蛛保持打开超过该秒数,它将自动关闭,原因如下 closespider_timeout . 如果为零(或未设置),蜘蛛将不会在超时时关闭。
CLOSESPIDER_ITEMCOUNT¶
违约: 0
指定若干项的整数。如果spider的爬取超过该数量,并且这些项目通过项目管道,那么spider将关闭,原因是 closespider_itemcount . 当前在下载器队列中的请求(最多 CONCURRENT_REQUESTS 请求)仍在处理中。如果为零(或未设置),蜘蛛将不会被通过的项目数关闭。
CLOSESPIDER_PAGECOUNT¶
违约: 0
指定要爬网的最大响应数的整数。如果蜘蛛爬得比这个还多,蜘蛛会被关闭的,原因是 closespider_pagecount . 如果为零(或未设置),蜘蛛将不会被爬行响应的数量关闭。
CLOSESPIDER_ERRORCOUNT¶
违约: 0
一个整数,指定关闭蜘蛛之前要接收的最大错误数。如果spider生成的错误数量超过该数量,则会关闭它并说明原因。 closespider_errorcount . 如果为零(或未设置),蜘蛛将不会被错误数关闭。
StatsMailer扩展¶
-
class
scrapy.extensions.statsmailer.StatsMailer¶
这个简单的扩展可用于在域完成抓取时发送通知电子邮件,包括收集到的残缺统计信息。电子邮件将发送给 STATSMAILER_RCPTS 设置。
调试扩展¶
堆栈跟踪转储扩展¶
-
class
scrapy.extensions.debug.StackTraceDump[源代码]¶
当 SIGQUIT 或 SIGUSR2 接收到信号。转储的信息如下:
-
发动机状态(使用
scrapy.utils.engine.get_engine_status()) -
实时参考(请参见 使用调试内存泄漏 trackref )
-
所有线程的堆栈跟踪
在转储堆栈跟踪和引擎状态后, Scrapy 进程继续正常运行。
此扩展仅适用于与POSIX兼容的平台(即,不适用于Windows),因为 SIGQUIT 和 SIGUSR2 Windows上没有信号。
至少有两种方法可以将Scrapy SIGQUIT 信号:
-
按ctrl-while a scrapy process is running(Linux only?)
-
通过运行此命令(假设
<pid>是报废流程的流程ID)::kill -QUIT <pid>
调试器扩展¶
-
class
scrapy.extensions.debug.Debugger[源代码]¶
调用一个 Python debugger 当 SIGUSR2 接收到信号。退出调试程序后,碎片处理程序继续正常运行。
有关详细信息,请参阅 Debugging in Python .
此扩展仅适用于与POSIX兼容的平台(即不适用于Windows)。
扩展设置¶
扩展使用 Scrapy settings 管理他们的设置,就像任何其他零碎的代码一样。
扩展通常会在其设置前面加上自己的名称,以避免与现有(和将来)扩展冲突。例如,要处理的假设扩展 Google Sitemaps 将使用如下设置 GOOGLESITEMAP_ENABLED , GOOGLESITEMAP_DEPTH 等等。
加载和激活扩展¶
扩展在启动时通过实例化扩展类的单个实例来加载和激活。因此,所有的扩展初始化代码都必须在类中执行 __init__ 方法。
若要使扩展名可用,请将其添加到 EXTENSIONS 设置你的剪贴设置。在 EXTENSIONS ,每个扩展都由一个字符串表示:扩展类名的完整python路径。例如::
EXTENSIONS = { 'scrapy.extensions.corestats.CoreStats': 500, 'scrapy.extensions.telnet.TelnetConsole': 500, }
如你所见, EXTENSIONS 设置是一个dict,其中键是扩展路径,它们的值是定义扩展的顺序。 加载 秩序。这个 EXTENSIONS 设置与合并 EXTENSIONS_BASE 在scrappy中定义的设置(不打算被重写),然后按顺序排序,以获得已启用扩展的最终排序列表。
由于扩展通常不相互依赖,因此在大多数情况下,它们的加载顺序是不相关的。这就是为什么 EXTENSIONS_BASE 设置以相同的顺序定义所有扩展名 (0 )但是,如果需要添加依赖于已加载的其他扩展的扩展,则可以利用此功能。
可用、启用和禁用扩展¶
并非所有可用的扩展都将启用。其中一些通常取决于特定的设置。例如,HTTP缓存扩展在默认情况下是可用的,但在 HTTPCACHE_ENABLED 设置设置。
禁用扩展¶
为了禁用默认启用的扩展(即 EXTENSIONS_BASE 设置)必须将其顺序设置为 None . 例如::
EXTENSIONS = { 'scrapy.extensions.corestats.CoreStats': None, }
编写自己的扩展名¶
每个扩展都是一个Python类。碎屑扩展(也包括中间产品和管道)的主要入口点是 from_crawler 类方法,它接收 Crawler 实例。通过爬虫对象,您可以访问设置、信号、统计信息,还可以控制爬行行为。
通常,扩展连接到 signals 并执行由它们触发的任务。
最后,如果 from_crawler 方法引发 NotConfigured 异常,扩展将被禁用。否则,将启用扩展。
样本扩展¶
在这里,我们将实现一个简单的扩展来说明前一节中描述的概念。此扩展将每次记录一条消息:
-
蜘蛛被打开了
-
蜘蛛被关闭了
-
特定数量的物品被爬取
扩展将通过 MYEXT_ENABLED 设置和项目数将通过 MYEXT_ITEMCOUNT 设置。
这是这种扩展的代码:
import logging from scrapy import signals from scrapy.exceptions import NotConfigured logger = logging.getLogger(__name__) class SpiderOpenCloseLogging: def __init__(self, item_count): self.item_count = item_count self.items_scraped = 0 @classmethod def from_crawler(cls, crawler): # first check if the extension should be enabled and raise # NotConfigured otherwise if not crawler.settings.getbool('MYEXT_ENABLED'): raise NotConfigured # get the number of items from settings item_count = crawler.settings.getint('MYEXT_ITEMCOUNT', 1000) # instantiate the extension object ext = cls(item_count) # connect the extension object to signals crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened) crawler.signals.connect(ext.spider_closed, signal=signals.spider_closed) crawler.signals.connect(ext.item_scraped, signal=signals.item_scraped) # return the extension object return ext def spider_opened(self, spider): logger.info("opened spider %s", spider.name) def spider_closed(self, spider): logger.info("closed spider %s", spider.name) def item_scraped(self, item, spider): self.items_scraped += 1 if self.items_scraped % self.item_count == 0: logger.info("scraped %d items", self.items_scraped)
样本扩展¶
在这里,我们将实现一个简单的扩展来说明前一节中描述的概念。此扩展将每次记录一条消息:
-
蜘蛛被打开了
-
蜘蛛被关闭了
-
特定数量的物品被爬取
扩展将通过 MYEXT_ENABLED 设置和项目数将通过 MYEXT_ITEMCOUNT 设置。
这是这种扩展的代码:
import logging from scrapy import signals from scrapy.exceptions import NotConfigured logger = logging.getLogger(__name__) class SpiderOpenCloseLogging: def __init__(self, item_count): self.item_count = item_count self.items_scraped = 0 @classmethod def from_crawler(cls, crawler): # first check if the extension should be enabled and raise # NotConfigured otherwise if not crawler.settings.getbool('MYEXT_ENABLED'): raise NotConfigured # get the number of items from settings item_count = crawler.settings.getint('MYEXT_ITEMCOUNT', 1000) # instantiate the extension object ext = cls(item_count) # connect the extension object to signals crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened) crawler.signals.connect(ext.spider_closed, signal=signals.spider_closed) crawler.signals.connect(ext.item_scraped, signal=signals.item_scraped) # return the extension object return ext def spider_opened(self, spider): logger.info("opened spider %s", spider.name) def spider_closed(self, spider): logger.info("closed spider %s", spider.name) def item_scraped(self, item, spider): self.items_scraped += 1 if self.items_scraped % self.item_count == 0: logger.info("scraped %d items", self.items_scraped)
内置扩展引用¶
通用扩展¶
日志统计扩展¶
-
class
scrapy.extensions.logstats.LogStats[源代码]¶
记录基本的统计信息,如已爬网的页面和已擦除的项目。
核心统计扩展¶
-
class
scrapy.extensions.corestats.CoreStats[源代码]¶
启用核心统计信息集合,前提是已启用统计信息集合(请参见 统计数据集合 )
Telnet控制台扩展¶
-
class
scrapy.extensions.telnet.TelnetConsole[源代码]¶
提供一个telnet控制台,用于进入当前运行的scrapy进程中的python解释器,这对于调试非常有用。
telnet控制台必须由 TELNETCONSOLE_ENABLED 设置,服务器将侦听中指定的端口 TELNETCONSOLE_PORT .
内存使用扩展¶
-
class
scrapy.extensions.memusage.MemoryUsage¶
注解
此扩展在Windows中不起作用。
监视运行spider的scrapy进程使用的内存,并:
-
超过某个值时发送通知电子邮件
-
当蜘蛛超过某个值时关闭蜘蛛
当达到某个警告值时,可以触发通知电子邮件。 (MEMUSAGE_WARNING_MB )当达到最大值时 (MEMUSAGE_LIMIT_MB )这也会导致蜘蛛被关闭,碎屑过程被终止。
此扩展由 MEMUSAGE_ENABLED 设置,可以使用以下设置进行配置:
-
MEMUSAGE_LIMIT_MB -
MEMUSAGE_WARNING_MB -
MEMUSAGE_NOTIFY_MAIL -
MEMUSAGE_CHECK_INTERVAL_SECONDS
内存调试器扩展¶
-
class
scrapy.extensions.memdebug.MemoryDebugger[源代码]¶
调试内存使用情况的扩展。它收集以下信息:
-
python垃圾收集器未收集的对象
-
不应该保留的对象。有关详细信息,请参阅 使用调试内存泄漏 trackref
要启用此扩展,请打开 MEMDEBUG_ENABLED 设置。信息将存储在统计信息中。
关闭星形延长件¶
-
class
scrapy.extensions.closespider.CloseSpider[源代码]¶
当满足某些条件时,使用每个条件的特定关闭原因自动关闭蜘蛛。
关闭蜘蛛的条件可以通过以下设置进行配置:
-
CLOSESPIDER_TIMEOUT -
CLOSESPIDER_ITEMCOUNT -
CLOSESPIDER_PAGECOUNT -
CLOSESPIDER_ERRORCOUNT
CLOSESPIDER_TIMEOUT¶
违约: 0
指定秒数的整数。如果蜘蛛保持打开超过该秒数,它将自动关闭,原因如下 closespider_timeout . 如果为零(或未设置),蜘蛛将不会在超时时关闭。
CLOSESPIDER_ITEMCOUNT¶
违约: 0
指定若干项的整数。如果spider的爬取超过该数量,并且这些项目通过项目管道,那么spider将关闭,原因是 closespider_itemcount . 当前在下载器队列中的请求(最多 CONCURRENT_REQUESTS 请求)仍在处理中。如果为零(或未设置),蜘蛛将不会被通过的项目数关闭。
CLOSESPIDER_PAGECOUNT¶
违约: 0
指定要爬网的最大响应数的整数。如果蜘蛛爬得比这个还多,蜘蛛会被关闭的,原因是 closespider_pagecount . 如果为零(或未设置),蜘蛛将不会被爬行响应的数量关闭。
CLOSESPIDER_ERRORCOUNT¶
违约: 0
一个整数,指定关闭蜘蛛之前要接收的最大错误数。如果spider生成的错误数量超过该数量,则会关闭它并说明原因。 closespider_errorcount . 如果为零(或未设置),蜘蛛将不会被错误数关闭。
StatsMailer扩展¶
-
class
scrapy.extensions.statsmailer.StatsMailer¶
这个简单的扩展可用于在域完成抓取时发送通知电子邮件,包括收集到的残缺统计信息。电子邮件将发送给 STATSMAILER_RCPTS 设置。
调试扩展¶
堆栈跟踪转储扩展¶
-
class
scrapy.extensions.debug.StackTraceDump[源代码]¶
当 SIGQUIT 或 SIGUSR2 接收到信号。转储的信息如下:
-
发动机状态(使用
scrapy.utils.engine.get_engine_status()) -
实时参考(请参见 使用调试内存泄漏 trackref )
-
所有线程的堆栈跟踪
在转储堆栈跟踪和引擎状态后, Scrapy 进程继续正常运行。
此扩展仅适用于与POSIX兼容的平台(即,不适用于Windows),因为 SIGQUIT 和 SIGUSR2 Windows上没有信号。
至少有两种方法可以将Scrapy SIGQUIT 信号:
-
按ctrl-while a scrapy process is running(Linux only?)
-
通过运行此命令(假设
<pid>是报废流程的流程ID)::kill -QUIT <pid>
调试器扩展¶
-
class
scrapy.extensions.debug.Debugger[源代码]¶
调用一个 Python debugger 当 SIGUSR2 接收到信号。退出调试程序后,碎片处理程序继续正常运行。
有关详细信息,请参阅 Debugging in Python .
此扩展仅适用于与POSIX兼容的平台(即不适用于Windows)。
通用扩展¶
日志统计扩展¶
-
class
scrapy.extensions.logstats.LogStats[源代码]¶
记录基本的统计信息,如已爬网的页面和已擦除的项目。
核心统计扩展¶
-
class
scrapy.extensions.corestats.CoreStats[源代码]¶
启用核心统计信息集合,前提是已启用统计信息集合(请参见 统计数据集合 )
Telnet控制台扩展¶
-
class
scrapy.extensions.telnet.TelnetConsole[源代码]¶
提供一个telnet控制台,用于进入当前运行的scrapy进程中的python解释器,这对于调试非常有用。
telnet控制台必须由 TELNETCONSOLE_ENABLED 设置,服务器将侦听中指定的端口 TELNETCONSOLE_PORT .
内存使用扩展¶
-
class
scrapy.extensions.memusage.MemoryUsage¶
注解
此扩展在Windows中不起作用。
监视运行spider的scrapy进程使用的内存,并:
-
超过某个值时发送通知电子邮件
-
当蜘蛛超过某个值时关闭蜘蛛
当达到某个警告值时,可以触发通知电子邮件。 (MEMUSAGE_WARNING_MB )当达到最大值时 (MEMUSAGE_LIMIT_MB )这也会导致蜘蛛被关闭,碎屑过程被终止。
此扩展由 MEMUSAGE_ENABLED 设置,可以使用以下设置进行配置:
-
MEMUSAGE_LIMIT_MB -
MEMUSAGE_WARNING_MB -
MEMUSAGE_NOTIFY_MAIL -
MEMUSAGE_CHECK_INTERVAL_SECONDS
内存调试器扩展¶
-
class
scrapy.extensions.memdebug.MemoryDebugger[源代码]¶
调试内存使用情况的扩展。它收集以下信息:
-
python垃圾收集器未收集的对象
-
不应该保留的对象。有关详细信息,请参阅 使用调试内存泄漏 trackref
要启用此扩展,请打开 MEMDEBUG_ENABLED 设置。信息将存储在统计信息中。
关闭星形延长件¶
-
class
scrapy.extensions.closespider.CloseSpider[源代码]¶
当满足某些条件时,使用每个条件的特定关闭原因自动关闭蜘蛛。
关闭蜘蛛的条件可以通过以下设置进行配置:
-
CLOSESPIDER_TIMEOUT -
CLOSESPIDER_ITEMCOUNT -
CLOSESPIDER_PAGECOUNT -
CLOSESPIDER_ERRORCOUNT
CLOSESPIDER_TIMEOUT¶
违约: 0
指定秒数的整数。如果蜘蛛保持打开超过该秒数,它将自动关闭,原因如下 closespider_timeout . 如果为零(或未设置),蜘蛛将不会在超时时关闭。
CLOSESPIDER_ITEMCOUNT¶
违约: 0
指定若干项的整数。如果spider的爬取超过该数量,并且这些项目通过项目管道,那么spider将关闭,原因是 closespider_itemcount . 当前在下载器队列中的请求(最多 CONCURRENT_REQUESTS 请求)仍在处理中。如果为零(或未设置),蜘蛛将不会被通过的项目数关闭。
CLOSESPIDER_PAGECOUNT¶
违约: 0
指定要爬网的最大响应数的整数。如果蜘蛛爬得比这个还多,蜘蛛会被关闭的,原因是 closespider_pagecount . 如果为零(或未设置),蜘蛛将不会被爬行响应的数量关闭。
CLOSESPIDER_ERRORCOUNT¶
违约: 0
一个整数,指定关闭蜘蛛之前要接收的最大错误数。如果spider生成的错误数量超过该数量,则会关闭它并说明原因。 closespider_errorcount . 如果为零(或未设置),蜘蛛将不会被错误数关闭。
StatsMailer扩展¶
-
class
scrapy.extensions.statsmailer.StatsMailer¶
这个简单的扩展可用于在域完成抓取时发送通知电子邮件,包括收集到的残缺统计信息。电子邮件将发送给 STATSMAILER_RCPTS 设置。
日志统计扩展¶
-
class
scrapy.extensions.logstats.LogStats[源代码]¶
记录基本的统计信息,如已爬网的页面和已擦除的项目。
核心统计扩展¶
-
class
scrapy.extensions.corestats.CoreStats[源代码]¶
启用核心统计信息集合,前提是已启用统计信息集合(请参见 统计数据集合 )
Telnet控制台扩展¶
-
class
scrapy.extensions.telnet.TelnetConsole[源代码]¶
提供一个telnet控制台,用于进入当前运行的scrapy进程中的python解释器,这对于调试非常有用。
telnet控制台必须由 TELNETCONSOLE_ENABLED 设置,服务器将侦听中指定的端口 TELNETCONSOLE_PORT .
内存使用扩展¶
-
class
scrapy.extensions.memusage.MemoryUsage¶
注解
此扩展在Windows中不起作用。
监视运行spider的scrapy进程使用的内存,并:
-
超过某个值时发送通知电子邮件
-
当蜘蛛超过某个值时关闭蜘蛛
当达到某个警告值时,可以触发通知电子邮件。 (MEMUSAGE_WARNING_MB )当达到最大值时 (MEMUSAGE_LIMIT_MB )这也会导致蜘蛛被关闭,碎屑过程被终止。
此扩展由 MEMUSAGE_ENABLED 设置,可以使用以下设置进行配置:
-
MEMUSAGE_LIMIT_MB -
MEMUSAGE_WARNING_MB -
MEMUSAGE_NOTIFY_MAIL -
MEMUSAGE_CHECK_INTERVAL_SECONDS
内存调试器扩展¶
-
class
scrapy.extensions.memdebug.MemoryDebugger[源代码]¶
调试内存使用情况的扩展。它收集以下信息:
-
python垃圾收集器未收集的对象
-
不应该保留的对象。有关详细信息,请参阅 使用调试内存泄漏 trackref
要启用此扩展,请打开 MEMDEBUG_ENABLED 设置。信息将存储在统计信息中。
关闭星形延长件¶
-
class
scrapy.extensions.closespider.CloseSpider[源代码]¶
当满足某些条件时,使用每个条件的特定关闭原因自动关闭蜘蛛。
关闭蜘蛛的条件可以通过以下设置进行配置:
-
CLOSESPIDER_TIMEOUT -
CLOSESPIDER_ITEMCOUNT -
CLOSESPIDER_PAGECOUNT -
CLOSESPIDER_ERRORCOUNT
CLOSESPIDER_TIMEOUT¶
违约: 0
指定秒数的整数。如果蜘蛛保持打开超过该秒数,它将自动关闭,原因如下 closespider_timeout . 如果为零(或未设置),蜘蛛将不会在超时时关闭。
CLOSESPIDER_ITEMCOUNT¶
违约: 0
指定若干项的整数。如果spider的爬取超过该数量,并且这些项目通过项目管道,那么spider将关闭,原因是 closespider_itemcount . 当前在下载器队列中的请求(最多 CONCURRENT_REQUESTS 请求)仍在处理中。如果为零(或未设置),蜘蛛将不会被通过的项目数关闭。
CLOSESPIDER_PAGECOUNT¶
违约: 0
指定要爬网的最大响应数的整数。如果蜘蛛爬得比这个还多,蜘蛛会被关闭的,原因是 closespider_pagecount . 如果为零(或未设置),蜘蛛将不会被爬行响应的数量关闭。
CLOSESPIDER_ERRORCOUNT¶
违约: 0
一个整数,指定关闭蜘蛛之前要接收的最大错误数。如果spider生成的错误数量超过该数量,则会关闭它并说明原因。 closespider_errorcount . 如果为零(或未设置),蜘蛛将不会被错误数关闭。
CLOSESPIDER_TIMEOUT¶
违约: 0
指定秒数的整数。如果蜘蛛保持打开超过该秒数,它将自动关闭,原因如下 closespider_timeout . 如果为零(或未设置),蜘蛛将不会在超时时关闭。
CLOSESPIDER_ITEMCOUNT¶
违约: 0
指定若干项的整数。如果spider的爬取超过该数量,并且这些项目通过项目管道,那么spider将关闭,原因是 closespider_itemcount . 当前在下载器队列中的请求(最多 CONCURRENT_REQUESTS 请求)仍在处理中。如果为零(或未设置),蜘蛛将不会被通过的项目数关闭。
CLOSESPIDER_PAGECOUNT¶
违约: 0
指定要爬网的最大响应数的整数。如果蜘蛛爬得比这个还多,蜘蛛会被关闭的,原因是 closespider_pagecount . 如果为零(或未设置),蜘蛛将不会被爬行响应的数量关闭。
CLOSESPIDER_ERRORCOUNT¶
违约: 0
一个整数,指定关闭蜘蛛之前要接收的最大错误数。如果spider生成的错误数量超过该数量,则会关闭它并说明原因。 closespider_errorcount . 如果为零(或未设置),蜘蛛将不会被错误数关闭。
StatsMailer扩展¶
-
class
scrapy.extensions.statsmailer.StatsMailer¶
这个简单的扩展可用于在域完成抓取时发送通知电子邮件,包括收集到的残缺统计信息。电子邮件将发送给 STATSMAILER_RCPTS 设置。
调试扩展¶
堆栈跟踪转储扩展¶
-
class
scrapy.extensions.debug.StackTraceDump[源代码]¶
当 SIGQUIT 或 SIGUSR2 接收到信号。转储的信息如下:
-
发动机状态(使用
scrapy.utils.engine.get_engine_status()) -
实时参考(请参见 使用调试内存泄漏 trackref )
-
所有线程的堆栈跟踪
在转储堆栈跟踪和引擎状态后, Scrapy 进程继续正常运行。
此扩展仅适用于与POSIX兼容的平台(即,不适用于Windows),因为 SIGQUIT 和 SIGUSR2 Windows上没有信号。
至少有两种方法可以将Scrapy SIGQUIT 信号:
-
按ctrl-while a scrapy process is running(Linux only?)
-
通过运行此命令(假设
<pid>是报废流程的流程ID)::kill -QUIT <pid>
调试器扩展¶
-
class
scrapy.extensions.debug.Debugger[源代码]¶
调用一个 Python debugger 当 SIGUSR2 接收到信号。退出调试程序后,碎片处理程序继续正常运行。
有关详细信息,请参阅 Debugging in Python .
此扩展仅适用于与POSIX兼容的平台(即不适用于Windows)。
堆栈跟踪转储扩展¶
-
class
scrapy.extensions.debug.StackTraceDump[源代码]¶
当 SIGQUIT 或 SIGUSR2 接收到信号。转储的信息如下:
-
发动机状态(使用
scrapy.utils.engine.get_engine_status()) -
实时参考(请参见 使用调试内存泄漏 trackref )
-
所有线程的堆栈跟踪
在转储堆栈跟踪和引擎状态后, Scrapy 进程继续正常运行。
此扩展仅适用于与POSIX兼容的平台(即,不适用于Windows),因为 SIGQUIT 和 SIGUSR2 Windows上没有信号。
至少有两种方法可以将Scrapy SIGQUIT 信号:
-
按ctrl-while a scrapy process is running(Linux only?)
-
通过运行此命令(假设
<pid>是报废流程的流程ID)::kill -QUIT <pid>
调试器扩展¶
-
class
scrapy.extensions.debug.Debugger[源代码]¶
调用一个 Python debugger 当 SIGUSR2 接收到信号。退出调试程序后,碎片处理程序继续正常运行。
有关详细信息,请参阅 Debugging in Python .
此扩展仅适用于与POSIX兼容的平台(即不适用于Windows)。