web-dev-qa-db-fra.com

Exporter le fichier csv de scrapy (pas via la ligne de commande)

J'ai essayé avec succès d'exporter mes éléments dans un fichier csv à partir de la ligne de commande, comme suit:

   scrapy crawl spiderName -o filename.csv

Ma question est la suivante: Quelle est la solution la plus simple pour faire la même chose dans le code? J'ai besoin de cela car j'extrais le nom du fichier d'un autre fichier. Le scénario final devrait être, que j'appelle

  scrapy crawl spiderName

et il écrit les éléments dans filename.csv

17
Chris

Pourquoi ne pas utiliser un pipeline d'articles?

WriteToCsv.py

   import csv
   from YOUR_PROJECT_NAME_HERE import settings

   def write_to_csv(item):
       writer = csv.writer(open(settings.csv_file_path, 'a'), lineterminator='\n')
       writer.writerow([item[key] for key in item.keys()])

   class WriteToCsv(object):
        def process_item(self, item, spider):
            write_to_csv(item)
            return item

settings.py

   ITEM_PIPELINES = { 'project.pipelines_path.WriteToCsv.WriteToCsv' : A_NUMBER_HIGHER_THAN_ALL_OTHER_PIPELINES}
   csv_file_path = PATH_TO_CSV

Si vous souhaitez que les éléments soient écrits dans des fichiers csv distincts pour des araignées distinctes, vous pouvez attribuer à votre araignée un champ CSV_PATH. Ensuite, dans votre pipeline, utilisez votre champ araignées au lieu du chemin de setttigs.

Cela fonctionne je l'ai testé dans mon projet.

HTH

http://doc.scrapy.org/en/latest/topics/item-pipeline.html

15
rocktheartsm4l

C’est à cela que servent les exportations d’aliments: http://doc.scrapy.org/en/latest/topics/feed-exports.html

L'une des fonctionnalités les plus fréquemment utilisées lors de la mise en œuvre des grattoirs est la possibilité de stocker correctement les données grattées. Cela signifie souvent que vous devez générer un "fichier d'exportation" contenant les données grattées (communément appelé "flux d'exportation") qui seront utilisées par d'autres systèmes. .

Scrapy fournit cette fonctionnalité avec les exportations de flux, ce qui vous permet de générer un flux avec les éléments récupérés, en utilisant plusieurs formats de sérialisation et backends de stockage.

1
Arthur Burkhardt