フィード・エクスポート

バージョン 0.10 で追加.

スクレーパーを実装するときに最も頻繁に必要な機能の1つは、スクレイピングデータを適切に保存できることです。これは、他のシステムで使用されるスクレイピングデータ(一般に「エクスポートフィード」)を含む「エクスポートファイル」を生成することを意味します。

Scrapyはこの機能をすぐに使えるフィード・エクスポートで提供します。これにより、複数のシリアル化形式とストレージバックエンドを使用して、スクレイプされたアイテムを含むフィードを生成できます。

シリアル化形式

スクレイピングされたデータをシリアル化するために、フィードのエクスポートは アイテム・エクスポーター を使用します。 これらの形式はすぐに使用できます:

しかし、あなたは、 FEED_EXPORTERS 設定を通してサポートされているフォーマットを拡張することもできます。

JSON

  • FEED_FORMAT: json

  • 使用されるエクスポーター: JsonItemExporter

  • JSONを大きなフィードで使用している場合は、 注意 :ref: この警告<json-with-large-data> を参照してください。

JSON lines

CSV

  • FEED_FORMAT: csv

  • 使用されるエクスポーター: CsvItemExporter

  • エクスポートする列とその順序を指定するには、 FEED_EXPORT_FIELDS を使用します。 他のフィードエクスポーターもこのオプションを使用できますが、他の多くのエクスポート形式とは異なり、CSVは固定ヘッダーを使用するため、CSVでは重要です。

XML

Pickle

Marshal

  • FEED_FORMAT: marshal

  • 使用されるエクスポーター: MarshalItemExporter

ストレージ

フィード・エクスポートを使用する場合、URI を使用して( FEED_URI 設定を使用して)フィードを保存する場所を定義します。フィード・エクスポートは、URIスキームで定義された複数のストレージバックエンドタイプをサポートします。

すぐに使用できるストレージバックエンドは次のとおりです:

必要な外部ライブラリが利用できない場合、一部のストレージバックエンドは利用できません。 たとえば、S3バックエンドは、botocore または boto ライブラリがインストールされている場合にのみ使用できます(ScrapyはPython2でのみ boto をサポートします)。

ストレージURIパラメーター

ストレージURIには、フィードの作成時に置換されるパラメーターを含めることもできます。これらのパラメーターは次のとおりです:

  • %(time)s - フィードの作成時にタイムスタンプに置き換えられます

  • %(name)s - スパイダー名に置き換えられます

他の名前付きパラメーターは、同じ名前のスパイダー属性に置き換えられます。 たとえば、フィードが作成された瞬間に %(site_id)sspider.site_id 属性に置き換えられます。

以下に例を示します:

  • スパイダーごとに1つのディレクトリを使用してFTPに保存します:

    • ftp://user:password@ftp.example.com/scraping/feeds/%(name)s/%(time)s.json

  • スパイダーごとに1つのディレクトリを使用して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

  • 必要な外部ライブラリ: なし

FTPは、2つの異なる接続モードをサポートしています。アクティブまたはパッシブ(active or passive)です。Scrapyはデフォルトでパッシブ接続モードを使用します。 代わりにアクティブな接続モードを使用するには、 FEED_STORAGE_FTP_ACTIVE 設定を True に設定します。

S3

フィードは Amazon S3 に保存されます。

  • URIスキーム: s3

  • URI例:

    • s3://mybucket/path/to/export.csv

    • s3://aws_key:aws_secret@mybucket/path/to/export.csv

  • 必要な外部ライブラリ: botocore (Python2およびPython3) または boto (Python2のみ)

AWS認証情報は、URIでユーザー/パスワードとして渡すことができます。または、以下の設定を介して渡すことができます:

あなたは、この設定を使用して、エクスポートされたフィードのカスタムACLを定義することもできます:

標準出力

フィードは、Scrapyプロセスの標準出力に書き込まれます。

  • URIスキーム: stdout

  • URI例: stdout:

  • 必要な外部ライブラリ: なし

設定

これらは、フィードのエクスポートの構成(configuration)に使用される設定です:

