scrapy 2.3 Feed導出設置

2021-06-09 11:26 更新

設置

以下是用于配置源導出的設置:

FEEDS (強制性)FEED_EXPORT_ENCODINGFEED_STORE_EMPTYFEED_EXPORT_FIELDSFEED_EXPORT_INDENTFEED_STORAGESFEED_STORAGE_FTP_ACTIVEFEED_STORAGE_S3_ACLFEED_EXPORTERSFEED_EXPORT_BATCH_ITEM_COUNT

FEEDS

2.1 新版功能.

違約: ?{{}}?

一個字典,其中每個鍵都是一個feed URI(或 ?pathlib.Path? 對象),每個值都是一個嵌套字典,其中包含特定提要的配置參數(shù)。

啟用提要導出功能需要此設置。

見 存儲后端 用于支持的URI方案。

例如::

{
    'items.json': {
        'format': 'json',
        'encoding': 'utf8',
        'store_empty': False,
        'fields': None,
        'indent': 4,
        'item_export_kwargs': {
           'export_empty_fields': True,
        },
    },
    '/home/user/documents/items.xml': {
        'format': 'xml',
        'fields': ['name', 'price'],
        'encoding': 'latin1',
        'indent': 8,
    },
    pathlib.Path('items.csv'): {
        'format': 'csv',
        'fields': ['price', 'name'],
    },
}

以下是接受的鍵和設置的列表,如果沒有為特定的源定義提供該鍵,則該設置用作回退值:

  • ?format? : serialization format .此設置是必需的,沒有回退值。
  • ?batch_item_count? :回到 ?FEED_EXPORT_BATCH_ITEM_COUNT? .
  • ?encoding? :回到 ?FEED_EXPORT_ENCODING? .
  • ?fields? :回到 ?FEED_EXPORT_FIELDS? .
  • ?indent? :回到 ?FEED_EXPORT_INDENT? .
  • ?item_export_kwargs?: ?dict? 對應的關鍵字參數(shù) item exporter class .
  • ?overwrite? :如果文件已存在,是否覆蓋該文件 (?True? )或附加到其內容中 (?False? )默認值取決于 storage backend :
  • 本地文件系統(tǒng): ?False?
  • FTP: ?True?

注解

    某些FTP服務器可能不支持附加到文件( ?APPE? FTP命令)。
  • S3 : ?True? (附加 is not supported ) 
  • 標準輸出 : ?False? (不支持覆蓋)
  • ?store_empty? :回到 ?FEED_STORE_EMPTY? .
  • ?uri_params? :回到 ?FEED_URI_PARAMS? .

FEED_EXPORT_ENCODING

違約: ?None?

要用于源的編碼。

如果未設置或設置為 ?None? (默認)它對除JSON輸出外的所有內容都使用UTF-8,JSON輸出使用安全的數(shù)字編碼。 (?\uXXXX? 序列)出于歷史原因。

使用 ?utf-8? 如果您也想要為JSON使用UTF-8。

FEED_EXPORT_FIELDS

違約: ?None?

要導出的字段列表,可選。例子: FEED_EXPORT_FIELDS = ["foo", "bar", "baz"] .

使用feed_export_fields選項定義要導出的字段及其順序。

當FEED_EXPORT_FIELDS為空或?None?(默認值)時,Scrapy使用中定義的字段 item objects 你的蜘蛛屈服了。

如果導出器需要一組固定的字段(這是 CSV export format)和feed_export_字段為空或無,然后scrapy嘗試從導出的數(shù)據(jù)中推斷字段名-當前它使用第一個項目中的字段名。

FEED_EXPORT_INDENT

違約: ?0?

用于在每個級別上縮進輸出的空間量。如果 ?FEED_EXPORT_INDENT? 是非負整數(shù),則數(shù)組元素和對象成員將以該縮進級別進行漂亮打印。縮進量 ?0? (默認值)或負數(shù),將把每個項目放到一個新行上。 ?None? 選擇最緊湊的表示形式。

當前僅由執(zhí)行 ?JsonItemExporter? 和 ?XmlItemExporter? ,即當您要導出到 ?.json? 或 ?.xml? .

FEED_STORE_EMPTY

違約: ?False?

是否導出空源(即沒有項的源)。

FEED_STORAGES

違約: ?{{}}?

包含項目支持的其他提要存儲后端的dict。鍵是URI方案,值是指向存儲類的路徑。

