扩展

扩展框架提供了一种将自己的自定义功能插入到Scrapy中的机制。

扩展只是在Scrapy启动时实例化的常规类,当扩展被初始化时。

扩展设置

扩展程序使用Scrapy设置来管理其设置,就像任何其他Scrapy代码一样。

扩展程序通常以其自己的名称对其设置进行前缀,以避免与现有(和未来)扩展名冲突。例如,处理Google Sitemaps的假设扩展将使用GOOGLESITEMAP_ENABLED,GOOGLESITEMAP_DEPTH等设置。

加载和激活扩展

通过实例化扩展类的单个实例,在启动时加载和激活扩展。因此,所有扩展初始化代码必须在类构造函数(__init__方法)中执行。

要使扩展程序可用,请将其添加到Scrapy设置中的EXTENSIONS设置。在EXTENSIONS中,每个扩展名由一个字符串表示:扩展名类的完整Python路径。例如:

EXTENSIONS = {

'scrapy.extensions.corestats.CoreStats':500,

'scrapy.extensions.telnet.TelnetConsole':500,

}

您可以看到,EXTENSIONS设置是一个dict,其中的键是扩展路径,它们的值是订单,用于定义扩展加载顺序。 EXTENSIONS设置与Scrapy中定义的EXTENSIONS_BASE设置合并(并不意味着被覆盖),然后按顺序排序以获得已启用扩展的最终排序列表。

由于扩展通常不依赖于彼此,它们的加载顺序在大多数情况下是无关紧要的。这就是为什么EXTENSIONS_BASE设置定义了所有具有相同顺序(0)的扩展。但是,如果您需要添加依赖于已加载的其他扩展名的扩展名,则可以利用此功能。

可用,启用和禁用的扩展

并非所有可用的扩展程序都将启用。其中一些通常取决于特定的设置。例如,默认情况下HTTP缓存扩展可用,但禁用,除非设置了HTTPCACHE_ENABLED设置。

禁用扩展

为了禁用默认启用的扩展(即EXTENSIONS_BASE设置中包含的扩展名),您必须将其顺序设置为“无”。例如:

EXTENSIONS = {

'scrapy.extensions.corestats.CoreStats':无,

}

编写自己的扩展名

每个扩展都是一个Python类。 Scrapy扩展的主要入口点(也包括中间件和流水线)是from_crawler类方法,它接收Crawler实例。通过Crawler对象,您可以访问设置,信号,统计信息,还可以控制爬网行为。

通常,扩展连接到信号并执行由它们触发的任务。

最后,如果from_crawler方法引发NotConfigured异常,扩展将被禁用。否则,扩展将被启用。

示例扩展

这里我们将实现一个简单的扩展来说明上一节中描述的概念。此扩展程序将每次都会记录一条消息:

一只蜘蛛打开

一只蜘蛛关闭

特定数量的物品被刮

扩展程序将通过MYEXT_ENABLED设置启用,项目数将通过MYEXT_ITEMCOUNT设置进行指定。

以下是此类扩展的代码:

内置扩展引用

通用扩展

日志统计信息扩展

class scrapy.extensions.logstats.LogStats

记录基本统计信息,例如抓取的网页和已刮取的项目。

核心统计扩展

class scrapy.extensions.corestats.CoreStats

只要已启用统计信息收集功能,请启用核心统计信息的收集(请参阅统计信息收集)。

Telnet控制台扩展

class scrapy.extensions.telnet.TelnetConsole

提供一个telnet控制台,用于在当前正在运行的Scrapy进程中进入Python解释器,这对调试非常有用。

必须通过TELNETCONSOLE_ENABLED设置启用telnet控制台,服务器将侦听TELNETCONSOLE_PORT中指定的端口。

内存使用扩展

class scrapy.extensions.memusage.MemoryUsage

注意

此扩展在Windows中不起作用。

监视运行蜘蛛的Scrapy进程使用的内存:

当超过一定值时发送通知电子邮件

当蜘蛛超过一定值时关闭蜘蛛

