Skip to main content

核心API

0.15 新版功能.

本节记录了Scrapy核心API,它面向扩展和中间件的开发人员。

抓取工具API

Scrapy API的主要入口点是 Crawler 对象,通过 from_crawler 类方法传递给扩展。此对象提供对所有Scrapy核心组件的访问,这是扩展访问它们并将其功能挂接到Scrapy的唯一方法。

Extension Manager负责加载和跟踪已安装的扩展,并通过 EXTENSIONS 设置进行配置,该设置包含所有可用扩展的字典及其顺序,类似于您的 配置下载中间件

class scrapy.crawler.Crawler(spidercls, settings)

Crawler对象必须使用 scrapy.spiders.Spider 子类和 scrapy.settings.Settings 对象进行实例化。

settings

此抓取工具的设置管理器。

这是扩展程序和中间件使用此访问此抓取工具的Scrapy设置。

有关Scrapy设置的介绍,请参阅 设置

对于API,请参阅 Settings 类。

signals

此抓取工具的信号管理器。

这是由扩展和中间件使用它们自己进入Scrapy功能。

有关信号的介绍,请参阅 信号

对于API,请参阅 SignalManager 类。

stats

这个爬虫的stats收集器。

这用于扩展和中间件记录他们的行为的统计,或访问由其他扩展收集的统计。

有关统计数据收集的介绍,请参阅 统计数据

对于API,请参阅 StatsCollector 类。

extensions

用于跟踪已启用的扩展程序的扩展管理器。

大多数扩展程序不需要访问此属性。

有关扩展的介绍和Scrapy的可用扩展列表,请参阅 扩展

engine

执行引擎,它在调度程序,下载程序和蜘蛛程序之间协调核心爬行逻辑。

一些扩展可能想访问Scrapy引擎,检查或修改下载程序和调度程序行为,虽然这是一个高级使用,并且此API尚不稳定。

spider

目前正在抓取Spider。这是在构造搜寻器时提供的spider类的一个实例,它是在 crawl() 方法中给出的参数之后创建的。

crawl(*args, **kwargs)

通过使用给定的 argskwargs 参数实例化其蜘蛛类,同时将执行引擎设置为运动来启动搜寻器。

返回在爬网完成时触发的延迟。

class scrapy.crawler.CrawlerRunner(settings=None)

这是一个方便的帮助类,它在已经建立的Twisted reactor 中跟踪,管理和运行抓取工具。

CrawlerRunner对象必须使用 Settings 对象进行实例化。

不应该需要此类(因为Scrapy负责相应地使用它),除非编写手动处理爬网过程的脚本。见 从脚本运行Scrapy 的例子。

crawl(crawler_or_spidercls, *args, **kwargs)

使用提供的参数运行搜寻器。

它将调用给定的Crawler的 crawl() 方法,同时跟踪它,以便以后可以停止。

如果 crawler_or_spidercls 不是 Crawler 实例,则此方法将尝试使用此参数创建一个作为给予它的蜘蛛类。

返回在抓取完成时触发的延迟。

参数:
  • crawler_or_spidercls (Crawler instance, Spider subclass or string) – 已创建的爬网程序,或蜘蛛类或蜘蛛的名称在项目中创建它
  • args (list) – 初始化蜘蛛的参数
  • kwargs (dict) – 关键字参数以初始化蜘蛛
crawlers

crawlers 集由 crawl() 开始并由此类管理。

create_crawler(crawler_or_spidercls)

返回 Crawler 对象。

  • 如果 crawler_or_spidercls 是抓取工具,则按原样返回。

  • 如果 crawler_or_spidercls 是一个Spider子类,则为其构建一个新的Crawler。

  • 如果 crawler_or_spidercls 是字符串,此函数在Scrapy项目中使用此名称找到一个蜘蛛(使用蜘蛛加载程序),然后为其创建一个Crawler实例。

join()

返回当所有托管 crawlers 完成其执行时触发的延迟。

stop()

