Python 標準ライブラリの html.parser モジュールで利用できる HTMLParser インスタンスは、HTML データが入力されると、開始タグ、終了タグ、およびその他の要素が見つかる度にハンドラーメソッドを呼び出します。各メソッドの挙動を実装するには HTMLParser サブクラスを使ってそれぞれを上書きして行います。
Python ドキュメント [1] より引用
Web 上の操作を自動化したいとき、PySide6 の QWebEnginePage クラス [2] のインスタンスに対象 URL を表示して、JavaScript で操作することが多いのですが、単純に特定の情報を抽出したいときは、本体の Python プログラムとのやりとりを面倒に感じています。
Python の標準ライブラリに HTML/XHTML のパーサがあるので使ってみたところ、自分にとっては使い勝手が良かったので、備忘録としてサンプルを掲載しました。
下記の OS 環境で動作確認をしています。
RHEL 9.4 | x86_64 | |
Python | 3.12.1 |
HTMLParser を使ったサンプルを下記に示しました。このサンプルは、Python ドキュメント [1] に掲載されているサンプルを少し改変したものです。
test_html_parser.py
3つのメソッド handle_starttag、handle_endtag、handle_data は、継承している HTMLParser クラスのメソッドをオーバーライドしています。
以下が実行例です。
タグのはじめ : html タグのはじめ : head タグのはじめ : title タグ内の文字列 : テスト(タイトル) タグのおわり : title タグのおわり : head タグのはじめ : body タグのはじめ : h1 └ タグの属性 = {'id': 'title'} タグ内の文字列 : ページタイトル タグのおわり : h1 タグのはじめ : p └ タグの属性 = {'style': 'font-family: monospace;'} タグ内の文字列 : これはテスト用です。 タグのおわり : p タグのおわり : body タグのおわり : html
実用的には、抽出したい対象のタグを見つけたらフラグを立てて (handle_starttag)、収集したい文字列を変数に保持して (handle_data)、そのタグが閉じたらフラグを落とす (handle_endtag)、といった処理を加えます。
参考サイト
- html.parser --- Simple HTML and XHTML parser
- QWebEngineView - Qt for Python
- Beautiful Soup Documentation
- はじめから BeautifulSoup を利用した方が良かったかもしれません。
にほんブログ村
#オープンソース
0 件のコメント:
コメントを投稿