修改scrapy中的CSV导出

zsq*_*are 5 python csv scrapy

我似乎错过了一些非常简单的事情.我想要做的只是;用作CSV导出器中的分隔符而不是,.

我知道CSV出口通kwargs到CSV作家,但我似乎无法弄清楚如何通过这个分隔符.

我这样叫我的蜘蛛:

scrapy crawl spidername --set FEED_URI=output.csv --set FEED_FORMAT=csv 
Run Code Online (Sandbox Code Playgroud)

Mah*_*der 12

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 :(
Run Code Online (Sandbox Code Playgroud)

你需要自己做,这是一个例子:

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)
Run Code Online (Sandbox Code Playgroud)

settings.py您的抓取工具目录的文件中,添加以下内容:

FEED_EXPORTERS = {
    'csv': 'importable.path.to.CsvOptionRespectingItemExporter',
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以按如下方式执行蜘蛛:

scrapy crawl spidername --set FEED_URI=output.csv --set FEED_FORMAT=csv --set CSV_DELIMITER=';'
Run Code Online (Sandbox Code Playgroud)

HTH.