Экспорт csv файла из scrapy (не через командную строку)
Я успешно попытался экспортировать свои элементы в файл csv из командной строки, например:
scrapy crawl spiderName -o filename.csv
Мой вопрос:
Какое самое простое решение сделать в коде? Мне нужно это, поскольку я извлекаю имя файла из другого файла.
Конец сценария должен быть, я звоню
scrapy crawl spiderName
и он записывает элементы в filename.csv
Ответы
Ответ 1
Почему бы не использовать конвейер элементов?
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
Если вы хотите, чтобы элементы были записаны для разделения csv для отдельных пауков, вы можете дать вашему паучу поле CSV_PATH. Затем в вашем конвейере используйте поле ваших пауков вместо пути от setttigs.
Это работает, я тестировал его в своем проекте.
НТН
http://doc.scrapy.org/en/latest/topics/item-pipeline.html
Ответ 2
То, что предоставляет Feed Exports для:
http://doc.scrapy.org/en/latest/topics/feed-exports.html
Одной из наиболее часто требуемых функций при реализации скреперов является возможность правильно хранить скребковые данные, и довольно часто это означает создание "файла экспорта" со скребковыми данными (обычно называемыми "фид экспорта" ), которые должны быть использованы другими системами.
Scrapy предоставляет эту функциональность из коробки с помощью Feed Exports, которая позволяет вам создавать фид со скребками, используя несколько форматов сериализации и хранилища.