爬蟲:Scrapy9 - Feed exports


實現爬蟲時最經常提到的需求就是能合適的保存爬取到的數據,或者說,生成一個帶有爬取數據的“輸出文件”(通常叫“輸出 feed”),來供其它系統使用。

Scrapy 自帶了 Feed 輸出,並且支持多種序列化格式(serialization format)及存儲方式(storage backends)。

序列化方式(serialization formats)

feed 輸出使用到了 Item exporters。其自帶支持的類型有:

  • JSON
  • JSON Lines
  • CSV
  • XML

也可以通過 FEED_EXPORTERS 設置擴展支持的屬性。

JSON

  • FEED_FORMAT: json
  • 使用的 exporter: JsonItemExporter
  • 大數據量情況下使用 JSON 請參見 這個警告

JSON lines

  • FEED_FORMAT: jsonlines
  • 使用的 exporter: JsonLinesItemExporter

CSV

  • FEED_FORMAT: csv
  • 使用的 exporter: CsvItemExporter

XML

  • FEED_FORMAT: xml
  • 使用的 exporter: XmlItemExporter

Pickle

  • FEED_FORMAT: pickle
  • 使用的 exporter: PickleItemExporter

Marshal

  • FEED_FORMAT: marshal
  • 使用的 exporter: MarshalItemExporter

存儲(Storages)

使用 feed 輸出時可以通過使用 URL(通過 FEED_URI 設置)來定義存儲端。feed 輸出支持 URI 方式支持的多種存儲后端類型。

自帶支持的存儲后端有:

  • 本地文件系統
  • FTP
  • S3(需要 boto)
  • 標注輸出

有些存儲后端會因為所需外部庫未安裝而不可用。例如,S3 只有在 boto 庫安裝的情況下才可用。

存儲 URI 參數

存儲 URI 也包含參數。當 feed 被創建時這些參數可以被覆蓋:

  • %(time)s - 當 feed 被創建時被 timestamp 覆蓋
  • %(name)s - 被 spider 的名字覆蓋

其它命名的參數會被 spider 同名的屬性所覆蓋。例如,當 feed 被創建時,%(site_id)s 將會被 spider.site_id 屬性所覆蓋。

示例:

  • 存儲在 FTP,每個 spider 一個目錄:
    • ftp://user:password@ftp.example.com/scraping/feeds/%(name)s/%(time)s.json
  • 存儲在 S3,每個 spider 一個目錄:
    • s3://mybucket/scraping/feeds/%(name)s/%(time)s.json

存儲端(Storage backends)

本地文件系統

將 feed 存儲在本地系統。

  • URI scheme:file
  • URI 樣例:file://tmp/export.csv
  • 需要的外部依賴庫:none

注意: (只有)存儲在本地文件系統時,您可以指定一個絕對路徑 /tmp/export.csv 並忽略協議(scheme)。不過這僅僅只能在 Unix 系統中工作。

FTP

將 feed 存儲在 FTP 服務器。

  • URI scheme:ftp
  • URI 樣例:ftp://user:pass@ftp.example.com/path/to/export.csv
  • 需要的外部依賴庫:none

S3

將 feed 存儲在 Amazon S3 。

  • URI scheme: s3
  • URI 樣例:
    • s3://mybucket/path/to/export.csv
    • s3://aws_key:aws_secret@mybucket/path/to/export.csv
  • 需要的外部依賴庫: boto

您可以通過在 URI 中傳遞 user/pass 來完成 AWS 認證,或者也可以通過下列的設置來完成:

AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY

標准輸出

feed 輸出到 Scrapy 進程的標准輸出。

  • URI scheme: stdout
  • URI 樣例: stdout:
  • 需要的外部依賴庫: none

設定(settings)

這些是配置 feed 輸出的設定:

  • FEED_URI (必須)
  • FEED_FORMAT
  • FEED_STORAGES
  • FEED_EXPORTERS
  • FEED_STORE_EMPTY

FEED_URI

Default:None

輸出 feed 的 URI。支持的 URI 協議請參見存儲端(Storage backends)

為了啟用 feed 輸出,該設定是必須的。

FEED_FORMAT

輸出 feed 的序列化格式。可用的值請參見序列化方式(Serialization formats)

FEED_STORE_EMPTY

Default:False

是否輸出空 feed(沒有 item 的 feed)。

FEED_STORAGES

Default::{}

包含項目支持的額外 feed 存儲端的字典。 字典的鍵(key)是 URI 協議(scheme),值是存儲類(storage class)的路徑。

FEED_STORAGES_BASE

Default:

{
    '': 'scrapy.contrib.feedexport.FileFeedStorage',
    'file': 'scrapy.contrib.feedexport.FileFeedStorage',
    'stdout': 'scrapy.contrib.feedexport.StdoutFeedStorage',
    's3': 'scrapy.contrib.feedexport.S3FeedStorage',
    'ftp': 'scrapy.contrib.feedexport.FTPFeedStorage',
}

包含 Scrapy 內置支持的 feed 存儲端的字典。

FEED_EXPORTERS

Default::{}

包含項目支持的額外輸出器(exporter)的字典。 該字典的鍵(key)是 URI 協議(scheme),值是 Item 輸出器(exporter) 類的路徑。

FEED_EXPORTERS_BASE

Default:

FEED_EXPORTERS_BASE = {
    'json': 'scrapy.contrib.exporter.JsonItemExporter',
    'jsonlines': 'scrapy.contrib.exporter.JsonLinesItemExporter',
    'csv': 'scrapy.contrib.exporter.CsvItemExporter',
    'xml': 'scrapy.contrib.exporter.XmlItemExporter',
    'marshal': 'scrapy.contrib.exporter.MarshalItemExporter',
}

包含 Scrpay 內置支持的 feed 輸出器(exporter)的字典。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM