2013-03-28 2 views
0

У меня есть скрипт, который сбрасывает страницы HTML-статьи в интернет-магазине. Я тестирую набор из 22 страниц, из которых 5 страниц статей содержат описание продукта, а другие - нет.Веб-скребок с помощью Nokogiri :: HTML и Ruby - вывод на CSV-вопрос

Этот код помещает правильную информацию на экране:

if doc.at_css('.product_description') 
    doc.css('div > .product_description > p').each do |description| 
    puts description 
    end 
    else 
    puts "no description" 
end 

Но теперь я застрял на том, как получить это правильно выводить найденные описания продукта в массив, откуда я пишу их к CSV-файл.

Пробовал несколько вариантов, но пока никто из них не работает. Если я заменил puts description на @description << description.content, то все описания статей попадают в верхние строки в CSV, хотя они не принадлежат к статьям в этой строке.

Когда я также заменю «нет описания» для @description = "no description", тогда первые 14 строк в моем CSV получат 1 букву «без описания» каждый. Выглядит забавно, но это не совсем то, что мне нужно.

Если требуется больше кода, просто кричите!

Это код CSV я использую в скрипте:

CSV.open("artinfo.csv", "wb") do |row| 
    row << ["category", "sub-category", "sub-sub-category", "price", "serial number", "title", "description"] 
    ([email protected] - 1).each do |index| 
    row << [ 
      @categories[index], 
      @subcategories[index], 
      @subsubcategories[index], 
      @prices[index], 
      @serial_numbers[index], 
      @title[index], 
      @description[index]] 
    end 
    end 
+1

Можете ли вы показать нам свой CSV-код? – gmaliar

+0

Часть путаницы вызывает ваш CSV-объект 'row' – pguardiario

+0

Не понимаю, другие данные корректно отображаются в файле csv ... только описание действует weird – user2215918

ответ

0

Похоже, что ваши данные не выстроены должным образом. Если это так, вы должны быть в состоянии:

CSV.open("artinfo.csv", "w") do |csv| 
    csv << ["category", "sub-category", "sub-sub-category", "price", "serial number", "title", "description"] 
    [@categories, @subcategories, @subsubcategories, @prices, @serial_numbers, @title, @description].transpose.each do |row| 
    csv << row 
    end 
end 
+0

Это дает мне возможность не преобразовать строку в массив на csv << [категория и т. д. и т. д. линии, которые я должен посмотреть в – user2215918

+0

Если бы я был вами, я бы нашел лучший способ итерации. Не имеет смысла вкладывать все цены в один массив, все заголовки на другой и т. Д. – pguardiario

+0

С этим последним советом и хорошим взглядом на код мне удалось исправить мою проблему, thnx! – user2215918

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