如何告诉CSV创建列而不是行?

时间:2012-12-21 14:37:21

标签: ruby csv

我用Nokogiri编写了一个非常简单的程序来抓取一个网站并创建一个CSV文件。它正在获取正确的数据并生成CSV,但数据被推送到一个单元格(A1),我宁愿它作为一个列出来,每个值用逗号分隔。

如何告诉CSV为每个以逗号分隔的值创建列,而不是将所有信息放入单个单元格中?

require 'open-uri'
require 'nokogiri'
require 'csv'

doc = Nokogiri::HTML(open('somewebpage.com'))
CSV.open("webpagedata.csv", "wb") do |csv|
    data = doc.css('.information h3 a').map { |link| link['href']  }
    puts data
    csv << [data]
end

1 个答案:

答案 0 :(得分:4)

doc.css('.information h3 a').map { |link| link['href'] }的结果已经是一个数组,因此当您将其添加到CSV文件时,无需将其包含在[...]中。

更改行

csv << [data]

csv << data

CSV库主要处理行,因此如果要创建而不是,则需要添加(单个条目)行专栏的每个条目:

CSV.open("webpagedata.csv", "wb") do |csv|
  data = doc.css('.information h3 a').map { |link| link['href']  }
  data.each do |entry|
    csv << [entry]
  end
end

请注意,在这种情况下,执行需要[...]周围的entry,因为您需要添加数组而不是单个项目。