2017-03-07 22 views
2

Scrapyを使用した出力内の引用に問題があります。二重引用符で囲まれた取得カンマでScrapy .csv結果の二重引用符の取得方法

TEST,TEST,TEST,ON,TEST,TEST,"$2,449,000, 4,735 Sq Ft, 6 Bed, 5.1 Bath, Listed 03/01/2016" 
TEST,TEST,TEST,ON,TEST,TEST,"$2,895,000, 4,975 Sq Ft, 5 Bed, 4.1 Bath, Listed 01/03/2016" 

列のみ:私は、カンマが含まれており、これがそうのようないくつかの列に二重引用符で結果データをスクラップしようとしています。すべてのデータ列を二重引用符で囲むにはどうすればよいですか?

私は出力にScrapyをしたい:

"TEST","TEST","TEST","ON","TEST","TEST","$2,449,000, 4,735 Sq Ft, 6 Bed, 5.1 Bath, Listed 03/01/2016" 
"TEST","TEST","TEST","ON","TEST","TEST","$2,895,000, 4,975 Sq Ft, 5 Bed, 4.1 Bath, Listed 01/03/2016" 

は、私がこれを行うために変更することができます任意の設定はありますか?デフォルトでは

答えて

2

は、CSV出力のために、Scrapyはcsv.writer() with the defaultsを使用しています。フィールドの引用符、the default is csv.QUOTE_MINIMALについては

は作家だけな区切り記号、quotecharまたはlineterminatorで 文字のいずれかのような 特殊文字が含まれているこれらのフィールドを引用するオブジェクトを指示します。

しかし、独自のCSVアイテムエクスポータを構築し、デフォルトの'excel'方言に基づいて新しい方言を設定することができます。

FEED_EXPORTERS = { 
    'csv': 'myproject.exporters.QuoteAllCsvItemExporter', 
} 

そして、このような単純なクモ:

例えば、exporters.pyモジュールでは、以下の

import csv 

from scrapy.exporters import CsvItemExporter 


class QuoteAllDialect(csv.excel): 
    quoting = csv.QUOTE_ALL 


class QuoteAllCsvItemExporter(CsvItemExporter): 

    def __init__(self, *args, **kwargs): 
     kwargs.update({'dialect': QuoteAllDialect}) 
     super(QuoteAllCsvItemExporter, self).__init__(*args, **kwargs) 

を定義すると、あなたは単に、CSV出力のためreference this item exporter in your settingsにようなものが必要

import scrapy 


class ExampleSpider(scrapy.Spider): 
    name = "example" 
    allowed_domains = ["example.com"] 
    start_urls = ['http://example.com/'] 

    def parse(self, response): 
     yield { 
      "name": "Some name", 
      "title": "Some title, baby!", 
      "description": "Some description, with commas, quotes (\") and all" 
     } 

が出力されます。この:

"description","name","title" 
"Some description, with commas, quotes ("") and all","Some name","Some title, baby!" 
関連する問題