5

非常に単純なものが欠けているようです。私がやりたいのは;、代わりにCSVエクスポーターで区切り文字として使用することです,

CSVエクスポーターがkwargsをcsvライターに渡すことは知っていますが、これを区切り文字に渡す方法がわかりません。

私は自分のスパイダーを次のように呼んでいます:

scrapy crawl spidername --set FEED_URI=output.csv --set FEED_FORMAT=csv 
4

3 に答える 3

13

ではcontrib/feedexport.py

class FeedExporter(object):

    ...

    def open_spider(self, spider):
        file = TemporaryFile(prefix='feed-')
        exp = self._get_exporter(file)  # <-- this is where the exporter is instantiated
        exp.start_exporting()
        self.slots[spider] = SpiderSlot(file, exp)

    def _get_exporter(self, *a, **kw):
        return self.exporters[self.format](*a, **kw)  # <-- not passed in :(

自分で作成する必要があります。例を次に示します。

from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter


class CsvOptionRespectingItemExporter(CsvItemExporter):

    def __init__(self, *args, **kwargs):
        delimiter = settings.get('CSV_DELIMITER', ',')
        kwargs['delimiter'] = delimiter
        super(CsvOptionRespectingItemExporter, self).__init__(*args, **kwargs)

クローラー ディレクトリのsettings.pyファイルに、次を追加します。

FEED_EXPORTERS = {
    'csv': 'importable.path.to.CsvOptionRespectingItemExporter',
}

これで、次のようにスパイダーを実行できます。

scrapy crawl spidername --set FEED_URI=output.csv --set FEED_FORMAT=csv --set CSV_DELIMITER=';'

HTH。

于 2011-03-09T12:43:08.967 に答える