HTMLテーブルをスクレイプしてCSVに出力する汎用rubyスクリプト
Nid: 775
- 入力HTMLファイル
$ cat table.html <table> <tr> <th>都道府県</th> <th>テレビ局のYouTube公式チャンネル</th> </tr> <tr> <td>北海道</td> <td>HTB北海道テレビ</td> </tr> <tr> <td>愛知県</td> <td>メ~テレチャンネル</td> </tr> </table>
- ruby スクリプト
$ cat scrapeHTMLTable.rb require 'nokogiri' require 'csv' file = File.open('table.html', 'r').read html = Nokogiri::HTML(file) # テーブルヘッダーの取得 headers = [] #html.xpath('//*/table/thead/tr/th').each do |th| html.xpath('//*/table/tr/th').each do |th| headers << th.text end #p headers # テーブル各行の取得 rows = [] #html.xpath('//*/table/tbody/tr').each_with_index do |row, i| html.xpath('//*/table/tr').each_with_index do |row, i| rows[i] = {} row.xpath('td').each_with_index do |td, j| rows[i][headers[j]] = td.text.strip end end #p rows # CSV生成 csv_string = CSV.generate do |csv| # CSVヘッダー csv << headers rows.each do |hash| csv << hash.values end end # CSV出力 puts csv_string
- 実行結果
$ ruby scrapeHTMLTable.rb 都道府県,テレビ局のYouTube公式チャンネル 北海道,HTB北海道テレビ 愛知県,メ~テレチャンネル