CSV y JSON
Una vez creado el spider que extraerá datos de un sitio web hay guardar la informacion en algún lugar. Una de las formas más fáciles de guardar datos de raspado es en un archivo CSV o JSON.
Scrapy Feed Exporters
La necesidad de guardar los datos scrapeados en un archivo es un requisito muy común para los desarrolladores, por lo que para facilitarnos la tarea, los desarrolladores de Scrapy han implementado los Exportadores de Alimentación.
Los Feed Exporters son una caja de herramientas lista para usar que nos permite guardar/exportar fácilmente nuestros datos scrapeados en los siguientes formatos:
Formato JSON y JSON lines
Formato CSV
Formato XML
Formato pickle de Python
Y guardarlos en:
La máquina local donde se está ejecutando Scrapy
Una máquina remota utilizando FTP (protocolo de transferencia de archivos)
Almacenamiento en Amazon S3
Almacenamiento en Google Cloud Storage
Salida estándar
En esta guía, aprenderas sobre las diferentes formas en las que puedes guardar archivos JSON desde Scrapy.
A traves de la linea de comandos
Para guardar en un archivo CSV, agrega la bandera -o
al comando scrapy crawl
junto con la ruta del archivo donde deseas guardar los datos. Tambien es posible usar la opcion -O
.
Flag | Description |
---|---|
| Añadir informacion aun fichero existente |
| Reescriber un el fichero existente |
Puedes establecer una ruta relativa de la siguiente manera:
O si no puedes indicar la ruta absoluta:
Guardar la informacion con Feeds Settings
A menudo, la opción más limpia es decirle a Scrapy que guarde los datos en un CSV a través de la configuración FEEDS.
Paa ello, en el archivo settings.py
, podemos establecer la opción FEED
para definir el formato y la ubicación de salida de los datos scrapeados. A continuación, un ejemplo:
Tambien es posible especificar el formato de salida para cada spider. PAra ello tan solo hay que añadir la propiedad custom_setting
a la spider:
Dynamic File Paths/Names
Establecer una ruta de archivo estática está bien para el desarrollo o proyectos muy pequeños, sin embargo, cuando esté en producción, es probable que no desee que todos sus datos se guarden en un archivo grande. Entonces, para resolver esto, Scrapy le permite crear rutas / nombres de archivos dinámicos usando variables de araña.
Por ejemplo, aquí indique crear un CSV para los datos en la carpeta de datos, seguido de la subcarpeta con el nombre de las spiders y un nombre de archivo que incluya el nombre de la spider y la fecha en que se extrajo.
La ruta generada se vería así:
Configuraciones extra
La funcionalidad Feeds tiene otras configuraciones que puede configurar pasando pares clave/valor al diccionario FEEDS
que defina.
| La codificación que se utilizará para el feed. Si no se configura o se establece en Ninguno (predeterminado), usa UTF-8 para todo, excepto para la salida JSON, que usa codificación numérica segura (secuencias \uXXXX) por razones históricas. |
| Una lista de campos para exportar, que le permite guardar solo ciertos campos de sus artículos. |
| Una lista de clases de elementos para exportar. Si no está definido o está vacío, se exportan todos los elementos. |
| Una clase de filtro para filtrar elementos para exportar. |
| Cantidad de espacios usados para tabular la salida en cada nivel. |
| Si exportar feeds vacíos (es decir, feeds sin artículos). |
| Una cadena con la ruta de importación de una función para establecer los parámetros que se aplicarán con el formato de cadena estilo printf al URI del feed. |
| Lista de complementos a utilizar para el posprocesamiento. |
| Si se le asigna un número entero superior a 0, Scrapy genera varios archivos de salida que almacenan hasta el número especificado de elementos en cada archivo de salida. |
Por ejemplo:
Saving Data To Multiple CSV File Batches
Dependiendo de su trabajo, es posible que desee almacenar los datos extraídos en numerosos lotes de archivos en lugar de en un archivo CSV grande para que sea más manejable. Scrapy hace que sea muy fácil hacer esto con la clave batch_item_count
que puede configurar en la configuración de FEEDS.
Simplemente configure agregar la clave batch_item_count
a la configuración de su Feed y configure la cantidad de elementos que desea en cada archivo. Esto iniciará un nuevo archivo CSV cuando alcance este límite.
Nota: También deberá agregar al menos uno de los siguientes marcadores de posición en el URI del feed para indicar cómo se generan los diferentes nombres de archivos de salida:
Placehold | Description |
---|---|
%(batch_time)s | Inserta una marca de tiempo cuando se crea el lote |
%(batch_id)d | Inserta un número de secuencia basado en 1 del lote. |
Por ejemplo, esta configuración de Feed dividirá los datos en numerosos lotes de igual tamaño (excepto el último lote):
Este seria el resultado:
Last updated