すべてのソースコード分析記事インデックスディレクトリポータル
[Scrapy Framework Analysis]バージョン2.4.0ソースコード:すべての構成ディレクトリインデックス
前書き
クローラーを実装するときに最も頻繁に言及される要件は、クロールされたデータを適切に保存できること、つまり、他のシステムで使用するためにクロールされたデータを含む「出力ファイル」(通常は「出力フィード」と呼ばれる)を生成できることです。
クロールされたすべてのコンテンツがデータウェアハウスに保存されている場合、このセクションは無視できます。
Scrapyにはフィード出力が付属しており、複数のシリアル化形式(シリアル化形式)とストレージ方法(ストレージバックエンド)をサポートしています。
シリアル化フォーマット
アイテムエクスポーターはフィード出力に使用されます。サポートされているタイプは、JSON、JSON行、CSV、XMLなどです。
データの種類 | 出力フォーマット | アイテムタイプの出力 |
---|---|---|
JSON | json | JsonItemExporter |
JSON行 | jsonlines | JsonLinesItemExporter |
CSV | csv | CsvItemExporter |
XML | xml | XmlItemExporter |
ピクルス | 漬物 | PickleItemExporter |
元帥 | 元帥 | MarshalItemExporter |
データストレージ(ストレージ)
フィード出力を使用する場合、URL(FEED_URIで設定)を使用してストレージエンドを定義できます。フィード出力は、URIモードでサポートされる複数のストレージバックエンドタイプをサポートします。
サポートに付属するストレージバックエンドは、ローカルファイルシステム、FTP、S3(botoが必要)、およびラベル出力です。
ストレージURIパラメーター
ストレージURIにはパラメーターも含まれています。これらのパラメータは、フィードの作成時に上書きできます。
- %(time)s-フィードの作成時にタイムスタンプで上書きされます
- %(name)s-スパイダーの名前でカバー
他の名前付きパラメーターは、同じ名前のスパイダーの属性によってオーバーライドされます。たとえば、フィードが作成されると、%(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
ストレージバックエンド
ストレージタイプ | システムの制限 | URIスキーム | 依存ライブラリ | サンプル |
---|---|---|---|---|
ローカルファイルシステム | Unix | ファイル | - | file://tmp/export.csv |
FTP | - | ftp | - | tp:// user:[email protected]/path/to/export.csv |
S3 | - | s3 | 投票 | s3:// aws_key:aws_secret@mybucket/path/to/export.csv |
Google Cloud Storage(GCS) | - | gs | - | gs://mybucket/path/to/export.csv |
標準出力 | - | stdout | - | stdout: |
設定
- FEEDS(必須)
- FEED_EXPORT_ENCODING
- FEED_STORE_EMPTY
- FEED_EXPORT_FIELDS
- FEED_EXPORT_INDENT
- FEED_STORAGES
- FEED_STORAGE_FTP_ACTIVE
- FEED_STORAGE_S3_ACL
- FEED_EXPORTERS
- FEED_EXPORT_BATCH_ITEM_COUNT
出力(FEEDS)
デフォルトの出力辞書形式。この設定は、フィードのエクスポート機能を有効にするために必要です。
{
'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'],
},
}
主なパラメータのリスト:
バージョン | パラメータ名 | パラメータの説明 |
---|---|---|
- | フォーマット | 必須のシリアル化値の形式 |
- | batch_item_count | FEED_EXPORT_BATCH_ITEM_COUNT |
2.3.0 | エンコーディング | FEED_EXPORT_ENCODING、jsonのエンコード形式を設定します |
2.3.0 | 田畑 | FEED_EXPORT_FIELDS、出力フィールドを設定します |
2.3.0 | インデント | FEED_EXPORT_INDENT、インデント方法を設定します |
2.3.0 | item_export_kwargs | dictの出力カテゴリ、 |
2.4.0 | 上書き | 上書きするか(True)、コンテンツに追加するか(False) |
2.4.0 | store_empty | FEED_STORE_EMPTY、空をエクスポートするかどうか |
2.4.0 | uri_params | FEED_URI_PARAMSは、適用するパラメーターを設定するために使用されます。 |
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',
}
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',
}
FEED_EXPORT_BATCH_ITEM_COUNT
Scrapyは複数の出力ファイルを生成し、各出力ファイルで指定された数のアイテムを保存します。