[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への対応は、別途 行う必要が出てきます。

 よかったら覗いてみて下さい。


In This Thread