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' ] 

  • Konvertiere .csv-Datei in .dbf mit Python?
  • Python - Csv-Datei in JSON konvertieren
  • Zählen Sie die Häufigkeit der Wörter aus einer Spalte in Python mit externen csv-Datei
  • Fragen Sie ein Q und erhalten Sie es aus einer csv-Datei?
  • Pandas Spalte mathematische Operationen Kein Fehler keine Antwort
  • Summe eine csv Spalte in Python
  • 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.