Ответ 1
Это связано с Модификацией экспорта CSV в процессе скрининга
Проблема заключается в том, что экспортер создается без каких-либо параметров ключевого слова, поэтому ключевые слова, такие как EXPORT_FIELDS, игнорируются. Решение одно и то же: вам нужно подклассировать экспортера элементов CSV для передачи параметров ключевого слова.
Следуя приведенному выше рецепту, я создал новый файл xyzzy/feedexport.py(измените "xyzzy" на любой ваш класс scrapy):
"""
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)
а затем добавили его в xyzzy/settings.py:
FEED_EXPORTERS = {
'csv': 'xyzzy.feedexport.CSVkwItemExporter'
}
Теперь экспортер CSV будет соблюдать настройку EXPORT_FIELD - также добавьте 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',
]