« Web広告の無理 | トップページ | 豹頭王の試練:栗本 薫 »

2005年5月25日

html2text.py HTMLをプレーンテキストに

変換する Python スクリプト。

ダウンロード 20050525html2text.py (5.1K)

まともに使う気ならばこんなのではなく Strip-o-Gram のようなちゃんとした物を導入した方がいいと思いますが、まあ作例という事で。いわゆるテキストプラウザ風の整形表示をするものではありませんので注意。(そういう用途には素直に Lynx 使いましょう)

出来るだけ安直に作れる/使える小さなパッケージを意図したのですが、タグをカットするという以上の事をするにはそれなりの手間は必要でした。でも実用上はここまでやらなくとも cococontents.py で使っている tagcut 程度のもので充分だと思いますが。


以下余談。

Python には HTML を処理するライブラリとして sgmllib, htmllib, HTMLParser と標準でもいろいろと含まれていますけれども、この内 sgmllib は継承してオーバーライドして使う事が前提の

モジュール自体も htmllib モジュールの基礎にするため だけに存在しています。

という代物ですし、HTMLParser の方は

htmllib のパーザと違い、このパーザは終了タグが開始タグと 一致しているか調べたり、外側のタグ要素が閉じるときに内側で明示的 に閉じられていないタグ要素のタグ終了ハンドラを呼び出したりはしません。

という事でそれこそタグカットやタグ単位での属性値の洗い出しくらいにしか使えず。結局残るのは htmllib になるわけですが、これがまた「writer インスタンスを引数に作った formatter インスタンスを引数にして……」というような代物。ついでに出来合いのその実装には単なる雛形か妙な方向に作りこんだものかのどちらかしかなく。つまり用途毎に htmllib.HTMLParser そのものも含め全てサブクラスを作って使わなくてはなりません。そしてこの3個のクラス、機能が密着しすぎていて理解するにも改造するにも3個セットで扱わなくてはならないみたいですし。(formatter はそのままでかまわないようで、今回もそのまま使っていますが)

標準の実装で不都合な所は

  • リンクのあった場所に [番号] という形式の索引が入ってしまう
  • maxcol で勝手に整形されてしまう(そして全角半角のある日本語の文字に未配慮の上、hr 要素の長さの基準にもなっているので無限大に指定して整形を切る事も出来ない)
  • ul, ol 行頭の記号や符番が付加されない

といった所なのですが、どれもサブクラス化して書き換えないとそれを修正出来ない仕様になっていました。

Python 標準の HTML 関係のライブラリ、微妙な存在だなぁ。アプリケーションと言うには硬直しているし、サンプルと見るには特化しすぎだし。いっそ Webブラウザ丸ごとくらい入っていればそれはそれで納得するのですが。

« Web広告の無理 | トップページ | 豹頭王の試練:栗本 薫 »

Python」カテゴリの記事

パソコン・インターネット」カテゴリの記事

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/68856/4276901

この記事へのトラックバック一覧です: html2text.py HTMLをプレーンテキストに:

« Web広告の無理 | トップページ | 豹頭王の試練:栗本 薫 »

ブログ妖精

  • ココロ

Affiliate

無料ブログはココログ