2012-12-21 2 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에서 CSV 데이터를 만들지 않기 때문에 이것은 Nokogiri 문제가 아닙니다. 'css'와'map'에 의해 반환 된 NodeSet을 CSV가 받기를 원하는 형식으로 강요해야합니다. –

답변

4

doc.css('.information h3 a').map { |link| link['href'] }에서 결과는 이미 배열, 그래서 당신이 파일을 귀하의 CSV에 추가 할 때 [...]에 포장 할 필요가 없습니다.

변경 라인

csv << [data] 

당신이 보다는 을 만들려면, 당신이 필요로하므로, 주로 행의 CSV 라이브러리 거래

csv << data 

에 열의 각 항목에 (단일 항목) 행을 추가하십시오.

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에서이 데이터를 열로 만드는 것이 매우 간단합니다. 감사! 귀하의 답변을 upvote하려했지만, 나는 충분한 명성이 없습니다. 실례합니다. –

+1

@ Guyana.Hand 직접 열을 만들 수있는 방법을 하나 추가했습니다. – matt

관련 문제