1. 程式人生 > >Scrapy——Feed exports

Scrapy——Feed exports

實現爬蟲時最經常提到的需求就是能合適的儲存爬取到的資料,或者說,生成一個帶有爬取資料的“輸出檔案”,來供其它系統使用。 Scrapy自帶了Feed輸出,並且支援多種序列化格式及儲存方式。

序列化方式

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

  • JSON
  • JSON lines
  • CSV
  • XML

也可以通過FEED_EXPORTERS設定擴充套件支援的屬性。

JSON

  • FEED_FORMAT:json
  • 使用的exporter:JsonItemExporter

JSON lines

  • FEED_FORMAT:jsonlines
  • 使用的exporter:JsonLinesItemExporter

CSV

  • FEED_FORAT:csv
  • 使用的exporter:CsvItemExporter

XML

  • FEED_FORMAT:xml
  • 使用的exporter:XmlItemExporter

Pickle

  • FEED_FORMAT:pickle
  • 使用的exporter:PickleItemExporter

Marshal

  • FEED_FORMAT:marshal
  • 使用的exporter:MarshalItemExporter

儲存

使用feed輸出時你可以通過使用URL來定義儲存端。feed輸出支援URL方式支援的多種儲存後端型別。 自帶支援的儲存後端有:

  • 本地檔案系統
  • FTP
  • S3
  • 標準輸出

儲存URL引數

儲存URL也包含引數。當feed被建立時這些引數可以被覆蓋:

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

其他命名的引數會被spider同名屬性所覆蓋。

儲存端

本地檔案系統 將feed儲存在本地系統。

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

只有在本地檔案系統時,你可以指定一個絕對路徑/tmp/export.csv並忽略協議。不過這僅僅只能在Unix系統中工作。 FTP 將feed儲存在FTP伺服器

  • URL scheme:ftp
  • URL樣例:
ftp://user:[email protected]/path/to/export.csv
  • 需要的外部依賴庫:none

S3 將feed儲存在Amazon S3

  • URL scheme:S3
  • URL樣例:
  • 需要的外部依賴庫:boto

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

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

標準輸出 feed輸出到Scrapy程序的標準輸出

  • URL scheme:stdout
  • URL樣例:stdout
  • 不需要外部依賴庫

設定

配置feed輸出的設定:

  • **FEED_URL:**輸出feed的URL。
  • **FEED_FORMAT:**輸出feed的序列化格式。
  • **FEED_STORE_EMPTY:**是否輸出空feed。
  • **FEED_STORAGES:**包含專案支援的額外feed儲存端的字典。字典的鍵是URL協議,值是儲存類的路徑。
  • 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 包含專案支援的額外輸出器的字典,該字典的鍵是URL協議,值是Item輸出器類的路徑。 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',
}

包含Scrapy內建支援的feed輸出器的字典。