FEED_STORAGE_FTP_ACTIVE

違約: ?False?

將源導出到FTP服務器時是否使用活動連接模式 (?True? )或者使用被動連接模式 (?False? ,默認)。

有關ftp連接模式的信息,請參閱 What is the difference between active and passive FTP? .

FEED_STORAGE_S3_ACL

違約: ?''? (空字符串)

包含項目導出到AmazonS3的源的自定義ACL的字符串。

有關可用值的完整列表,請訪問 Canned ACL 亞馬遜S3文檔部分。

FEED_STORAGES_BASE

違約::

{
    '': '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? . 例如,要禁用內置FTP存儲后端(不替換),請將其放入 ?settings.py? ::

FEED_STORAGES = {
    'ftp': None,
}

FEED_EXPORTERS

違約: ?{{}}?

包含項目支持的其他導出器的dict。鍵是序列化格式,值是指向 Item exporter 類。

FEED_EXPORTERS_BASE

違約::

{
    '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? . 例如,要禁用內置的csv導出器(不替換),請將其放入 ?settings.py? ::

FEED_EXPORTERS = {
    'csv': None,
}

FEED_EXPORT_BATCH_ITEM_COUNT

違約: ?0?

如果分配了一個大于 ?0? ,Scrapy生成多個輸出文件,每個輸出文件中最多存儲指定數(shù)量的項。

生成多個輸出文件時,必須在提要URI中至少使用以下一個占位符來指示如何生成不同的輸出文件名:

  • ?%(batch_time)s? -在創(chuàng)建源時被時間戳替換(例如。 ?2020-03-28T14-45-08.237134? )
  • %(batch_id)d -替換為批處理的從1開始的序列號。使用 printf-style string formatting 改變數(shù)字格式。例如,要根據(jù)需要引入前導零,使批次標識為5位數(shù)字,請使用 ?%(batch_id)05d? (例如) ?3? 變成 ?00003? , ?123? 變成 ?00123? )

例如,如果您的設置包括:

FEED_EXPORT_BATCH_ITEM_COUNT = 100

你的呢 ?crawl? 命令行是:

scrapy crawl spidername -o "dirname/%(batch_id)d-filename%(batch_time)s.json"

上面的命令行可以生成如下目錄樹:

->projectname
-->dirname
--->1-filename2020-03-28T14-45-08.237134.json
--->2-filename2020-03-28T14-45-09.148903.json
--->3-filename2020-03-28T14-45-10.046092.json

其中第一個和第二個文件正好包含100個項目。最后一個包含100個項目或更少。

注解 某些FTP服務器可能不支持附加到文件( APPE FTP命令)。S3 : True (附加 is not supported ) 標準輸出 : False (不支持覆蓋) store_empty :回到 FEED_STORE_EMPTY . uri_params :回到 FEED_URI_PARAMS .

FEED_URI_PARAMS

違約: ?None?

包含函數(shù)導入路徑的字符串,用于設置要應用的參數(shù) printf-style string formatting 到源URI。

函數(shù)簽名應如下所示:

scrapy.extensions.feedexport.uri_params(paramsspider)

返回A ?dict? 要應用于提要URI的鍵值對 printf-style string formatting .

參數(shù)
  • params (dict) -- 特定的默認鍵值對:- batch_id: ID of the file batch. See ?FEED_EXPORT_BATCH_ITEM_COUNT?. If ?FEED_EXPORT_BATCH_ITEM_COUNT? is 0batch_id is always 1. - batch_time: UTC date and time, in ISO format with : replaced with `` -.      看到了嗎 :setting:`FEED_EXPORT_BATCH_ITEM_COUNT` .  - ``time : batch_time ,微秒設置為 0 .

  • spider (scrapy.spiders.Spider) -- 源蜘蛛的飼料項目

例如,包括 ?name? 源URI中源蜘蛛的:

  1. 在項目的某個地方定義以下函數(shù):# myproject/utils.py def uri_params(params, spider): return {**params, 'spider_name': spider.name}
  2. Point ?FEED_URI_PARAMS? 到您設置中的函數(shù)::# myproject/settings.py FEED_URI_PARAMS = 'myproject.utils.uri_params'
  3. 使用 ?%(spider_name)s? 在你的源URI中:scrapy crawl <spider_name> -o "%(spider_name)s.jl"
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號