我用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
答案 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
,因为您需要添加数组而不是单个项目。