当达到某个警告值(MEMUSAGE_WARNING_MB)和达到最大值(MEMUSAGE_LIMIT_MB)时,可以触发通知电子邮件,这也将导致蜘蛛关闭,并且Scrapy进程被终止。

此扩展名由MEMUSAGE_ENABLED设置启用,可以使用以下设置进行配置:

MEMUSAGE_LIMIT_MB

MEMUSAGE_WARNING_MB

MEMUSAGE_NOTIFY_MAIL

MEMUSAGE_CHECK_INTERVAL_SECONDS

内存调试器扩展

class scrapy.extensions.memdebug.MemoryDe​​bugger

用于调试内存使用的扩展。它收集有关以下信息:

Python垃圾回收器未收到的对象

活着的对象不应该。有关更多信息,请参阅使用trackref调试内存泄漏

要启用此扩展程序,请打开MEMDEBUG_ENABLED设置。信息将被存储在统计信息中。

关闭蜘蛛扩展

class scrapy.extensions.closespider.CloseSpider

在满足某些条件时自动关闭一个蜘蛛,使用每个条件的特定关闭原因。

关闭蜘蛛的条件可以通过以下设置进行配置:

CLOSESPIDER_TIMEOUT

CLOSESPIDER_ITEMCOUNT

CLOSESPIDER_PAGECOUNT

CLOSESPIDER_ERRORCOUNT

CLOSESPIDER_TIMEOUT

默认值:0

一个指定秒数的整数。如果蜘蛛保持打开超过这个秒数,它将被自动关闭,原因是shutpider_timeout。如果为零(或未设置),则蜘蛛不会被超时关闭。

CLOSESPIDER_ITEMCOUNT

默认值:0

一个整数,用于指定一些项目。如果蜘蛛超过该数量,并且这些物品被物料管道传递,蜘蛛将被关闭,原因是shutpider_itemcount。当前在下载队列中(最多CONCURRENT_REQUESTS个请求)的请求仍然被处理。如果为零(或非设置),则蜘蛛不会被传递的项目的数量关闭。

CLOSESPIDER_PAGECOUNT

0.11版新功能

默认值:0

一个整数,指定爬网响应的最大数量。如果蜘蛛爬得更多,蜘蛛会被关闭,因为shutpider_pagecount。如果为零(或未设置),则蜘蛛不会被爬网响应的数量关闭。

CLOSESPIDER_ERRORCOUNT

0.11版新功能

默认值:0

一个整数,它指定在关闭蜘蛛之前要接收的最大错误数。如果蜘蛛生成的错误数量超过了这个数量,那么将关闭它的原因是shutpider_errorcount。如果为零(或未设置),则蜘蛛不会被错误的数量关闭。

StatsMailer扩展

class scrapy.extensions.statsmailer.StatsMailer

每次域名完成刮取时,这个简单的扩展可用于发送通知电子邮件,包括收集的Scrapy统计信息。电子邮件将发送到STATSMAILER_RCPTS设置中指定的所有收件人。

调试扩展

堆栈跟踪转储扩展

class scrapy.extensions.debug.StackTraceDump

当接收到SIGQUIT或SIGUSR2信号时,转储运行过程的信息。倾销的信息如下:

引擎状态(使用scrapy.utils.engine.get_engine_status())

实时参考(请参阅使用trackref调试内存泄漏)

所有线程的堆栈跟踪

堆栈跟踪和引擎状态转储后,Scrapy进程将继续正常运行。

此扩展仅适用于符合POSIX的平台(即不是Windows),因为SIGQUIT和SIGUSR2信号在Windows上不可用。

至少有两种方式可以发送Scrapy SIGQUIT信号:

当Scrapy进程正在运行时,按Ctrl键?仅限Linux?

通过运行此命令(假设<pid>是Scrapy进程的进程标识):

kill -QUIT <pid>

调试器扩展

class scrapy.extensions.debug.Debugger

当接收到SIGUSR2信号时,在正在运行的Scrapy进程内调用一个Python调试器。调试器退出后,Scrapy进程继续正常运行。

有关更多信息,请参阅Python中的调试。

此扩展仅适用于符合POSIX的平台(即Windows)。

results matching ""

    No results matching ""