follow example create python csv scrapy export-to-csv scrapy-spider

python - example - Exportar archivo csv desde scrapy(no a través de la línea de comandos)



scrapy fetch (2)

Intenté exportar exitosamente mis artículos a un archivo csv desde la línea de comandos como:

scrapy crawl spiderName -o filename.csv

Mi pregunta es: ¿Cuál es la solución más fácil para hacer lo mismo en el código? Necesito esto cuando extraigo el nombre de archivo de otro archivo. El escenario final debería ser, que yo llame

scrapy crawl spiderName

y escribe los elementos en filename.csv


¿Por qué no usar una tubería de artículos?

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 quisiera que los elementos se escribieran en un csv separado para arañas separadas, podría darle a su araña un campo CSV_PATH. Luego, en su tubería, use el campo de arañas en lugar de la ruta desde setttigs.

Esto funciona lo probé en mi proyecto.

HTH

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


Para eso son las Exportaciones de Alimentos: http://doc.scrapy.org/en/latest/topics/feed-exports.html

Una de las características que se requieren con más frecuencia cuando se implementan los raspadores es poder almacenar los datos raspados correctamente y, a menudo, eso significa generar un "archivo de exportación" con los datos raspados (comúnmente llamados "fuentes de exportación") para ser consumidos por otros sistemas .

Scrapy proporciona esta funcionalidad fuera de la caja con Feed Exports, que le permite generar un feed con los elementos raspados, utilizando múltiples formatos de serialización y backends de almacenamiento.