同时停止所有正在进行的爬行作业。

返回当它们都已结束时触发的延迟。

class scrapy.crawler.CrawlerProcess(settings=None)

基类:scrapy.crawler.CrawlerRunner

一个同时运行多个scrapy爬行器的类。

此类通过添加对启动扭转 reactor 和处理关闭信号的支持(如键盘中断命令Ctrl-C)来扩展 CrawlerRunner。它还配置顶级日志记录。

如果您没有在应用程序中运行另一个Twisted reactor,此实用程序应该比 CrawlerRunner 更合适。

CrawlerProcess对象必须使用 Settings 对象进行实例化。

不应该需要此类(因为Scrapy负责相应地使用它),除非编写手动处理爬网过程的脚本。见 从脚本运行Scrapy 的例子。

crawl(crawler_or_spidercls, *args, **kwargs)

使用提供的参数运行搜寻器。

它将调用给定的Crawler的 crawl() 方法,同时跟踪它,以便以后可以停止。

如果 crawler_or_spidercls 不是 Crawler 实例,则此方法将尝试使用此参数创建一个作为给予它的蜘蛛类。

返回在抓取完成时触发的延迟。

参数:
  • crawler_or_spidercls (Crawler instance, Spider subclass or string) – 已创建的爬网程序,或蜘蛛类或蜘蛛的名称在项目中创建它
  • args (list) – 初始化蜘蛛的参数
  • kwargs (dict) – 关键字参数以初始化蜘蛛
crawlers

crawlers 集由 crawl() 开始并由此类管理。

create_crawler(crawler_or_spidercls)

返回 Crawler 对象。

  • 如果 crawler_or_spidercls 是抓取工具,则按原样返回。

  • 如果 crawler_or_spidercls 是一个Spider子类,则为其构建一个新的Crawler。

  • 如果 crawler_or_spidercls 是字符串,此函数在Scrapy项目中使用此名称找到一个蜘蛛(使用蜘蛛加载程序),然后为其创建一个Crawler实例。

join()

返回当所有托管 crawlers 完成其执行时触发的延迟。

start(stop_after_crawl=True)

此方法启动Twisted reactor,将其池大小调整为 REACTOR_THREADPOOL_MAXSIZE,并安装基于 DNSCACHE_ENABLEDDNSCACHE_SIZE 的DNS缓存。

如果 stop_after_crawl 为True,则在所有爬行器完成后,使用 join() 将停止反应器。

参数:stop_after_crawl (boolean) – 停止或不是反应堆时,所有履带都完成了
stop()

同时停止所有正在进行的爬行作业。

返回当它们都已结束时触发的延迟。

设置API

scrapy.settings.SETTINGS_PRIORITIES

设置Scrapy中使用的默认设置优先级的键名称和优先级的字典。

每个项目定义一个设置入口点,给它一个用于识别的代码名称和一个整数优先级。当在 Settings 类中设置和检索值时,更高的优先级比更小的优先级更优先。

SETTINGS_PRIORITIES = {
    'default': 0,
    'command': 10,
    'project': 20,
    'spider': 30,
    'cmdline': 40,
}

有关每个设置源的详细说明,请参阅:设置

scrapy.settings.get_settings_priority(priority)

小辅助函数,它在 SETTINGS_PRIORITIES 字典中查找给定的字符串优先级并返回其数值,或直接返回给定的数字优先级。

class scrapy.settings.Settings(values=None, priority='project')

基类:scrapy.settings.BaseSettings

此对象存储用于内部组件配置的Scrapy设置,并可用于任何进一步的自定义。

它是一个直接的子类,并支持 BaseSettings 的所有方法。此外,在实例化此类之后,新对象将具有已填充的 内置设置参考 上描述的全局默认设置。

class scrapy.settings.BaseSettings(values=None, priority='project')

这个类的实例表现得像字典,但是存储优先级以及它们的 (key, value) 对,并且可以被冻结(即标记为不可变)。

