Core API

0.15版中的新功能.

本节介绍了Scrapy核心API,它是为扩展程序和中间件的开发人员准备的.

Crawler API

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

扩展管理器负责加载和跟踪已安装的扩展,它通过EXTENSIONS设置进行配置,该设置包含所有可用扩展及其目录的字典,类似于您配置下载中间件的方式 .

class scrapy.crawler.Crawler(spidercls, settings)

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

settings

此搜寻器的设置管理器.

扩展和中间件使用它来访问此搜寻器的Scrapy设置.

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

有关API,请参见Settings类.

signals

The signals manager of this crawler.

扩展和中间件使用它来将自己挂接到Scrapy功能中.

有关信号的介绍,请参见信号 .

有关API,请参见SignalManager类.

stats

此搜寻器的统计信息收集器.

扩展和中间件使用它来记录其行为的统计信息,或访问其他扩展收集的统计信息.

有关stats集合的介绍,请参见Stats Collection .

有关API,请参见StatsCollector类.

extensions

扩展管理器,跟踪启用的扩展.

大多数扩展都不需要访问此属性.

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

engine

执行引擎,用于协调调度程序,下载程序和爬虫之间的核心爬网逻辑.

某些扩展程序可能想要访问Scrapy引擎,以检查或修改下载程序和调度程序的行为,尽管这是高级用法,并且此API尚不稳定.

spider

蜘蛛目前正在爬行. 这是构造搜寻器时提供的Spider类的一个实例,它是在crawl()方法中给定的参数之后创建的.

crawl(*args, **kwargs)

通过使用给定的argskwargs参数实例化其Spider类来启动kwargs ,同时使执行引擎处于运动状态.

Returns a deferred that is fired when the crawl is finished.

stop()

启动搜寻器的正常停止,并返回在搜寻器停止时触发的延迟.

class scrapy.crawler.CrawlerRunner(settings=None)

这是一个方便的帮助程序类,可以在已设置的Twisted Reactor中跟踪,管理和运行搜寻 .

必须使用Settings对象实例化CrawlerRunner对象.

除非编写手动处理抓取过程的脚本,否则不需要该类(因为Scrapy负责相应地使用它). 有关示例,请参见从脚本运行Scrapy .

crawl(crawler_or_spidercls, *args, **kwargs)

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

它将跟踪给定的Crawler的crawl()方法,同时对其进行跟踪,以便稍后可以停止.

如果crawler_or_spidercls不是Crawler实例,则此方法将尝试使用此参数作为为其指定的Spider类来创建一个.

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

Parameters:
  • crawler_or_spidercls( Crawler例如, Spider子类或字符串) -已创建的履带式或蜘蛛类或蜘蛛的项目内部名称来创建它
  • argslist )–初始化蜘蛛的参数
  • kwargsdict )–初始化蜘蛛的关键字参数
crawlers

一组由crawl()启动并由此类管理的crawlers .

create_crawler(crawler_or_spidercls)

返回一个Crawler对象.

  • 如果crawler_or_spidercls是Crawler, crawler_or_spidercls返回.
  • 如果crawler_or_spidercls是Spider子类,则为其构造一个新的Crawler.
  • 如果crawler_or_spidercls是字符串,则此函数在Scrapy项目(使用Spider loader)中找到具有此名称的Spider,然后为其创建Crawler实例.
join()

Returns a deferred that is fired when all managed crawlers have completed their executions.

stop()

同时停止所有正在执行的爬网作业.

返回所有它们都结束时触发的延迟.

class scrapy.crawler.CrawlerProcess(settings=None, install_root_handler=True)

Bases: scrapy.crawler.CrawlerRunner

在一个进程中同时运行多个scrapy爬网程序的类.

此类通过添加对启动Twisted 反应器和处理关闭信号的支持(例如键盘中断命令Ctrl-C)扩展了CrawlerRunner . 它还配置顶级日志记录.

如果您未在应用程序中运行其他Twisted 反应器,则该实用程序应比CrawlerRunner更合适.

必须使用Settings对象实例化CrawlerProcess对象.

Parameters:install_root_handler –是否安装根日志记录处理程序(默认值:True)

除非编写手动处理抓取过程的脚本,否则不需要该类(因为Scrapy负责相应地使用它). 有关示例,请参见从脚本运行Scrapy .

crawl(crawler_or_spidercls, *args, **kwargs)

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

它将跟踪给定的Crawler的crawl()方法,同时对其进行跟踪,以便稍后可以停止.

如果crawler_or_spidercls不是Crawler实例,则此方法将尝试使用此参数作为为其指定的Spider类来创建一个.

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

Parameters:
  • crawler_or_spidercls( Crawler例如, Spider子类或字符串) -已创建的履带式或蜘蛛类或蜘蛛的项目内部名称来创建它
  • argslist )–初始化蜘蛛的参数
  • kwargsdict )–初始化蜘蛛的关键字参数
crawlers

一组由crawl()启动并由此类管理的crawlers .

create_crawler(crawler_or_spidercls)

返回一个Crawler对象.

  • 如果crawler_or_spidercls是Crawler, crawler_or_spidercls返回.
  • 如果crawler_or_spidercls是Spider子类,则为其构造一个新的Crawler.
  • 如果crawler_or_spidercls是字符串,则此函数在Scrapy项目(使用Spider loader)中找到具有此名称的Spider,然后为其创建Crawler实例.
join()

返回所有托管crawlers完成执行后触发的延迟.

start(stop_after_crawl=True)

此方法将启动Twisted 反应堆 ,将其池大小调整为REACTOR_THREADPOOL_MAXSIZE ,并基于DNSCACHE_ENABLEDDNSCACHE_SIZE安装DNS缓存.

