2012-12-21 20 views
2

我寫了一個非常簡單的程序與Nokogiri刮一個網站,並創建一個CSV文件。它正在獲取正確的數據並生成CSV,但數據被推送到一個單元格(A1)中,我寧願將它作爲列出來,每個值都用逗號分隔。如何告訴CSV製作一列而不是一行?

我該如何告訴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

這不是一個Nokogiri問題,因爲Nokogiri不會創建CSV數據。您必須強制將'css'和'map'返回的NodeSet轉換爲您希望CSV接收的格式。 –

回答

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,因爲您需要添加一個數組而不是單個項目。

+0

這工作!它把我所有的數據都放到了一個單獨的單元格中,並且使它成爲Excel中的一個列非常簡單。謝謝!我試圖提高你的答案,但我沒有足夠的聲譽。請原諒我的不好意思。 –

+1

@ Guyana.Hand我添加了一種可以直接創建列的方法 – matt

相關問題