19.3. htmllib
— HTML 文書の解析器¶
バージョン 2.6 で撤廃: htmllib
モジュールは Python 3 で削除されました。Python 2 では代わりに HTMLParser
を使ってください。なお、 HTMLParser
は Python 3 では html.parser
に移動しています。
このモジュールでは、ハイパーテキストマークアップ言語 (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()
を定義しなければなりません。
このモジュールではパーザクラスと例外を一つづつ定義しています:
-
class
htmllib.
HTMLParser
(formatter)¶ 基底となる HTML パーザクラスです。XHTML 1.0 仕様 (https://www.w3.org/TR/xhtml1) 勧告で要求されている全てのエンティティ名をサポートしています。また、全ての HTML 2.0 の要素および HTML 3.0、3.2 の多くの要素のハンドラを定義しています。
-
exception
htmllib.
HTMLParseError
¶ HTMLParser
クラスがパーズ処理中にエラーに遭遇した場合に送出する例外です。バージョン 2.4 で追加.
参考
formatter
モジュール- 抽象化された書式イベントの流れを writer オブジェクト上の特定の出力イベントに変換するためのインターフェース。
HTMLParser
モジュール- HTML パーザのひとつです。やや低いレベルでしか入力を扱えませんが、XHTML を扱うことができるように設計されています。"広く知られている HTML (HTML as deployed)" では使われておらずかつ XHTML では正しくないとされる SGML 構文のいくつかは実装されていません。
htmlentitydefs
モジュール- XHTML 1.0 エンティティに対する置換テキストの定義。
sgmllib
モジュールHTMLParser
の基底クラス。
19.3.1. HTMLParser オブジェクト¶
タグメソッドに加えて、 HTMLParser
クラスではタグメソッドで利用するためのいくつかのメソッドとインスタンス変数を提供しています。
-
HTMLParser.
formatter
¶ パーザに関連付けられているフォーマッタインスタンスです。
-
HTMLParser.
nofill
¶ ブール値のフラグで、空白文字を縮約したくないときには真、縮約するときには偽にします。一般的には、この値を真にするのは、
<PRE>
要素の中のテキストのように、文字列データが "書式化済みの (preformatted)" 場合だけです。標準の値は偽です。この値はhandle_data()
およびsave_end()
の操作に影響します。
-
HTMLParser.
anchor_bgn
(href, name, type)¶ このメソッドはアンカー領域の先頭で呼び出されます。引数は
<A>
タグの属性で同じ名前を持つものに対応します。標準の実装では、ドキュメント内のハイパーリンク (<A>
タグのHREF
属性) を列挙したリストを維持しています。ハイパーリンクのリストはデータ属性anchorlist
で手に入れることができます。
-
HTMLParser.
anchor_end
()¶ このメソッドはアンカー領域の末尾で呼び出されます。標準の実装では、テキストの脚注マーカを追加します。マーカは
anchor_bgn()
で作られたハイパーリンクリストのインデクス値です。
-
HTMLParser.
handle_image
(source, alt[, ismap[, align[, width[, height]]]])¶ このメソッドは画像を扱うために呼び出されます。標準の実装では、単に
handle_data()
に alt の値を渡すだけです。
-
HTMLParser.
save_bgn
()¶ 文字列データをフォーマッタオブジェクトに送らずにバッファに保存する操作を開始します。保存されたデータは
save_end()
で取得してください。save_bgn()
/save_end()
のペアを入れ子構造にすることはできません。
-
HTMLParser.
save_end
()¶ 文字列データのバッファリングを終了し、以前
save_bgn()
を呼び出した時点から保存されている全てのデータを返します。nofill
フラグが偽の場合、空白文字は全てスペース文字一文字に置き換えられます。予めsave_bgn()
を呼ばないでこのメソッドを呼び出すとTypeError
例外が送出されます。
19.4. htmlentitydefs
— HTML 一般エンティティの定義¶
注釈
Python 3 で htmlentitydefs
モジュールは html.entities
と改名されました。ソースを 3 用に変換する際には 2to3 ツールが自動的に import を直してくれます。
ソースコード: Lib/htmlentitydefs.py
このモジュールでは name2codepoint
、 codepoint2name
、 entitydefs
の三つの辞書を定義しています。 entitydefs
は htmllib
モジュールで HTMLParser
クラスの entitydefs
メンバを定義するために使われます。このモジュールでは XHTML 1.0 で定義された全てのエンティティを提供しており、 Latin-1 文字集合 (ISO-8859-1) の簡単なテキスト置換を行う事ができます。
-
htmlentitydefs.
entitydefs
¶ 各 XHTML 1.0 実体定義と ISO Latin-1 における置換テキストとを対応付ける辞書です。
-
htmlentitydefs.
name2codepoint
¶ HTML 実体名と Unicode コードポイントとを対応付ける辞書です。
バージョン 2.3 で追加.
-
htmlentitydefs.
codepoint2name
¶ Unicode コードポイントと HTML 実体名とを対応付ける辞書です。
バージョン 2.3 で追加.