FEED_URI

デフォルト: None

エクスポートフィードのURI。 サポートされているURIスキームについては、 ストレージ・バックエンド を参照してください。

この設定は、フィード・エクスポートを有効にするために必要です。

FEED_FORMAT

フィードに使用されるシリアル化形式。 設定可能な値については、 シリアル化形式 を参照してください。

FEED_EXPORT_ENCODING

デフォルト: None

フィードに使用されるエンコード。

設定されていないか None (デフォルト)に設定されている場合、歴史的な理由で、安全な数値エンコーディング( \uXXXX シーケンス)を使用するJSON出力を除く、すべてでUTF-8を使用します。

JSONにもUTF-8が必要な場合は utf-8 を使用します。

FEED_EXPORT_FIELDS

デフォルト: None

エクスポートするフィールドのリスト。オプション。 例: FEED_EXPORT_FIELDS = ["foo", "bar", "baz"]

FEED_EXPORT_FIELDSオプションを使用して、エクスポートするフィールドとその順序を定義します。

FEED_EXPORT_FIELDSが空またはNone (デフォルト)の場合、Scrapyは辞書または Item のサブクラスで定義されたフィールドを使用し、スパイダーが生成します。

エクスポーターがフィールドの固定セットを必要とする場合( CSV エクスポート形式の場合)、FEED_EXPORT_FIELDSが空またはNoneの場合、Scrapyはエクスポートされたデータからフィールド名を推測しようとします。今のところは、最初のアイテムのフィールド名を使用しています。

FEED_EXPORT_INDENT

デフォルト: 0

各レベルで出力をインデントするために使用されるスペースの量。 FEED_EXPORT_INDENT が負でない整数の場合、配列要素とオブジェクトメンバーはそのインデントレベルできれいに印刷されます。インデントレベル 0 (デフォルト)、または負の場合、各アイテムは新しい行に配置されます。 None は、最もコンパクトな表現を選択します。

現在、 JsonItemExporterXmlItemExporter のみ実装されています。つまり、 .json または .xml にエクスポートする場合です。

FEED_STORE_EMPTY

デフォルト: False

空のフィード(つまり、アイテムのないフィード)をエクスポートするかどうか。

FEED_STORAGES

デフォルト: {}

プロジェクトでサポートされている追加のフィードストレージバックエンドを含む辞書。 キーはURIスキームであり、値はストレージクラスへのパスです。

FEED_STORAGE_FTP_ACTIVE

デフォルト: False

フィードをFTPサーバーにエクスポートするときにアクティブ接続モードを使用するか( True )、代わりにパッシブ接続モードを使用するか( False 、デフォルト)。

FTP接続モードについては、アクティブFTPとパッシブFTPの違いは何ですか?(What is the difference between active and passive FTP?)を参照してください。

FEED_STORAGE_S3_ACL

デフォルト: '' (空文字列)

プロジェクトによってAmazon S3にエクスポートされたフィードのカスタムACLを含む文字列。

利用可能な値の完全なリストについては、Amazon S3ドキュメントの Canned ACL 節にアクセスしてください。

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がサポートする組み込みのフィードストレージバックエンドを含む辞書。 FEED_STORAGES でURIスキームに None を割り当てることで、これらのバックエンドを無効にできます。 たとえば、組み込みのFTPストレージバックエンドを無効にするには、以下を(置換なしで) `` settings.py`` に配置します:

FEED_STORAGES = {
    'ftp': None,
}

FEED_EXPORTERS

デフォルト: {}

プロジェクトでサポートされている追加のエクスポーターを含む辞書。 キーはシリアル化形式で、値は アイテム・エクスポーター クラスへのパスです。

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でサポートされている組み込みのフィードエクスポーターを含む辞書。 FEED_EXPORTERS のシリアル化形式に None を割り当てることで、これらのエクスポーターを無効にできます。 たとえば、組み込みのCSVエクスポーターを無効にするには、以下を(置換なしで)、 settings.py に配置します:

FEED_EXPORTERS = {
    'csv': None,
}