2017-03-07 2 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!" 
관련 문제