HTMLのテーブルをcsvにするRubyスクリプト
2017-08-01
Tech仕事で、GitHub Wikiに書いた表をExcelにしたいというシチュエーションがあったので、簡単なRubyスクリプトを書いた。
実行にはNokogiriが必要 (gem install nokogiri
)。ブラウザでWikiページをa.htmlという名前で保存したものとする。
require 'nokogiri'
require 'csv'
# a.htmlというファイルを読み込んでNokogiriのオブジェクトに変換する
doc = Nokogiri::HTML.parse(File.read("a.html"))
# tableタグを見つける(今回は表が1つしかなかったのでfirstで最初の表を選択)
table = doc.search(:table).first
# CSV形式の文字列を作る
csv_txt = CSV.generate{|csv|
# table内の各trタグごとに、
table.search(:tr).each do |tr|
# その中のthとtdを探して、.textでテキスト部分を取り出す
csv << tr.search("th,td").map{|tag| tag.text}
end
}
# 最後に、utfからsjisに変換して出力 (古いExcelを使っているせいかutfだと文字化けしたため)
puts csv_txt.encode("Windows-31J", "UTF-8")
これをconv.rbという名前で保存して、以下のように実行するとa.csvができるので、Excelで開いて、セルの幅などを調整すれば出来上がり。
$ ruby conv.rb > a.csv
こういうのをさくっと書けると楽しい。