19.3. htmllib — HTMLドキュメントのパーサー—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/htmllib
移動先:案内検索

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`



このモジュールは、name2codepointcodepoint2name、および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の新機能。