Scrapyでは、items.pyにある特定の順序でアイテムを指定しました。&私のスパイダーは、同じ順序でこれらのアイテムを再度持ちます。しかし、スパイダー&を実行して結果をcsvとして保存すると、items.pyまたはspiderの列の順序は維持されません。特定の順序で列を表示するには、どうすればCSVを取得できますか。サンプルコードは非常に高く評価されます。Python Scrapy:CSVItemExporterに特定の順序で列を書き込む方法
ありがとうございました。
Scrapyでは、items.pyにある特定の順序でアイテムを指定しました。&私のスパイダーは、同じ順序でこれらのアイテムを再度持ちます。しかし、スパイダー&を実行して結果をcsvとして保存すると、items.pyまたはspiderの列の順序は維持されません。特定の順序で列を表示するには、どうすればCSVを取得できますか。サンプルコードは非常に高く評価されます。Python Scrapy:CSVItemExporterに特定の順序で列を書き込む方法
ありがとうございました。
これはModifiying CSV export in scrapy
に関連している問題は、輸出者が任意のキーワードをパラメータなしでインスタンス化されるということですので、EXPORT_FIELDSなどのキーワードは無視されます。解決策は同じです。キーワードパラメータを渡すには、CSVアイテムエクスポーターをサブクラス化する必要があります。
"""
The standard CSVItemExporter class does not pass the kwargs through to the
CSV writer, resulting in EXPORT_FIELDS and EXPORT_ENCODING being ignored
(EXPORT_EMPTY is not used by CSV).
"""
from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter
class CSVkwItemExporter(CsvItemExporter):
def __init__(self, *args, **kwargs):
kwargs['fields_to_export'] = settings.getlist('EXPORT_FIELDS') or None
kwargs['encoding'] = settings.get('EXPORT_ENCODING', 'utf-8')
super(CSVkwItemExporter, self).__init__(*args, **kwargs)
、その後XYZZY/settings.pyにそれを追加しました:
は、上記レシピに続いて、私は新しいファイルXYZZY/feedexport.py(あなたscrapyクラスの名前は何に変更 "XYZZY")を作成しました:
FEED_EXPORTERS = {
'csv': 'xyzzy.feedexport.CSVkwItemExporter'
}
今CSVの輸出はEXPORT_FIELDの設定を尊重する - も/ settings.pyをXYZZYに追加:
# By specifying the fields to export, the CSV export honors the order
# rather than using a random order.
EXPORT_FIELDS = [
'field1',
'field2',
'field3',
]
は、私はあなたの質問をしたがScrapyは、今からCsvItemExporter継承BaseItemExporterクラスにfields_to_export属性を提供時間について知ることはできません。バージョン0.22を1として :
エクスポートされるフィールドの名前、またはNoneとfields_to_export
リストを使用すると、すべてのフィールドをエクスポートする場合。デフォルトはNoneです。
(CsvItemExporterのような)一部の輸出業者は、この属性で定義されたフィールドの順序 を尊重します。
もScrapyのウェブサイト上のBaseItemExporterとCsvItemExporterのマニュアルを参照してください。この機能を使用するためには
は、しかし、私はこのポストはすでにかなり古いです参照this answer
これは今すぐ最高の答えです!ありがとう – Toilal
で詳述するように、あなた自身のItemPipelineを作成する必要があります。この問題は、より最近のリリースでより簡単に解決されましたか? – not2qubit
はい次の回答を参照してください – Toilal