2016-08-29 1 views
0

Ich verstehe, wie in in ein CSV-Format überScrapy Export csv ohne in cmd Angabe

scrapy crawl <spider_name> -o filename.csv 

meine geschabt Daten exportieren aber ich mag meine Spinne aus einem Skript auszuführen und automatisch zu csv schreiben (so Ich kann den Zeitplan verwenden, um die Spinne zu bestimmten Zeiten laufen zu lassen). Wie könnte ich das in meinen Code implementieren und wohin würde es gehen? Ich würde es in die Pipeline oder meine eigentliche Spinne gehen, vorausgesetzt, dies kann getan werden.

+0

Was meinst du mit 'aus einem Skript'? ein anderes Python-Skript? eine Batchdatei? –

Antwort

1

Scrapy verwendet Pipelines zum Verarbeiten der Daten, die Sie bearbeitet haben. Sie können eine Datei namens pipelines.py erstellen, die den folgenden Code enthält, der Ihre Daten in einen Ordner exports exportiert. Hier einige Code, den ich in einem meiner pip verwenden, um Projekte

from scrapy import signals 
from scrapy.contrib.exporter import CsvItemExporter, JsonItemExporter 

class ExportData(object): 
    def __init__(self): 
     self.files = {} 
     self.exporter = None 

    @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): 
     raise NotImplementedError 

    def spider_closed(self, spider): 
     self.exporter.finish_exporting() 
     file_to_save = self.files.pop(spider) 
     file_to_save.close() 

    def process_item(self, item, spider): 
     self.exporter.export_item(item) 
     return item 

class ExportJSON(ExportData): 
    """ 
    Exporting to export/json/spider-name.json file 
    """ 
    def spider_opened(self, spider): 
     file_to_save = open('exports/%s.json' % spider.name, 'w+b') 
     self.files[spider] = file_to_save 
     self.exporter = JsonItemExporter(file_to_save) 
     self.exporter.start_exporting() 

class ExportCSV(ExportData): 
    """ 
    Exporting to export/csv/spider-name.csv file 
    """ 
    def spider_opened(self, spider): 
     file_to_save = open('exports/%s.csv' % spider.name, 'w+b') 
     self.files[spider] = file_to_save 
     self.exporter = CsvItemExporter(file_to_save) 
     self.exporter.start_exporting() 

Sie können die Projektcode auf github anzuzeigen. Sie müssen diese Klassennamen nur in Ihren scrapy-Einstellungen korrekt hinzufügen.