Ausgabe python zu csv regelmäßig

Hallo ich bin neu auf Python / Scrapy Welt, ich muss meine Liste von Produkten zu csv wie diese ausprobieren zu exportieren: was ich will, aber ich bekomme dieses: was ich bekam

///// spider: /////

import scrapy import csv from escrap.items import EscrapItem class EscrapSpider(scrapy.Spider): name = "tunisianet" allowed_domains = ["tunisianet.com.tn"] start_urls = [ "http://www.tunisianet.com.tn/385-logiciels-informatique-tunisie/" ] def parse(self, response): for sel in response.xpath('//*[contains(@class, "ajax_block_product")]'): item = EscrapItem() item['revendeur'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/@href').re('tunisianet')) item['produit'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/text()').extract()) item['lien'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/@href').extract()) item['description'] = '\n'.join(sel.xpath('//*[contains(@class, "product_desc")]/a/text()').extract()) item['prix'] = '\n'.join(sel.xpath('//*[contains(@class, "price")]/text()').extract()) data = [item['revendeur'], item['produit'], item['lien'], item['description'], item['prix']] out = open('out.csv', 'w') for row in data: for column in row: out.write(column.encode('utf-8')) return data 

///// items: /////

 import scrapy class EscrapItem(scrapy.Item): revendeur = scrapy.Field() produit = scrapy.Field() lien = scrapy.Field() description = scrapy.Field() prix = scrapy.Field() 

///// Pipelines: /////

 class EscrapPipeline(object): # put all words in lowercase words_to_filter = ['politics', 'religion'] def process_item(self, item, spider): for word in self.words_to_filter: if word in unicode([item['revendeur'],item['produit'],item['lien'],item['description'],item ['prix']]).lower(): raise DropItem("Contains forbidden word: %s" % word) else: return item 

///// meine Einstellung: /////

 BOT_NAME = 'escrap' SPIDER_MODULES = ['escrap.spiders'] NEWSPIDER_MODULE = 'escrap.spiders' ITEM_PIPELINES = {'escrap.pipelines.EscrapPipeline': 1} FEED_EXPORTERS = { 'csv': 'escrap.escrap_csv_item_exporter.EscrapCsvItemExporter', } FIELDS_TO_EXPORT = [ 'revendeur', 'produit', 'lien', 'description', 'prix' ] 

  • Anhängen von Spalte an Frame von HDF-Datei in Pandas
  • Wie kann ich eine kommagetrennte Zeichenfolge in Python aufteilen, mit Ausnahme der Kommas, die in Anführungszeichen stehen
  • Python-Parse CSV ignoriert Komma mit Doppel-Anführungszeichen
  • Schreibe Python Wörterbuch zu CSV wo wo Tasten = Spalten, Werte = Zeilen
  • Wie man eine CSV-Datei mit Python mit Header intakt zu importieren, wo erste Spalte ist eine nicht-numerische
  • Gruppierung von aufeinanderfolgenden Daten zusammen
  • 3 Solutions collect form web for “Ausgabe python zu csv regelmäßig”

    Sie müssen nicht die csv-Datei selbst erstellen, wenn Sie Elemente parsen, scrapy kann standardmäßig in eine csv-Datei exportieren.

    So ändern Sie Ihre parse Methode zu:

     def parse(self, response): for sel in response.xpath('//*[contains(@class, "ajax_block_product")]'): item = EscrapItem() item['revendeur'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/@href').re('tunisianet')) item['produit'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/text()').extract()) item['lien'] = '\n'.join(sel.xpath('//*[contains(@class, "center_block")]/h2/a/@href').extract()) item['description'] = '\n'.join(sel.xpath('//*[contains(@class, "product_desc")]/a/text()').extract()) item['prix'] = '\n'.join(sel.xpath('//*[contains(@class, "price")]/text()').extract()) yield item 

    Später, wenn du dich anrufest, kannst du es rufen:

     scrapy crawl myspider -o output.csv 

    Jetzt haben Sie alle Ihre Artikel in eine csv-Datei exportiert.

    Wenn du es immer noch auf deiner eigenen Pipeline kontrollieren willst, schau hierher um deinen eigenen Exporteur zu erstellen . Es würde so:

     from scrapy import signals from scrapy.exporters import CsvItemExporter class CSVExportPipeline(object): def __init__(self): self.files = {} @classmethod def from_crawler(cls, crawler): pipeline = cls() crawler.signals.connect(pipeline.spider_opened, signals.spider_opened) crawler.signals.connect(pipeline.spider_closed, signals.spider_closed) return pipeline def spider_opened(self, spider): file = open('%s_products.csv' % spider.name, 'w+b') self.files[spider] = file self.exporter = CsvItemExporter(file) self.exporter.start_exporting() def spider_closed(self, spider): self.exporter.finish_exporting() file = self.files.pop(spider) file.close() def process_item(self, item, spider): self.exporter.export_item(item) return item 

    Um deine eigene Pipeline zu erstellen, musst du das ganz lesen .

    Du solltest wahrscheinlich die Zelle setzen, wo du dir schreiben willst. Etwas wie:

     worksheet.write('A1','thing you want to write') 

    Oder es kann standardmäßig sein, um Inhalt in 'A' zu schreiben

    Es exportiere aber nicht mit der Form, die ich will, ich möchte das Formular wie dieses: http://i.imgur.com/r8LaVem.png , aber ich habe dieses http://i.imgur.com/8IVnlui.png . Hier ist meine letzte Klasse: def parse(self, response): item = TfawItem() data= [] items = [] out = open('out.csv', 'a') x = response.xpath('//*[contains(@class, "ajax_block_product")]') for i in range(0, len(x)): item['revendeur'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/@href').re('tunisianet')[i] item['produit'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/text()').extract()[i] item['url'] = response.xpath('//*[contains(@class, "center_block")]/h2/a/@href').extract()[i] item['description'] = response.xpath('//*[contains(@class, "product_desc")]/a/text()').extract()[i] item['prix'] = response.xpath('//*[contains(@class, "price")]/text()').extract()[i] data = item['revendeur'], item['produit'], item['url'], item['description'], item['prix'] out.write(str(data)) out.write('\n')

    Python ist die beste Programmiersprache der Welt.