scrapy 2.3 Feed導(dǎo)出設(shè)置

2021-06-09 11:26 更新

設(shè)置

以下是用于配置源導(dǎo)出的設(shè)置:

FEEDS (強(qiáng)制性)FEED_EXPORT_ENCODINGFEED_STORE_EMPTYFEED_EXPORT_FIELDSFEED_EXPORT_INDENTFEED_STORAGESFEED_STORAGE_FTP_ACTIVEFEED_STORAGE_S3_ACLFEED_EXPORTERSFEED_EXPORT_BATCH_ITEM_COUNT

FEEDS

2.1 新版功能.

違約: ?{{}}?

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

啟用提要導(dǎo)出功能需要此設(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'],
    },
}

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

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

注解

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

FEED_EXPORT_ENCODING

違約: ?None?

要用于源的編碼。

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

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

FEED_EXPORT_FIELDS

違約: ?None?

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

使用feed_export_fields選項(xiàng)定義要導(dǎo)出的字段及其順序。

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

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

FEED_EXPORT_INDENT

違約: ?0?

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

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

FEED_STORE_EMPTY

違約: ?False?

是否導(dǎo)出空源(即沒有項(xiàng)的源)。

FEED_STORAGES

違約: ?{{}}?

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

FEED_STORAGE_FTP_ACTIVE

違約: ?False?

將源導(dǎo)出到FTP服務(wù)器時(shí)是否使用活動(dòng)連接模式 (?True? )或者使用被動(dòng)連接模式 (?False? ,默認(rèn))。

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

FEED_STORAGE_S3_ACL

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

包含項(xiàng)目導(dǎo)出到AmazonS3的源的自定義ACL的字符串。

有關(guān)可用值的完整列表,請?jiān)L問 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支持的內(nèi)置提要存儲后端的dict。您可以通過分配 ?None? 到他們的URI方案 ?FEED_STORAGES? . 例如,要禁用內(nèi)置FTP存儲后端(不替換),請將其放入 ?settings.py? ::

FEED_STORAGES = {
    'ftp': None,
}

FEED_EXPORTERS

違約: ?{{}}?

包含項(xiàng)目支持的其他導(dǎo)出器的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支持的內(nèi)置飼料導(dǎo)出器的dict。您可以通過分配 ?None? 到其序列化格式 ?FEED_EXPORTERS? . 例如,要禁用內(nèi)置的csv導(dǎo)出器(不替換),請將其放入 ?settings.py? ::

FEED_EXPORTERS = {
    'csv': None,
}

FEED_EXPORT_BATCH_ITEM_COUNT

違約: ?0?

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

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

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

例如,如果您的設(shè)置包括:

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

其中第一個(gè)和第二個(gè)文件正好包含100個(gè)項(xiàng)目。最后一個(gè)包含100個(gè)項(xiàng)目或更少。

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

FEED_URI_PARAMS

違約: ?None?

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

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

scrapy.extensions.feedexport.uri_params(paramsspider)

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

參數(shù)
  • params (dict) -- 特定的默認(rèn)鍵值對:- 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 ,微秒設(shè)置為 0 .

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

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

  1. 在項(xiàng)目的某個(gè)地方定義以下函數(shù):# myproject/utils.py def uri_params(params, spider): return {**params, 'spider_name': spider.name}
  2. Point ?FEED_URI_PARAMS? 到您設(shè)置中的函數(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"
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號