バージョン 2.6 で撤廃: htmllib モジュールは Python 3.0 で削除されました。
このモジュールでは、ハイパーテキスト記述言語 (HTML, HyperText Mark-up Language) 形式で書式化されたテキストファイルを解析するための基盤として役立つクラスを定義しています。このクラスは I/O と直接的には接続されません — このクラスにはメソッドを介して文字列形式の入力を提供する必要があり、出力を生成するには “フォーマッタ (formatter)” オブジェクトのメソッドを何度か呼び出さなくてはなりません。
HTMLParser クラスは、機能を追加するために他のクラスの基底クラスとして利用するように設計されており、ほとんどのメソッドが拡張したり上書きしたりできるようになっています。さらにこのクラスは sgmllib モジュールで定義されている SGMLParser クラスから派生しており、その機能を拡張しています。 HTMLParser の実装は、 RFC 1866 で解説されている HTML 2.0 記述言語をサポートします。 formatter では 2 つのフォーマッタオブジェクト実装が提供されています; フォーマッタのインタフェースについての情報は formatter モジュールのドキュメントを参照してください。
以下は sgmllib.SGMLParser で定義されているインタフェースの概要です:
インスタンスにデータを与えるためのインタフェースは feed() メソッドで、このメソッドは文字列を引数に取ります。このメソッドに一度に与えるテキストは必要に応じて多くも少なくもできます; というのは p.feed(a);p.feed(b) は p.feed(a+b) と同じ効果を持つからです。与えられたデータが完全な HTML マークアップ文を含む場合、それらの文は即座に処理されます; 不完全なマークアップ構造はバッファに保存されます。全ての未処理データを強制的に処理させるには、 close() メソッドを呼び出します。
例えば、ファイルの全内容を解析するには:
parser.feed(open('myfile.html').read())
parser.close()
のようにします。
HTML タグに対して意味付けを定義するためのインタフェースはとても単純です: サブクラスを派生して、 start_tag() 、 end_tag() 、あるいは do_tag() といったメソッドを定義するだけです。パーザはこれらのメソッドを適切なタイミングで呼び出します: start_tag() や do_tag() は <tag ...> の形式の開始タグに遭遇した時に呼び出されます; end_tag() は <tag> の形式の終了タグに遭遇した時に呼び出されます。 <H1> ... </H1> のように開始タグが終了タグと対応している必要がある場合、クラス中で start_tag() が定義されていなければなりません; <P> のように終了タグが必要ない場合、クラス中では do_tag() を定義しなければなりません。
このモジュールではパーザクラスと例外を一つづつ定義しています:
基底となる HTML パーザクラスです。XHTML 1.0 仕様 (http://www.w3.org/TR/xhtml1) 勧告で要求されている全てのエンティティ名をサポートしています。また、全ての HTML 2.0 の要素および HTML 3.0、3.2 の多くの要素のハンドラを定義しています。
HTMLParser クラスがパーズ処理中にエラーに遭遇した場合に送出する例外です。
バージョン 2.4 で追加.
参考
タグメソッドに加えて、 HTMLParser クラスではタグメソッドで利用するためのいくつかのメソッドとインスタンス変数を提供しています。
パーザに関連付けられているフォーマッタインスタンスです。
ブール値のフラグで、空白文字を縮約したくないときには真、縮約するときには偽にします。一般的には、この値を真にするのは、 <PRE> 要素の中のテキストのように、文字列データが “書式化済みの (preformatted)” 場合だけです。標準の値は偽です。この値は handle_data() および save_end() の操作に影響します。
このメソッドはアンカー領域の先頭で呼び出されます。引数は <A> タグの属性で同じ名前を持つものに対応します。標準の実装では、ドキュメント内のハイパーリンク (<A> タグの HREF 属性) を列挙したリストを維持しています。ハイパーリンクのリストはデータ属性 anchorlist で手に入れることができます。
このメソッドはアンカー領域の末尾で呼び出されます。標準の実装では、テキストの注釈マーカを追加します。マーカは anchor_bgn() で作られたハイパーリンクリストのインデクス値です。
このメソッドは画像を扱うために呼び出されます。標準の実装では、単に handle_data() に alt の値を渡すだけです。
文字列データをフォーマッタオブジェクトに送らずにバッファに保存する操作を開始します。保存されたデータは save_end() で取得してください。 save_bgn() / save_end() のペアを入れ子構造にすることはできません。
文字列データのバッファリングを終了し、以前 save_bgn() を呼び出した時点から保存されている全てのデータを返します。 nofill フラグが偽の場合、空白文字は全てスペース文字一文字に置き換えられます。予め save_bgn() を呼ばないでこのメソッドを呼び出すと TypeError 例外が送出されます。
ノート
Python 3.0 で htmlentitydefs モジュールは html.entities と改名されました。ソースを 3.0 用に変換する際には 2to3 ツールが自動的に import を直してくれます。
このモジュールでは entitydefs 、 codepoint2name 、 entitydefs の三つの辞書を定義しています。 entitydefs は htmllib モジュールで HTMLParser クラスの entitydefs メンバを定義するために使われます。このモジュールでは XHTML 1.0 で定義された全てのエンティティを提供しており、 Latin-1 キャラクタセット (ISO-8859-1)の簡単なテキスト置換を行う事ができます。
各 XHTML 1.0 エンティティ定義について、ISO Latin-1 における置換テキストへの対応付けを行っている辞書です。
HTMLのエンティティ名をUnicodeのコードポイントに変換するための辞書です。
バージョン 2.3 で追加.
UnicodeのコードポイントをHTMLのエンティティ名に変換するための辞書です。
バージョン 2.3 で追加.