# 核心API
> 譯者:[OSGeo 中國](https://www.osgeo.cn/)
0.15 新版功能.
本節記錄了Scrapy核心API,它是為擴展和中間件的開發人員設計的。
## 爬蟲API
Scrapy API的主要入口點是 [`Crawler`](#scrapy.crawler.Crawler "scrapy.crawler.Crawler") 對象,通過 `from_crawler` 類方法。這個對象提供對所有Scrapy核心組件的訪問,它是擴展訪問它們并將其功能連接到Scrapy的唯一方法。
擴展管理器負責加載和跟蹤已安裝的擴展,并通過 [`EXTENSIONS`](settings.html#std:setting-EXTENSIONS) 包含所有可用擴展名及其順序的字典的設置,類似于 [configure the downloader middlewares](downloader-middleware.html#topics-downloader-middleware-setting) .
```py
class scrapy.crawler.Crawler(spidercls, settings)
```
爬蟲對象必須用 [`scrapy.spiders.Spider`](spiders.html#scrapy.spiders.Spider "scrapy.spiders.Spider") 子類和A [`scrapy.settings.Settings`](#scrapy.settings.Settings "scrapy.settings.Settings") 對象。
```py
settings
```
此爬網程序的設置管理器。
這被擴展和中間軟件用來訪問這個爬蟲程序的碎片設置。
有關 Scrapy 設置的介紹,請參見 [設置](settings.html#topics-settings) .
對于API見 [`Settings`](#scrapy.settings.Settings "scrapy.settings.Settings") 類。
```py
signals
```
這個爬蟲的信號管理器。
這被擴展和中間商用來將自己連接到零碎的功能中。
有關信號的介紹,請參見 [信號](signals.html#topics-signals) .
對于API見 `SignalManager` 類。
```py
stats
```
這個爬蟲的統計收集程序。
這用于從擴展和中間軟件記錄其行為的統計信息,或訪問由其他擴展收集的統計信息。
有關stats集合的介紹,請參見 [統計數據集合](stats.html#topics-stats) .
對于API見 [`StatsCollector`](#scrapy.statscollectors.StatsCollector "scrapy.statscollectors.StatsCollector") 類。
```py
extensions
```
跟蹤已啟用擴展的擴展管理器。
大多數擴展不需要訪問這個屬性。
有關擴展名的介紹和scrapy上可用擴展名的列表,請參見 [擴展](extensions.html#topics-extensions) .
```py
engine
```
執行引擎,它協調調度程序、下載程序和spider之間的核心爬行邏輯。
有些擴展可能希望訪問scrapy引擎,檢查或修改下載程序和調度程序的行為,盡管這是一種高級用法,而且這個API還不穩定。
```py
spider
```
Spider 當前正在被爬行。這是構建爬蟲程序時提供的 Spider 類的實例,它是在 [`crawl()`](#scrapy.crawler.Crawler.crawl "scrapy.crawler.Crawler.crawl") 方法。
```py
crawl(*args, **kwargs)
```
通過用給定的 `args` 和 `kwargs` 參數,同時設置運行中的執行引擎。
返回在爬網完成時激發的延遲。
## 設置API
```py
scrapy.settings.SETTINGS_PRIORITIES
```
設置Scrapy中使用的默認設置優先級的鍵名稱和優先級級別的字典。
每個項目定義一個設置入口點,為其提供標識代碼名和整數優先級。在 [`Settings`](#scrapy.settings.Settings "scrapy.settings.Settings") 類。
```py
SETTINGS_PRIORITIES = {
'default': 0,
'command': 10,
'project': 20,
'spider': 30,
'cmdline': 40,
}
```
有關每個設置源的詳細說明,請參閱: [設置](settings.html#topics-settings) .
```py
scrapy.settings.get_settings_priority(priority)
```
在中查找給定字符串優先級的小助手函數 [`SETTINGS_PRIORITIES`](#scrapy.settings.SETTINGS_PRIORITIES "scrapy.settings.SETTINGS_PRIORITIES") 并返回其數值,或直接返回給定的數值優先級。
```py
class scrapy.settings.Settings(values=None, priority='project')
```
基類:[`scrapy.settings.BaseSettings`](#scrapy.settings.BaseSettings "scrapy.settings.BaseSettings")
此對象存儲內部組件配置的碎片設置,并可用于任何進一步的自定義。
它是一個直接的子類,支持 [`BaseSettings`](#scrapy.settings.BaseSettings "scrapy.settings.BaseSettings") . 另外,在實例化這個類之后,新對象將具有上面描述的全局默認設置 [內置設置參考](settings.html#topics-settings-ref) 已經填充。
```py
class scrapy.settings.BaseSettings(values=None, priority='project')
```
此類的實例的行為類似于字典,但將優先級與其 `(key, value)` 對,并且可以凍結(即標記為不可變)。
鍵值項可以在初始化時通過 `values` 他們會接受 `priority` 水平(除非 `values` 已經是的實例 [`BaseSettings`](#scrapy.settings.BaseSettings "scrapy.settings.BaseSettings") 在這種情況下,將保留現有的優先級)。如果 `priority` 參數是字符串,優先級名稱將在 [`SETTINGS_PRIORITIES`](#scrapy.settings.SETTINGS_PRIORITIES "scrapy.settings.SETTINGS_PRIORITIES") . 否則,應提供特定的整數。
創建對象后,可以使用 [`set()`](#scrapy.settings.BaseSettings.set "scrapy.settings.BaseSettings.set") 方法,并且可以使用字典的方括號符號或 [`get()`](#scrapy.settings.BaseSettings.get "scrapy.settings.BaseSettings.get") 實例的方法及其值轉換變量。請求存儲的密鑰時,將檢索具有最高優先級的值。
```py
copy()
```
對當前設置進行深度復制。
此方法返回 [`Settings`](#scrapy.settings.Settings "scrapy.settings.Settings") 類,使用相同的值及其優先級填充。
對新對象的修改不會反映在原始設置上。
```py
copy_to_dict()
```
復制當前設置并轉換為dict。
此方法返回一個新的dict,該dict使用與當前設置相同的值及其優先級填充。
對返回的dict的修改不會反映在原始設置上。
例如,此方法對于在Scrapy Shell中打印設置很有用。
```py
freeze()
```
禁用對當前設置的進一步更改。
調用此方法后,設置的當前狀態將變為不可變。嘗試通過 [`set()`](#scrapy.settings.BaseSettings.set "scrapy.settings.BaseSettings.set") 方法及其變體是不可能的,將被警告。
```py
frozencopy()
```
返回當前設置的不可變副本。
A的別名 [`freeze()`](#scrapy.settings.BaseSettings.freeze "scrapy.settings.BaseSettings.freeze") 調用返回的對象 [`copy()`](#scrapy.settings.BaseSettings.copy "scrapy.settings.BaseSettings.copy") .
```py
get(name, default=None)
```
在不影響其原始類型的情況下獲取設置值。
| 參數: |
* **name** (_string_) -- 設置名稱
* **default** (_any_) -- 如果找不到設置,則返回的值
|
| --- | --- |
```py
getbool(name, default=False)
```
獲取設置值作為布爾值。
`1` , `'1'` 是真的 `` and `` “真” `` return `` 對 [``](#id1), while `` 0 [``](#id3), `` “0” [``](#id5), `` 假 [``](#id7), `` “假” `` and `` 沒有 `` return `` 假`。
例如,通過設置為的環境變量填充的設置 `'0'` 將返回 `False` 使用此方法時。
| 參數: |
* **name** (_string_) -- 設置名稱
* **default** (_any_) -- 如果找不到設置,則返回的值
|
| --- | --- |
```py
getdict(name, default=None)
```
獲取一個設置值作為字典。如果設置原始類型為字典,則返回其副本。如果它是一個字符串,它將作為JSON字典進行計算。如果它是一個 [`BaseSettings`](#scrapy.settings.BaseSettings "scrapy.settings.BaseSettings") 實例本身,它將被轉換為一個字典,其中包含所有當前設置值,這些值將由返回 [`get()`](#scrapy.settings.BaseSettings.get "scrapy.settings.BaseSettings.get") 以及丟失有關優先級和可變性的所有信息。
| 參數: |
* **name** (_string_) -- 設置名稱
* **default** (_any_) -- 如果找不到設置,則返回的值
|
| --- | --- |
```py
getfloat(name, default=0.0)
```
以浮點形式獲取設置值。
| 參數: |
* **name** (_string_) -- 設置名稱
* **default** (_any_) -- 如果找不到設置,則返回的值
|
| --- | --- |
```py
getint(name, default=0)
```
以int形式獲取設置值。
| 參數: |
* **name** (_string_) -- 設置名稱
* **default** (_any_) -- 如果找不到設置,則返回的值
|
| --- | --- |
```py
getlist(name, default=None)
```
以列表形式獲取設置值。如果設置的原始類型是列表,則將返回其副本。如果是一個字符串,它將被“,”拆分。
例如,通過設置為的環境變量填充的設置 `'one,two'` 使用此方法時將返回一個列表['one'、'two']。
| 參數: |
* **name** (_string_) -- 設置名稱
* **default** (_any_) -- 如果找不到設置,則返回的值
|
| --- | --- |
```py
getpriority(name)
```
返回設置的當前數字優先級值,或 `None` 如果給定 `name` 不存在。
| 參數: | **name** (_string_) -- 設置名稱 |
| --- | --- |
```py
getwithbase(name)
```
獲取類似字典的設置及其 <cite>_BASE</cite> 對應的。
| 參數: | **name** (_string_) -- 類似字典的設置的名稱 |
| --- | --- |
```py
maxpriority()
```
返回所有設置中存在的最高優先級的數值,或返回 `default` 從 [`SETTINGS_PRIORITIES`](#scrapy.settings.SETTINGS_PRIORITIES "scrapy.settings.SETTINGS_PRIORITIES") 如果沒有存儲設置。
```py
set(name, value, priority='project')
```
存儲具有給定優先級的鍵/值屬性。
應填充設置 _before_ 配置爬蟲對象(通過 `configure()` 方法),否則它們不會有任何效果。
| 參數: |
* **name** (_string_) -- 設置名稱
* **value** (_any_) -- 要與設置關聯的值
* **priority** (_string_ _or_ _int_) -- 設置的優先級。應該是 [`SETTINGS_PRIORITIES`](#scrapy.settings.SETTINGS_PRIORITIES "scrapy.settings.SETTINGS_PRIORITIES") 或整數
|
| --- | --- |
```py
setmodule(module, priority='project')
```
存儲具有給定優先級的模塊的設置。
這是一個調用 [`set()`](#scrapy.settings.BaseSettings.set "scrapy.settings.BaseSettings.set") 對于每個全局聲明的大寫變量 `module` 提供的 `priority` .
| 參數: |
* **module** (_module object_ _or_ _string_) -- 模塊或模塊路徑
* **priority** (_string_ _or_ _int_) -- 設置的優先級。應該是 [`SETTINGS_PRIORITIES`](#scrapy.settings.SETTINGS_PRIORITIES "scrapy.settings.SETTINGS_PRIORITIES") 或整數
|
| --- | --- |
```py
update(values, priority='project')
```
存儲具有給定優先級的鍵/值對。
這是一個調用 [`set()`](#scrapy.settings.BaseSettings.set "scrapy.settings.BaseSettings.set") 每一項 `values` 提供的 `priority` .
如果 `values` 是一個字符串,它被假定為JSON編碼并被解析為一個dict `json.loads()` 第一。如果是 [`BaseSettings`](#scrapy.settings.BaseSettings "scrapy.settings.BaseSettings") 例如,每個鍵的優先級將被使用,并且 `priority` 參數被忽略。這允許使用單個命令插入/更新具有不同優先級的設置。
| 參數: |
* **values** (dict or string or [`BaseSettings`](#scrapy.settings.BaseSettings "scrapy.settings.BaseSettings")) -- 設置名稱和值
* **priority** (_string_ _or_ _int_) -- 設置的優先級。應該是 [`SETTINGS_PRIORITIES`](#scrapy.settings.SETTINGS_PRIORITIES "scrapy.settings.SETTINGS_PRIORITIES") 或整數
|
| --- | --- |
## SpiderLoader API
```py
class scrapy.loader.SpiderLoader
```
這個類負責檢索和處理整個項目中定義的 Spider 類。
通過在 [`SPIDER_LOADER_CLASS`](settings.html#std:setting-SPIDER_LOADER_CLASS) 項目設置。他們必須全面實施 `scrapy.interfaces.ISpiderLoader` 保證無誤執行的接口。
```py
from_settings(settings)
```
Scrapy使用該類方法創建該類的實例。它使用當前的項目設置調用,并加載在 [`SPIDER_MODULES`](settings.html#std:setting-SPIDER_MODULES) 設置。
| 參數: | **settings** ([`Settings`](#scrapy.settings.Settings "scrapy.settings.Settings") instance) -- 項目設置 |
| --- | --- |
```py
load(spider_name)
```
獲取具有給定名稱的 Spider 類。它將在先前加載的spider中查找具有名稱的spider類 `spider_name` 如果找不到,將引發keyerror。
| 參數: | **spider_name** (_str_) -- Spider 類名 |
| --- | --- |
```py
list()
```
獲取項目中可用 Spider 的名稱。
```py
find_by_request(request)
```
列出能夠處理給定請求的 Spider 的名稱。將嘗試將請求的URL與 Spider 的域相匹配。
| 參數: | **request** ([`Request`](request-response.html#scrapy.http.Request "scrapy.http.Request") instance) -- 查詢請求 |
| --- | --- |
## 信號API
## 統計收集器API
在 [`scrapy.statscollectors`](stats.html#module-scrapy.statscollectors "scrapy.statscollectors: Stats Collectors") 模塊和它們都實現由 [`StatsCollector`](#scrapy.statscollectors.StatsCollector "scrapy.statscollectors.StatsCollector") 類(它們都從中繼承)。
```py
class scrapy.statscollectors.StatsCollector
```
```py
get_value(key, default=None)
```
返回給定stats鍵的值,如果該鍵不存在,則返回默認值。
```py
get_stats()
```
以dict形式獲取當前運行的spider的所有統計信息。
```py
set_value(key, value)
```
為給定的stats鍵設置給定值。
```py
set_stats(stats)
```
使用傳入的dict重寫當前狀態 `stats` 爭論。
```py
inc_value(key, count=1, start=0)
```
假定給定的起始值(未設置時),按給定的計數遞增給定的stats鍵的值。
```py
max_value(key, value)
```
僅當同一個鍵的當前值小于值時,才為給定鍵設置給定值。如果給定鍵沒有當前值,則始終設置該值。
```py
min_value(key, value)
```
僅當同一鍵的當前值大于值時,才為給定鍵設置給定值。如果給定鍵沒有當前值,則始終設置該值。
```py
clear_stats()
```
清除所有統計。
以下方法不是stats集合API的一部分,而是在實現自定義stats收集器時使用的:
```py
open_spider(spider)
```
打開給定的 Spider 以收集統計信息。
```py
close_spider(spider)
```
關閉給定的 Spider 。調用之后,就不能訪問或收集更多的特定統計信息。
- 簡介
- 第一步
- Scrapy at a glance
- 安裝指南
- Scrapy 教程
- 實例
- 基本概念
- 命令行工具
- Spider
- 選擇器
- 項目
- 項目加載器
- Scrapy shell
- 項目管道
- Feed 導出
- 請求和響應
- 鏈接提取器
- 設置
- 例外情況
- 內置服務
- Logging
- 統計數據集合
- 發送電子郵件
- 遠程登錄控制臺
- Web服務
- 解決具體問題
- 常見問題
- 調試spiders
- Spider 合約
- 常用做法
- 通用爬蟲
- 使用瀏覽器的開發人員工具進行抓取
- 調試內存泄漏
- 下載和處理文件和圖像
- 部署 Spider
- AutoThrottle 擴展
- Benchmarking
- 作業:暫停和恢復爬行
- 延伸 Scrapy
- 體系結構概述
- 下載器中間件
- Spider 中間件
- 擴展
- 核心API
- 信號
- 條目導出器
- 其余所有
- 發行說明
- 為 Scrapy 貢獻
- 版本控制和API穩定性