19.3。 htmllib —HTMLドキュメントのパーサー
バージョン2.6以降非推奨: htmllib モジュールはPython3で削除されました。 Python2では代わりに HTMLParser を使用し、Python3では同等のhtml.parser
を使用します。
このモジュールは、ハイパーテキストマークアップ言語(HTML)でフォーマットされたテキストファイルを解析するためのベースとして機能できるクラスを定義します。 このクラスはI / Oに直接関係していません。メソッドを介して文字列形式で入力を提供する必要があり、出力を生成するために「フォーマッタ」オブジェクトのメソッドを呼び出します。 HTMLParser クラスは、機能を追加するために他のクラスの基本クラスとして使用されるように設計されており、そのメソッドのほとんどを拡張またはオーバーライドできます。 次に、このクラスは、モジュール sgmllib で定義されたSGMLParser
クラスから派生して拡張します。 HTMLParser 実装は、 RFC 1866 で説明されているHTML2.0言語をサポートします。 formatter モジュールには、フォーマッターオブジェクトの2つの実装が用意されています。 フォーマッタインターフェイスの詳細については、そのモジュールのドキュメントを参照してください。
以下は、 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)で必要とされるすべてのエンティティ名をサポートします。 また、すべてのHTML2.0および多くのHTML3.0および3.2要素のハンドラーも定義します。
- exception htmllib.HTMLParseError
解析中にエラーが発生したときに HTMLParser クラスによって発生する例外。
バージョン2.4の新機能。
も参照してください
- モジュールフォーマッター
- 書式設定イベントの抽象的なフローをライターオブジェクトの特定の出力イベントに変換するためのインターフェイス定義。
- モジュール HTMLParser
- 入力のわずかに低レベルのビューを提供するが、XHTMLで動作するように設計されており、「デプロイされたHTML」で使用されておらず、XHTMLでは無効なSGML構文の一部を実装していない代替HTMLパーサー。
- モジュール htmlentitydefs
- XHTML1.0エンティティの置換テキストの定義。
- モジュール sgmllib
- HTMLParser の基本クラス。
19.3.1。 HTMLParserオブジェクト
タグメソッドに加えて、 HTMLParser クラスは、タグメソッド内で使用するためのいくつかの追加のメソッドとインスタンス変数を提供します。
- HTMLParser.formatter
- これは、パーサーに関連付けられたフォーマッターインスタンスです。
- HTMLParser.nofill
- 空白を折りたたむべきでない場合はtrue、折りたたむべき場合はfalseのブールフラグ。 一般に、これは、
<PRE>
要素内のように、文字データが「フォーマット済み」テキストとして扱われる場合にのみ当てはまります。 デフォルト値はfalseです。 これは、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]]]])
- このメソッドは、画像を処理するために呼び出されます。 デフォルトの実装では、 alt 値を
handle_data()
メソッドに渡すだけです。
- HTMLParser.save_bgn()
- フォーマッタオブジェクトに送信する代わりに、バッファへの文字データの保存を開始します。 save_end()を介して保存されたデータを取得します。 save_bgn() / save_end()ペアの使用はネストできません。
- HTMLParser.save_end()
- 文字データのバッファリングを終了し、 save_bgn()の前回の呼び出し以降に保存されたすべてのデータを返します。 nofill フラグがfalseの場合、空白は単一のスペースに折りたたまれます。 save_bgn()を事前に呼び出さずにこのメソッドを呼び出すと、
TypeError
例外が発生します。
19.4。 htmlentitydefs —HTML一般エンティティの定義
ノート
htmlentitydefs モジュールは、Python3でhtml.entities
に名前が変更されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。
ソースコード: :source: `Lib / htmlentitydefs.py`
このモジュールは、name2codepoint
、codepoint2name
、およびentitydefs
の3つの辞書を定義します。 entitydefs
は、 htmllib モジュールによって使用され、 HTMLParser クラスの entitydefs 属性を提供します。 ここで提供される定義には、Latin-1文字セット(ISO-8859-1)の単純なテキスト置換を使用して処理できるXHTML1.0で定義されたすべてのエンティティが含まれています。
- htmlentitydefs.entitydefs
- XHTML1.0エンティティ定義をISOLatin-1の置換テキストにマッピングする辞書。
- htmlentitydefs.name2codepoint
HTMLエンティティ名をUnicodeコードポイントにマップする辞書。
バージョン2.3の新機能。
- htmlentitydefs.codepoint2name
UnicodeコードポイントをHTMLエンティティ名にマップする辞書。
バージョン2.3の新機能。