esto está relacionado con Modifiying CSV export in scrapy
El problema es que el exportador se crea una instancia sin ningún parámetro de palabras clave, por lo que las palabras clave como EXPORT_FIELDS son ignorados. La solución es la misma: debe crear una subclase del exportador de elementos de CSV para pasar los parámetros de palabra clave.
Siguiendo la receta anterior, he creado un nuevo archivo XYZZY/feedexport.py (modificar "XYZZY" a cualquiera que sea su clase scrapy se nombra):
"""
The standard CSVItemExporter class does not pass the kwargs through to the
CSV writer, resulting in EXPORT_FIELDS and EXPORT_ENCODING being ignored
(EXPORT_EMPTY is not used by CSV).
"""
from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter
class CSVkwItemExporter(CsvItemExporter):
def __init__(self, *args, **kwargs):
kwargs['fields_to_export'] = settings.getlist('EXPORT_FIELDS') or None
kwargs['encoding'] = settings.get('EXPORT_ENCODING', 'utf-8')
super(CSVkwItemExporter, self).__init__(*args, **kwargs)
y luego se añadió al XYZZY/settings.py :
FEED_EXPORTERS = {
'csv': 'xyzzy.feedexport.CSVkwItemExporter'
}
Ahora el exportador CSV honren al entorno EXPORT_FIELD - también se suman a XYZZY/settings.py:
# By specifying the fields to export, the CSV export honors the order
# rather than using a random order.
EXPORT_FIELDS = [
'field1',
'field2',
'field3',
]
veo este post ya es bastante antiguo. ¿Se ha resuelto este problema de una manera más simple en una versión más reciente? – not2qubit
Sí, ver la respuesta siguiente – Toilal