如果stop_after_crawl为True,则所有爬网程序完成之后,将使用join()停止反应器.

Parameters:stop_after_crawlboolean )–所有爬虫完成后是否停止反应堆
stop()

同时停止所有正在执行的爬网作业.

返回所有它们都结束时触发的延迟.

Settings 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')

Bases: 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()

Make a deep copy of current settings.

此方法返回Settings类的新实例,该实例填充了相同的值及其优先级.

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

copy_to_dict()

复制当前设置并转换为字典.

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

对返回的字典所做的修改不会反映在原始设置中.

例如,此方法对于在Scrapy shell中打印设置很有用.

freeze()

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

调用此方法后,设置的当前状态将变得不可变. 尝试通过set()方法及其变体更改值将无法进行,并会发出警告.

frozencopy()

返回当前设置的不变副本.

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

get(name, default=None)

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

Parameters:
  • 名称字符串 )–设置名称
  • 默认任意 )–如果未找到设置,则返回的值
getbool(name, default=False)

获取设置值作为布尔值.

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

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

Parameters:
  • 名称字符串 )–设置名称
  • 默认任意 )–如果未找到设置,则返回的值
getdict(name, default=None)

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

Parameters:
  • 名称字符串 )–设置名称
  • 默认任意 )–如果未找到设置,则返回的值
getfloat(name, default=0.0)

获取设置值作为浮点数.

Parameters:
  • 名称字符串 )–设置名称
  • 默认任意 )–如果未找到设置,则返回的值
getint(name, default=0)

获取一个设置值作为一个整数.

Parameters:
  • 名称字符串 )–设置名称
  • 默认任意 )–如果未找到设置,则返回的值
getlist(name, default=None)

获取设置值作为列表. 如果设置的原始类型是列表,则将返回其副本. 如果是字符串,它将被","分隔.

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

Parameters:
  • 名称字符串 )–设置名称
  • 默认任意 )–如果未找到设置,则返回的值
getpriority(name)

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

Parameters:名称字符串 )–设置名称
getwithbase(name)

获取类似于字典的设置及其_BASE对应项的组成.

Parameters:name字符串 )–类字典设置的名称
maxpriority()

返回所有设置中存在的最高优先级的数值;如果未存储任何设置,则返回defaultSETTINGS_PRIORITIES .

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

以给定的优先级存储键/值属性.

Settings should be populated before configuring the Crawler object (through the configure() method), otherwise they won’t have any effect.

Parameters:
  • 名称字符串 )–设置名称
  • 任意 )–与设置关联的值
  • priority字符串 int )–设置的优先级. 应该是SETTINGS_PRIORITIES的键或整数
setmodule(module, priority='project')

以给定的优先级存储模块中的设置.

这是一个帮助程序函数,该函数为具有提供的prioritymodule每个全局声明的大写变量调用set() .

Parameters:
  • 模块模块对象 字符串 )–模块或模块路径
  • priority字符串 int )–设置的优先级. 应该是SETTINGS_PRIORITIES的键或整数
update(values, priority='project')

以给定的优先级存储键/值对.

这是一个帮助程序函数,它为具有提供的priority每个values项调用set() .

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

Parameters:

SpiderLoader API

class scrapy.spiderloader.SpiderLoader

此类负责检索和处理整个项目中定义的蜘蛛类.

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

from_settings(settings)

Scrapy使用此类方法创建该类的实例. 使用当前项目设置调用它,并以递归方式在SPIDER_MODULES设置的模块中找到蜘蛛.

Parameters: 设置Settings实例)–项目设置
load(spider_name)

Get the Spider class with the given name. It’ll look into the previously loaded spiders for a spider class with name spider_name and will raise a KeyError if not found.

Parameters: spider_namestr )–蜘蛛类名称
list()

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

find_by_request(request)

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

Parameters: requestRequest实例)–查询的请求

Signals API

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

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

该信号可以是任何对象,尽管Scrapy附带了一些预定义的信号,这些信号已在" 信号"部分中进行了说明.

Parameters:
  • 接收器可调用 )–要连接的功能
  • 信号对象 )–要连接的信号
disconnect(receiver, signal, **kwargs)

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

disconnect_all(signal, **kwargs)

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

Parameters: 信号对象 )–断开连接的信号
send_catch_log(signal, **kwargs)

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

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

send_catch_log_deferred(signal, **kwargs)

类似于send_catch_log()但支持从信号处理程序返回延迟 .

返回一个Deferred,一旦所有延迟的信号处理程序被触发,该指令便被触发. 发送信号,捕获异常并记录它们.

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

Stats Collector API

scrapy.statscollectors模块下有几个可用的Stats Collector,它们都实现了StatsCollector类定义的Stats Collector API(它们都继承自该类).

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

返回给定stats键的值;如果不存在,则返回默认值.

get_stats()

Get all stats from the currently running spider as a dict.

set_value(key, value)

为给定的统计键设置给定的值.

set_stats(stats)

使用在stats参数中传递的dict覆盖当前统计stats .

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

假定给定起始值(未设置起始值)时,将给定stats键的值增加给定计数.

max_value(key, value)

仅当同一键的当前值小于value时,才设置给定键的给定值. 如果给定键没有当前值,则始终设置该值.

min_value(key, value)

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

clear_stats()

清除所有统计信息.

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

open_spider(spider)

打开给定的蜘蛛进行统计收集.

close_spider(spider)

关闭给定的蜘蛛. 调用此方法后,将无法访问或收集更多特定的统计信息.