键值条目可以使用 values 参数传递初始化,并且它们将采用 priority 级别(除非 values 已经是 BaseSettings 的实例,在这种情况下将保留现有的优先级)。如果 priority 参数是字符串,则将在 SETTINGS_PRIORITIES 中查找优先级名称。否则,应提供特定的整数。

创建对象后,可以使用 set() 方法加载或更新新设置,并可使用字典的方括号符号或实例的 get() 方法及其值转换变体访问。当请求存储的键时,将检索具有最高优先级的值。

copy()

对当前设置进行深度复制。

此方法返回一个新的 Settings 类实例,填充相同的值及其优先级。

对新对象的修改不会反映在原始设置上。

copy_to_dict()

复制当前设置并转换为dict。

此方法返回一个填充有与当前设置相同的值及其优先级的新字典。

对返回的dict的修改不会反映在原始设置上。

此方法可用于例如在Scrapy shell中打印设置。

freeze()

禁用对当前设置的进一步更改。

调用此方法后,设置的当前状态将变为不可变。尝试通过 set() 方法及其变体更改值将不可能,并将被警告。

frozencopy()

返回当前设置的不可变副本。

copy() 返回的对象中的 freeze() 调用的别名。

get(name, default=None)

获取设置值,而不影响其原始类型。

参数:
  • name (string) – 设置名称
  • default (any) – 如果未找到设置则返回值
getbool(name, default=False)

获取设置值作为布尔值。

