[ruby-list:46862] Re: html→csv変換|tableのセル結合に対応したものは?
From:
YOSHIIZUMI <t-yoshiizumi@...>
Date:
2010-02-17 14:35:23 UTC
List:
ruby-list #46862
吉泉といいます。
昨年9月、htmlのtable(セル結合あり)をcsvに変換する方法について質問さ
せていただきましたが、関連して、今更の自己resです。
table部分をrubyの配列に変換するメソッドを書きました。
table_str = '<table> ... </table>'
ary = table_to_array(table_str)
のようにすると、2次元配列 ary を得ます。配列の各要素は、htmlタグを除
去したテキストです。
テキストでなく、タグ付きの「<td> ... </td>」を各要素に記録したい時は
ary = table_to_array(table_str, :HTML)
とします。
なお、htmlパーサにはhpricotを使っています。
配列にしてしまえば、あとは csvとか箇条書きふうに変換するのが容易です。
私は視覚障害者で画面が見えず tableの把握が苦手なので、こんな発想をし
がちです。でも、rubyなどで発想を具体化できるのは うれしいことです。
このメソッドの応用例として、yahooのテレビ・ラジオ番組表を箇条書きふ
うのテキストファイルの形で書き出すスクリプト「tv_yahoo.rb」を作ってみ
ました。以下が掲載場所です。
http://cup.sakura.ne.jp/hiki/hiki.cgi?prog01_guide
スクリプト内には、おまけで、MS-Windows上でhtmlドキュメントを取得する
ための class Mshttp を入れてあります。
Msxml2.xmlhttp を利用した単純・素朴なものです。
mshttp = Mshttp.new(:WIN32)
html_doc = mshttp.web_open('http://www.hoge.com/q.cgi?a=1&b=2')
などのようにすると、htmlドキュメントをバイナリで得られます(改行は
"\r\n" になる。zip圧縮ファイルなども取得可能)。
*.pacによる設定の場合を含め proxyがどうなっているかを気にせずに使え
ます。InternetExploreが動く環境であれば、このclassも動くと思います。
なお、:WIN32 を指定せずに単に Mshttp.new と初期化した場合は open-uri
の openメソッドでwebを取得するようになります。
その場合、win32oleを用いないので linux などでも動くと思います。
ただし、proxyへの対応は、別途 行う必要が出てきます。
よかったら覗いてみて下さい。