2014-10-14 2 views
0

Мне нужно сканировать данные с веб-страницы в определенном порядке, так как мне понравились объявленные поля в моем классе предметов, а затем их нужно поместить в файл csv file.problem, где сейчас хранятся данные не в specfic порядке, как в случае его утилизации данные любого поля и вставка в файл csv, но я хочу, чтобы он хранил данные, как я объявил в моем классе товаров. Я новичок в python. Вы можете сказать мне, как это сделатьКак хранить данные, просканированные в scrapy в определенном порядке?

Для бывшего: моего класса элемента класса DmozItem (Item): названия = поле() ссылки = поле() убывания = Field()

сейчас при хранении данных в csv-файле его сохранение сначала происходит по ссылке, а затем заголовок «desc»: [], «link»: ["/ Computers/Programming /"], "title": ["Programming"]}

ответ

1

Причина, по которой порядок данных в файле csv не является тем, что вы объявили, потому что элемент является типом данных dict. Порядок ключей в dict определяется их алфавитным порядком. Логика статей экспорта в CSV файл реализован в

SCRAPY \ вно \ exporter__init __. Ру

Вы можете переписать метод _get_serialized_fields из BaseItemExporter, чтобы она дать пару ключ-значение в порядке ваше заявление. Вот пример кода

field_iter = ['title', 'link', 'desc'] 
for field_name in field_iter: 
    if field_name in item: 
     field = item.fields[field_name] 
     value = self.serialize_field(field, field_name, item[field_name]) 
    else: 
     value = default_value 
    yield field_name, value 

Но помните, что это не универсальное решение.

+0

Привет, вы предлагаете добавить одну строку «field_iter = ['title', 'link', 'desc']", потому что все остальные коды одинаковы, но даже после добавления этого вывода идет то же самое – user3706469

+0

Также я искал в документах, я нашел это : fields_to_export Список с именами полей, которые будут экспортированы, или Нет, если вы хотите экспортировать все поля. По умолчанию - None. Некоторые экспортеры (например, CsvItemExporter) уважают порядок полей, определенных в этом атрибуте. но не смог найти это в BaseItemExporter – user3706469

+0

Вы наконец решили решение? – zczhuohuo

0

Для этого мы должны сделать список в fields_to_export в классе BaseItemExporter field_iter = [ «Предложение», «ы», «VendorCode»], как этот и затем передать этот список в поле

Смежные вопросы