# Feed 導出
> 譯者:[OSGeo 中國](https://www.osgeo.cn/)
0.10 新版功能.
在實現scraper時,最經常需要的功能之一是能夠正確地存儲被抓取的數據,這通常意味著用被抓取的數據(通常稱為“導出提要”)生成一個“導出文件”,供其他系統使用。
Scrapy隨提要導出一起提供了開箱即用的功能,它允許您使用多個序列化格式和存儲后端生成帶有已擦除項的提要。
## 序列化格式
為了序列化抓取的數據,提要導出使用 [Item exporters](exporters.html#topics-exporters) . 開箱即用支持這些格式:
> * [JSON](#topics-feed-format-json)
> * [杰森線](#topics-feed-format-jsonlines)
> * [CSV](#topics-feed-format-csv)
> * [XML](#topics-feed-format-xml)
但是您也可以通過 [`FEED_EXPORTERS`](#std:setting-FEED_EXPORTERS) 設置。
### JSON
> * [`FEED_FORMAT`](#std:setting-FEED_FORMAT): `json`
> * 出口商: [`JsonItemExporter`](exporters.html#scrapy.exporters.JsonItemExporter "scrapy.exporters.JsonItemExporter")
> * 見 [this warning](exporters.html#json-with-large-data) 如果您使用的是大型提要的JSON。
### 杰森線
> * [`FEED_FORMAT`](#std:setting-FEED_FORMAT): `jsonlines`
> * 出口商: [`JsonLinesItemExporter`](exporters.html#scrapy.exporters.JsonLinesItemExporter "scrapy.exporters.JsonLinesItemExporter")
### CSV
> * [`FEED_FORMAT`](#std:setting-FEED_FORMAT): `csv`
> * 出口商: [`CsvItemExporter`](exporters.html#scrapy.exporters.CsvItemExporter "scrapy.exporters.CsvItemExporter")
> * 指定要導出的列及其順序的步驟使用 [`FEED_EXPORT_FIELDS`](#std:setting-FEED_EXPORT_FIELDS) . 其他feed導出器也可以使用此選項,但對于csv很重要,因為與許多其他導出格式不同,csv使用固定頭。
### XML
> * [`FEED_FORMAT`](#std:setting-FEED_FORMAT): `xml`
> * 出口商: [`XmlItemExporter`](exporters.html#scrapy.exporters.XmlItemExporter "scrapy.exporters.XmlItemExporter")
### 泡菜
> * [`FEED_FORMAT`](#std:setting-FEED_FORMAT): `pickle`
> * 出口商: [`PickleItemExporter`](exporters.html#scrapy.exporters.PickleItemExporter "scrapy.exporters.PickleItemExporter")
### 元帥
> * [`FEED_FORMAT`](#std:setting-FEED_FORMAT): `marshal`
> * 出口商: `MarshalItemExporter`
## 儲藏室
當使用feed導出時,您定義使用uri(通過 [`FEED_URI`](#std:setting-FEED_URI) 設置)。提要導出支持由URI方案定義的多個存儲后端類型。
開箱支持的存儲后端包括:
> * [本地文件系統](#topics-feed-storage-fs)
> * [FTP](#topics-feed-storage-ftp)
> * [S3](#topics-feed-storage-s3) (需要botocore_u或boto_u)
> * [標準輸出](#topics-feed-storage-stdout)
如果所需的外部庫不可用,則某些存儲后端可能不可用。例如,只有在安裝了botocore_u或boto_u庫的情況下,S3后端才可用(scrapy僅在python 2上支持boto_u)。
## 存儲URI參數
存儲URI還可以包含在創建源時被替換的參數。這些參數是:
> * `%(time)s` -在創建源時被時間戳替換
> * `%(name)s` -替換為 Spider 名稱
任何其他命名參數都將被同名的spider屬性替換。例如, `%(site_id)s` 將被替換為 `spider.site_id` 屬性為正在創建源的時刻。
下面舉例說明:
> * 使用每個spider一個目錄存儲在ftp中:
> * `ftp://user:password@ftp.example.com/scraping/feeds/%(name)s/%(time)s.json`
> * 使用每個spider一個目錄存儲在S3中:
> * `s3://mybucket/scraping/feeds/%(name)s/%(time)s.json`
## 存儲后端
### 本地文件系統
源存儲在本地文件系統中。
> * URI方案: `file`
> * 示例性URI: `file:///tmp/export.csv`
> * 所需外部庫:無
請注意,對于本地文件系統存儲(僅限),如果您指定類似 `/tmp/export.csv` . 不過,這只在UNIX系統上工作。
### FTP
這些提要存儲在FTP服務器中。
> * URI方案: `ftp`
> * 示例性URI: `ftp://user:pass@ftp.example.com/path/to/export.csv`
> * 所需外部庫:無
### S3
源存儲在 [Amazon S3](https://aws.amazon.com/s3/) .
> * URI方案: `s3`
> * URI示例:
> * `s3://mybucket/path/to/export.csv`
> * `s3://aws_key:aws_secret@mybucket/path/to/export.csv`
> * 所需的外部庫: [botocore](https://github.com/boto/botocore) (python 2和python 3)或 [boto](https://github.com/boto/boto) (僅Python 2)
AWS憑證可以作為用戶/密碼在URI中傳遞,也可以通過以下設置傳遞:
> * [`AWS_ACCESS_KEY_ID`](settings.html#std:setting-AWS_ACCESS_KEY_ID)
> * [`AWS_SECRET_ACCESS_KEY`](settings.html#std:setting-AWS_SECRET_ACCESS_KEY)
還可以使用此設置為導出的源定義自定義ACL:
> * [`FEED_STORAGE_S3_ACL`](#std:setting-FEED_STORAGE_S3_ACL)
### 標準輸出
進料被寫入廢料處理的標準輸出。
> * URI方案: `stdout`
> * 示例性URI: `stdout:`
> * 所需外部庫:無
## 設置
以下是用于配置源導出的設置:
> * [`FEED_URI`](#std:setting-FEED_URI) (強制性)
> * [`FEED_FORMAT`](#std:setting-FEED_FORMAT)
> * [`FEED_STORAGES`](#std:setting-FEED_STORAGES)
> * [`FEED_STORAGE_S3_ACL`](#std:setting-FEED_STORAGE_S3_ACL)
> * [`FEED_EXPORTERS`](#std:setting-FEED_EXPORTERS)
> * [`FEED_STORE_EMPTY`](#std:setting-FEED_STORE_EMPTY)
> * [`FEED_EXPORT_ENCODING`](#std:setting-FEED_EXPORT_ENCODING)
> * [`FEED_EXPORT_FIELDS`](#std:setting-FEED_EXPORT_FIELDS)
> * [`FEED_EXPORT_INDENT`](#std:setting-FEED_EXPORT_INDENT)
### FEED_URI
違約: `None`
導出源的URI。見 [存儲后端](#topics-feed-storage-backends) 用于支持的URI方案。
啟用源導出需要此設置。
### FEED_FORMAT
要用于源的序列化格式。見 [序列化格式](#topics-feed-format) 對于可能的值。
### FEED_EXPORT_ENCODING
違約: `None`
要用于源的編碼。
如果未設置或設置為 `None` (默認)它對除JSON輸出之外的所有內容都使用UTF-8,JSON輸出使用安全的數字編碼。( `\uXXXX` 序列)出于歷史原因。
使用 `utf-8` 如果您也想要為JSON使用UTF-8。
### FEED_EXPORT_FIELDS
違約: `None`
要導出的字段列表,可選。例子: `FEED_EXPORT_FIELDS = ["foo", "bar", "baz"]` .
使用feed_export_fields選項定義要導出的字段及其順序。
當feed-export-fields為空或無時(默認),scrappy使用dicts或 [`Item`](items.html#scrapy.item.Item "scrapy.item.Item") Spider 正在屈服的亞綱。
如果導出器需要一組固定的字段(這是 [CSV](#topics-feed-format-csv) export format)和feed_export_字段為空或無,然后scrapy嘗試從導出的數據中推斷字段名-當前它使用第一個項目中的字段名。
### FEED_EXPORT_INDENT
違約: `0`
用于在每個級別上縮進輸出的空間量。如果 `FEED_EXPORT_INDENT` 是非負整數,則數組元素和對象成員將以該縮進級別進行漂亮打印。縮進量 `0` (默認值)或負數,將把每個項目放到一個新行上。 `None` 選擇最緊湊的表示形式。
當前僅由執行 [`JsonItemExporter`](exporters.html#scrapy.exporters.JsonItemExporter "scrapy.exporters.JsonItemExporter") 和 [`XmlItemExporter`](exporters.html#scrapy.exporters.XmlItemExporter "scrapy.exporters.XmlItemExporter") ,即當您要導出到 `.json` 或 `.xml` .
### FEED_STORE_EMPTY
違約: `False`
是否導出空源(即沒有項目的源)。
### FEED_STORAGES
違約: `{{}}`
包含項目支持的其他提要存儲后端的dict。鍵是URI方案,值是指向存儲類的路徑。
### FEED_STORAGE_S3_ACL
違約: `''` (空字符串)
包含項目導出到AmazonS3的源的自定義ACL的字符串。
有關可用值的完整列表,請訪問 [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) 亞馬遜S3文檔部分。
### FEED_STORAGES_BASE
違約::
```py
{
'': 'scrapy.extensions.feedexport.FileFeedStorage',
'file': 'scrapy.extensions.feedexport.FileFeedStorage',
'stdout': 'scrapy.extensions.feedexport.StdoutFeedStorage',
's3': 'scrapy.extensions.feedexport.S3FeedStorage',
'ftp': 'scrapy.extensions.feedexport.FTPFeedStorage',
}
```
包含由Scrapy支持的內置提要存儲后端的dict。您可以通過分配 `None` 到他們的URI方案 [`FEED_STORAGES`](#std:setting-FEED_STORAGES) . 例如,要禁用內置FTP存儲后端(不替換),請將其放入 `settings.py` ::
```py
FEED_STORAGES = {
'ftp': None,
}
```
### FEED_EXPORTERS
違約: `{{}}`
包含項目支持的其他導出器的dict。鍵是序列化格式,值是指向 [Item exporter](exporters.html#topics-exporters) 類。
### FEED_EXPORTERS_BASE
違約::
```py
{
'json': 'scrapy.exporters.JsonItemExporter',
'jsonlines': 'scrapy.exporters.JsonLinesItemExporter',
'jl': 'scrapy.exporters.JsonLinesItemExporter',
'csv': 'scrapy.exporters.CsvItemExporter',
'xml': 'scrapy.exporters.XmlItemExporter',
'marshal': 'scrapy.exporters.MarshalItemExporter',
'pickle': 'scrapy.exporters.PickleItemExporter',
}
```
包含由Scrapy支持的內置飼料導出器的dict。您可以通過分配 `None` 到其序列化格式 [`FEED_EXPORTERS`](#std:setting-FEED_EXPORTERS) . 例如,要禁用內置的csv導出器(不替換),請將其放入 `settings.py` ::
```py
FEED_EXPORTERS = {
'csv': None,
}
```
- 簡介
- 第一步
- Scrapy at a glance
- 安裝指南
- Scrapy 教程
- 實例
- 基本概念
- 命令行工具
- Spider
- 選擇器
- 項目
- 項目加載器
- Scrapy shell
- 項目管道
- Feed 導出
- 請求和響應
- 鏈接提取器
- 設置
- 例外情況
- 內置服務
- Logging
- 統計數據集合
- 發送電子郵件
- 遠程登錄控制臺
- Web服務
- 解決具體問題
- 常見問題
- 調試spiders
- Spider 合約
- 常用做法
- 通用爬蟲
- 使用瀏覽器的開發人員工具進行抓取
- 調試內存泄漏
- 下載和處理文件和圖像
- 部署 Spider
- AutoThrottle 擴展
- Benchmarking
- 作業:暫停和恢復爬行
- 延伸 Scrapy
- 體系結構概述
- 下載器中間件
- Spider 中間件
- 擴展
- 核心API
- 信號
- 條目導出器
- 其余所有
- 發行說明
- 為 Scrapy 貢獻
- 版本控制和API穩定性