1'1'True`'True' 返回 True,而 0'0'False'False'None 返回 False

例如,通过设置为 '0' 的环境变量填充的设置将在使用此方法时返回 False

参数:
  • name (string) – 设置名称
  • default (any) – 如果未找到设置则返回值
getdict(name, default=None)

获取设置值作为字典。如果设置的原始类型是字典,则会返回它的副本。如果它是一个字符串,它将被评估为一个JSON字典。在它是 BaseSettings 实例本身的情况下,它将被转换为字典,包含它们将由 get() 返回的所有当前设置值,并且丢失关于优先级和可变性的所有信息。

参数:
  • name (string) – 设置名称
  • default (any) – 如果未找到设置则返回值
getfloat(name, default=0.0)

获取一个设置值作为float。

参数:
  • name (string) – 设置名称
  • default (any) – 如果未找到设置则返回值
getint(name, default=0)

获取设置值作为int。

参数:
  • name (string) – 设置名称
  • default (any) – 如果未找到设置则返回值
getlist(name, default=None)

获取设置值作为列表。如果设置原稿类型是列表,则会返回其副本。如果是字符串,它将被“,”分割。

例如,通过设置为 'one,two' 的环境变量填充的设置将在使用此方法时返回列表[‘one’,’two’]。

参数:
  • name (string) – 设置名称
  • default (any) – 如果未找到设置则返回值
getpriority(name)

返回设置的当前数值优先级值,如果给定的 name 不存在,则返回 None

参数:name (string) – 设置名称
getwithbase(name)

获取类似字典的设置及其 _BASE 副本的组合。

参数:name (string) – 类似字典设置的名称
maxpriority()

返回在所有设置中存在的最高优先级的数值,或者如果没有存储设置,则返回来自 SETTINGS_PRIORITIESdefault 的数值。

set(name, value, priority='project')

存储具有给定优先级的键/值属性。

应该填充 before 配置Crawler对象(通过 configure() 方法),否则它们不会有任何效果。

参数:
  • name (string) – 设置名称
  • value (any) – 要与设置关联的值
  • priority (string or int) – 设置的优先级。应该是 SETTINGS_PRIORITIES 的密钥或整数
setmodule(module, priority='project')

从具有给定优先级的模块存储设置。

这是一个辅助函数,它使用提供的 prioritymodule 的每个全局声明的大写变量调用 set()

参数:
  • module (module object or string) – 模块或模块的路径
  • priority (string or int) – 设置的优先级。应该是 SETTINGS_PRIORITIES 的密钥或整数
update(values, priority='project')

存储具有给定优先级的键/值对。

这是一个帮助函数,它使用提供的 priority 为每个 values 项调用 set()

如果 values 是字符串,则假定它是JSON编码的,并首先解析为具有 json.loads() 的dict。如果它是 BaseSettings 实例,将使用每个键的优先级,并忽略 priority 参数。这允许使用单个命令插入/更新具有不同优先级的设置。

参数:
  • values (dict or string or BaseSettings) – 设置名称和值
  • priority (string or int) – 设置的优先级。应该是 SETTINGS_PRIORITIES 的密钥或整数

SpiderLoader API

class scrapy.loader.SpiderLoader

这个类负责检索和处理项目中定义的蜘蛛类。

可以通过在 SPIDER_LOADER_CLASS 项目设置中指定其路径来使用自定义蜘蛛装载程序。它们必须完全实现 scrapy.interfaces.ISpiderLoader 接口以保证无错误执行。

from_settings(settings)

Scrapy使用此类方法来创建类的实例。它使用当前项目设置调用,并且加载在 SPIDER_MODULES 设置的模块中递归找到的蜘蛛。

参数:settings (Settings instance) – 项目设置
load(spider_name)

获取具有给定名称的Spider类。它将查看以前加载的蜘蛛类名为 spider_name 的蜘蛛类,如果没有找到,将引发一个KeyError。

参数:spider_name (str) – 蜘蛛类名
list()

获取项目中可用的蜘蛛的名称。

find_by_request(request)

列出可以处理给定请求的蜘蛛的名称。将尝试匹配请求的网址与蜘蛛网域。

参数:request (Request instance) – 查询请求

信号API

class scrapy.signalmanager.SignalManager(sender=_Anonymous)
connect(receiver, signal, **kwargs)

将接收器功能连接到信号。

该信号可以是任何对象,虽然Scrapy带有一些预定义的信号,记录在 信号 部分。

参数:
  • receiver (callable) – 要连接的功能
  • signal (object) – 连接的信号
disconnect(receiver, signal, **kwargs)

断开接收器功能与信号的连接。这与 connect() 方法具有相反的效果,并且参数是相同的。

disconnect_all(signal, **kwargs)

断开所有接收器与给定信号的连接。

参数:signal (object) – 断开信号
send_catch_log(signal, **kwargs)

发送信号,捕获异常并记录它们。

关键字参数被传递给信号处理程序(通过 connect() 方法连接)。

send_catch_log_deferred(signal, **kwargs)

send_catch_log(),但支持从信号处理程序返回 deferreds

返回一个Deferred,当所有信号处理程序延迟都被触发时触发。发送信号,捕获异常并记录它们。

关键字参数被传递给信号处理程序(通过 connect() 方法连接)。

Stats收集器API

scrapy.statscollectors 模块下有几个Stats收集器,它们都实现了 StatsCollector 类定义的Stats收集器API(它们都继承自它们)。

class scrapy.statscollectors.StatsCollector
get_value(key, default=None)

返回给定stats键或默认值(如果不存在)的值。

get_stats()

从当前运行的蜘蛛获取所有的统计数据作为dict。

set_value(key, value)

设置给定统计键的给定值。

set_stats(stats)

stats 参数中传递的dict替代当前统计。

inc_value(key, count=1, start=0)

将给定的统计键的值乘以给定的计数,假设给定了开始值(未设置)。

max_value(key, value)

只有当同一键的当前值低于值时,才设置给定键的给定值。如果给定键没有当前值,则始终设置该值。

min_value(key, value)

只有当同一键的当前值大于值时,才设置给定键的给定值。如果给定键没有当前值,则始终设置该值。

clear_stats()

清除所有统计。

以下方法不是stats集合api的一部分,而是在实现自定义统计收集器时使用:

open_spider(spider)

打开给定的蜘蛛收集统计数据。

close_spider(spider)

关闭给定的蜘蛛。调用后,不能访问或收集更多具体的统计信息。