核心API¶
本节记录了Scrapy核心API,旨在为扩展和中间件的开发者提供文档。
爬虫API¶
Scrapy API 的主要入口点是 Crawler
对象,通过 from_crawler 类方法传递给扩展。这个
对象提供了对所有 Scrapy 核心组件的访问,并且是扩展访问它们并将其功能集成到 Scrapy 中的唯一方式。
扩展管理器负责加载和跟踪已安装的扩展,并通过EXTENSIONS设置进行配置,该设置包含所有可用扩展及其顺序的字典,类似于您配置下载器中间件的方式。
- class scrapy.crawler.Crawler(spidercls: type[scrapy.spiders.Spider], settings: dict[str, Any] | Settings | None = None, init_reactor: bool = False)[源代码]¶
Crawler对象必须使用一个
scrapy.Spider子类和一个scrapy.settings.Settings对象来实例化。- signals¶
此爬虫的信号管理器。
这被扩展和中间件用来将它们自己挂接到Scrapy功能中。
有关信号的介绍,请参见 Signals。
有关API,请参见
SignalManager类。
- stats¶
此爬虫的统计收集器。
这是用于扩展和中间件记录它们行为的统计数据,或访问由其他扩展收集的统计数据。
有关统计收集的介绍,请参见 Stats Collection。
有关API,请参见
StatsCollector类。
- engine¶
执行引擎,负责协调调度器、下载器和爬虫之间的核心爬取逻辑。
一些扩展可能希望访问Scrapy引擎,以检查或修改下载器和调度器的行为,尽管这是一种高级用法,并且此API尚未稳定。
- get_downloader_middleware(cls: type[_T]) _T | None[源代码]¶
返回指定类或其子类的下载器中间件的运行时实例,如果未找到则返回
None。新版本2.12中新增。
此方法只能在爬虫引擎创建后调用,例如在信号
engine_started或spider_opened时。
- get_extension(cls: type[_T]) _T | None[源代码]¶
返回指定类或其子类的扩展的运行实例,如果未找到则返回
None。新版本2.12中新增。
此方法只能在扩展管理器创建后调用,例如在信号
engine_started或spider_opened时。
- get_item_pipeline(cls: type[_T]) _T | None[源代码]¶
返回指定类或其子类的item pipeline的运行实例,如果未找到则返回
None。新版本2.12中新增。
此方法只能在爬虫引擎创建后调用,例如在信号
engine_started或spider_opened时。
- get_spider_middleware(cls: type[_T]) _T | None[源代码]¶
返回指定类或其子类的spider middleware的运行实例,如果未找到则返回
None。新版本2.12中新增。
此方法只能在爬虫引擎创建后调用,例如在信号
engine_started或spider_opened时。
- class scrapy.crawler.CrawlerRunner(settings: dict[str, Any] | Settings | None = None)[source]¶
这是一个方便的辅助类,用于在已经设置的
reactor中跟踪、管理和运行爬虫。CrawlerRunner对象必须使用
Settings对象进行实例化。这个类通常不需要使用(因为Scrapy负责根据需要使用它),除非编写手动处理爬取过程的脚本。有关示例,请参见从脚本运行Scrapy。
- crawl(crawler_or_spidercls: type[scrapy.spiders.Spider] | str | Crawler, *args: Any, **kwargs: Any) Deferred[None][源代码]¶
使用提供的参数运行爬虫。
它将调用给定的Crawler的
crawl()方法,同时跟踪它以便稍后可以停止。如果
crawler_or_spidercls不是Crawler的实例,此方法将尝试使用此参数作为给定的蜘蛛类来创建一个实例。返回一个在爬取完成时触发的延迟对象。
- create_crawler(crawler_or_spidercls: type[scrapy.spiders.Spider] | str | Crawler) Crawler[source]¶
返回一个
Crawler对象。如果
crawler_or_spidercls是一个 Crawler,它将原样返回。如果
crawler_or_spidercls是一个 Spider 子类,则会为其构造一个新的 Crawler。如果
crawler_or_spidercls是一个字符串,此函数会在 Scrapy 项目中(使用蜘蛛加载器)查找具有此名称的蜘蛛,然后为其创建一个 Crawler 实例。
- class scrapy.crawler.CrawlerProcess(settings: dict[str, Any] | Settings | None = None, install_root_handler: bool = True)[source]¶
基础类:
CrawlerRunner一个类,用于在进程中同时运行多个scrapy爬虫。
这个类通过增加对启动
reactor和处理关闭信号(如键盘中断命令Ctrl-C)的支持,扩展了CrawlerRunner。它还配置了顶级日志记录。如果你没有在应用程序中运行另一个
reactor,那么这个工具应该比CrawlerRunner更适合。CrawlerProcess对象必须使用
Settings对象进行实例化。- Parameters:
install_root_handler – 是否安装根日志处理程序 (默认值: True)
这个类通常不需要使用(因为Scrapy负责根据需要使用它),除非编写手动处理爬取过程的脚本。有关示例,请参见从脚本运行Scrapy。
- crawl(crawler_or_spidercls: type[scrapy.spiders.Spider] | str | Crawler, *args: Any, **kwargs: Any) Deferred[None]¶
使用提供的参数运行爬虫。
它将调用给定的Crawler的
crawl()方法,同时跟踪它以便稍后可以停止。如果
crawler_or_spidercls不是Crawler的实例,此方法将尝试使用此参数作为给定的蜘蛛类来创建一个实例。返回一个在爬取完成时触发的延迟对象。
- create_crawler(crawler_or_spidercls: type[scrapy.spiders.Spider] | str | Crawler) Crawler¶
返回一个
Crawler对象。如果
crawler_or_spidercls是一个 Crawler,它将原样返回。如果
crawler_or_spidercls是一个 Spider 子类,则会为其构造一个新的 Crawler。如果
crawler_or_spidercls是一个字符串,此函数会在 Scrapy 项目中(使用蜘蛛加载器)查找具有此名称的蜘蛛,然后为其创建一个 Crawler 实例。
- start(stop_after_crawl: bool = True, install_signal_handlers: bool = True) None[源代码]¶
此方法启动一个
reactor,将其池大小调整为REACTOR_THREADPOOL_MAXSIZE,并根据DNSCACHE_ENABLED和DNSCACHE_SIZE安装DNS缓存。如果
stop_after_crawl为 True,反应器将在所有爬虫完成后停止,使用join()。
设置API¶
- scrapy.settings.SETTINGS_PRIORITIES¶
设置Scrapy中使用的默认设置优先级的键名和优先级级别的字典。
每个项目定义一个设置入口点,为其分配一个代码名称用于识别和一个整数优先级。在
Settings类中设置和检索值时,较大的优先级比较小的优先级具有更高的优先权。SETTINGS_PRIORITIES = { "default": 0, "command": 10, "addon": 15, "project": 20, "spider": 30, "cmdline": 40, }
有关每个设置源的详细说明,请参见: Settings。
- scrapy.settings.get_settings_priority(priority: int | str) int[source]¶
小型辅助函数,用于在
SETTINGS_PRIORITIES字典中查找给定的字符串优先级并返回其数值,或直接返回给定的数值优先级。
- class scrapy.settings.Settings(values: _SettingsInputT = None, priority: int | str = 'project')[源代码]¶
基础类:
BaseSettings此对象存储用于配置内部组件的Scrapy设置,并可用于任何进一步的定制。
它是直接子类,并支持
BaseSettings的所有方法。此外,在实例化此类后,新对象将已经填充了内置设置参考中描述的全局默认设置。
- class scrapy.settings.BaseSettings(values: _SettingsInputT = None, priority: int | str = 'project')[源代码]¶
此类的实例行为类似于字典,但存储优先级及其
(key, value)对,并且可以被冻结(即标记为不可变)。键值对可以在初始化时通过
values参数传递,并且它们将采用priority级别(除非values已经是BaseSettings的实例,在这种情况下将保留现有的优先级)。如果priority参数是字符串,则将在SETTINGS_PRIORITIES中查找优先级名称。否则,应提供特定的整数值。一旦对象被创建,可以使用
set()方法加载或更新新设置,并且可以使用字典的方括号表示法或实例的get()方法及其值转换变体来访问这些设置。当请求存储的键时,将检索具有最高优先级的值。- copy_to_dict() dict[Union[bool, float, int, str, NoneType], Any][source]¶
复制当前设置并转换为字典。
此方法返回一个新的字典,其中填充了与当前设置相同的值及其优先级。
对返回的字典所做的修改不会反映在原始设置上。
这个方法可以用于例如在Scrapy shell中打印设置。
- getbool(name: bool | float | int | str | None, default: bool = False) bool[source]¶
获取一个设置为布尔值的设置值。
1,'1', True` 和'True'返回True, 而0,'0',False,'False'和None返回False。例如,通过环境变量设置为
'0'的配置在使用此方法时将返回False。
- getdict(name: bool | float | int | str | None, default: dict[Any, Any] | None = None) dict[Any, Any][源代码]¶
获取一个设置值作为字典。如果设置的原始类型是字典,将返回其副本。如果是字符串,它将作为JSON字典进行评估。如果它是
BaseSettings实例本身,它将被转换为字典,包含所有当前设置值,这些值将由get()返回,并且会丢失所有关于优先级和可变性的信息。
- getdictorlist(name: bool | float | int | str | None, default: dict[Any, Any] | list[Any] | tuple[Any] | None = None) dict[Any, Any] | list[Any][source]¶
-
如果设置已经是字典或列表,将返回其副本。
如果它是一个字符串,它将被评估为JSON,或者作为逗号分隔的字符串列表作为备用。
例如,从命令行填充的设置将返回:
{'key1': 'value1', 'key2': 'value2'}如果设置为'{"key1": "value1", "key2": "value2"}'['one', 'two']如果设置为'["one", "two"]'或'one,two'
- Parameters:
name (string) – 设置名称
默认值 (任意类型) – 如果未找到设置,则返回此值
- getlist(name: bool | float | int | str | None, default: list[Any] | None = None) list[Any][source]¶
获取设置值作为列表。如果设置的原始类型是列表,将返回其副本。如果是字符串,它将按“,”分割。
例如,通过环境变量设置为
'one,two'的配置在使用此方法时将返回一个列表 [‘one’, ‘two’]。
- getpriority(name: bool | float | int | str | None) int | None[source]¶
返回设置的当前数值优先级,如果给定的
name不存在,则返回None。- Parameters:
name (str) – 设置名称
- getwithbase(name: bool | float | int | str | None) BaseSettings[source]¶
获取一个类似字典的设置及其_BASE对应部分的组合。
- Parameters:
name (str) – 类似字典设置的名称
- maxpriority() int[source]¶
返回所有设置中存在的最高优先级的数值,如果没有存储设置,则返回
SETTINGS_PRIORITIES中default的数值。
- pop(k[, d]) v, remove specified key and return the corresponding value.[source]¶
如果未找到键,则返回给定的d,否则引发KeyError。
- set(name: bool | float | int | str | None, value: Any, priority: int | str = 'project') None[源代码]¶
存储一个具有给定优先级的键/值属性。
设置应在配置Crawler对象之前填充(通过
configure()方法),否则它们将不会产生任何效果。- Parameters:
name (str) – 设置名称
value (object) – 与设置关联的值
priority (str 或 int) – 设置的优先级。应该是
SETTINGS_PRIORITIES的一个键或一个整数
- setmodule(module: ModuleType | str, priority: int | str = 'project') None[source]¶
从具有给定优先级的模块中存储设置。
这是一个辅助函数,它为每个全局声明的大写变量调用
set(),并使用提供的priority。- Parameters:
模块 (types.ModuleType 或 str) – 模块或模块的路径
priority (str 或 int) – 设置的优先级。应该是
SETTINGS_PRIORITIES的一个键或一个整数
- update(values: _SettingsInputT, priority: int | str = 'project') None[source]¶
使用给定的优先级存储键/值对。
这是一个辅助函数,它为
values的每个项目调用set(),并使用提供的priority。如果
values是一个字符串,它将被假定为 JSON 编码,并首先使用json.loads()解析为字典。如果它是一个BaseSettings实例,将使用每个键的优先级,并且忽略priority参数。这允许通过单个命令插入/更新具有不同优先级的设置。- Parameters:
values (字典或字符串或
BaseSettings) – 设置名称和值priority (str 或 int) – 设置的优先级。应该是
SETTINGS_PRIORITIES的一个键或一个整数
SpiderLoader API¶
- class scrapy.spiderloader.SpiderLoader[source]¶
该类负责检索和处理项目中定义的爬虫类。
可以通过在项目设置中指定自定义爬虫加载器的路径来使用它们,路径在
SPIDER_LOADER_CLASS中设置。它们必须完全实现scrapy.interfaces.ISpiderLoader接口,以确保无错误的执行。- from_settings(settings)[源代码]¶
这个类方法由Scrapy用于创建类的实例。 它使用当前项目设置调用,并加载在
SPIDER_MODULES设置中的模块中递归找到的蜘蛛。- Parameters:
设置 (
Settings实例) – 项目设置
信号API¶
- class scrapy.signalmanager.SignalManager(sender: Any = _Anonymous)[源代码]¶
- connect(receiver: Any, signal: Any, **kwargs: Any) None[source]¶
将接收器函数连接到信号。
信号可以是任何对象,尽管Scrapy自带了一些预定义的信号,这些信号在Signals部分有文档说明。
- Parameters:
receiver (collections.abc.Callable) – 要连接的函数
signal (object) – 要连接的信号
- disconnect(receiver: Any, signal: Any, **kwargs: Any) None[源代码]¶
断开信号与接收器函数的连接。这与
connect()方法的效果相反,参数相同。
- disconnect_all(signal: Any, **kwargs: Any) None[source]¶
从给定信号断开所有接收器。
- Parameters:
signal (object) – 要断开连接的信号
统计收集器API¶
在scrapy.statscollectors模块下有几个可用的统计收集器,它们都实现了由StatsCollector类定义的统计收集器API(它们都继承自该类)。