Вопрос новичка о Scrapy pipeline.py
-
21-09-2019 - |
Вопрос
Я изучаю учебное пособие по Scrapy.Чтобы протестировать процесс, я создал новый проект с этими файлами:
Паук работает хорошо, он очищает текст между тегами title и помещает его в FirmItem
[whitecase.com] INFO: Passed FirmItem(title=[u'White & Case LLP - Lawyers - Rachel B. Wagner '])
Но я застрял в процессе разработки.Я хочу добавить этот FirmItem в csv-файл, чтобы я мог добавить его в базу данных.
Я новичок в python и учусь по ходу дела.Я был бы признателен, если бы кто-нибудь дал мне подсказку о том, как заставить pipelines.py работать так, чтобы очищенные данные помещались в items.csv.
Спасибо.
Решение
Я думаю, что они отвечают на ваш конкретный вопрос в Скраповый Учебник.
Это предполагает, как и другие здесь, использование модуля CSV.Поместите следующее в свой pipelines.py
файл.
import csv
class CsvWriterPipeline(object):
def __init__(self):
self.csvwriter = csv.writer(open('items.csv', 'wb'))
def process_item(self, domain, item):
self.csvwriter.writerow([item['title'][0], item['link'][0], item['desc'][0]])
return item
Не забудьте включить конвейер, добавив его в параметр ITEM_PIPELINES в вашем settings.py , например, так:
ITEM_PIPELINES = ['dmoz.pipelines.CsvWriterPipeline']
Корректируйте в соответствии со спецификой вашего проекта.
Другие советы
Используйте встроенный Экспорт ленты CSV (доступно в версии 0.10) вместе с CsvItemExporter.
Python имеет модуль для чтения /записи CSV-файлов, это безопаснее, чем писать выходные данные самостоятельно (и правильно использовать все кавычки / экранирование ...)
import csv
csvfile = csv.writer(open('items.csv', 'w'))
csvfile.writerow([ firmitem.title, firmitem.url ])
csvfile.close()
Откройте файл и запишите в него.
f = open('my.cvs','w')
f.write('h1\th2\th3\n')
f.write(my_class.v1+'\t'+my_class.v2+'\t'+my_class.v3+'\n')
f.close()
Или выведите свои результаты в стандартный вывод, а затем перенаправьте стандартный вывод в файл ./my_script.py >> res.txt