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
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
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.