html5lib报错要求した機能を備えたツリー ビルダーが見つかりませんでした: html5lib

昨日、Python を使用して HTML ファイルを解析するときに、非常に難しい問題に遭遇しました。html5lib ライブラリを使用していますが、HTML ファイルを解析すると、「要求した機能を備えたツリー ビルダーが見つかりませんでした: html5lib」というエラーが表示されます。この記事では、私の解決策を共有します。

まず、このエラーの原因を理解する必要があります。このエラーは、html5lib が HTML ファイルを解析するときに、lxml、Beautifulsoup4、または html5lib 独自の TreeBuilder (追加の依存関係なし) の 3 つの TreeBuilder のいずれかに依存する必要があるためですが、私の環境では、これらの TreeBuilder が見つかりませんでした。

この問題を解決するために、2 つの依存ライブラリ lxml と beautifulsoup4 のインストールを試みることができます。次のコマンドを使用してインストールしてください。

pip install lxml
pip install beautifulsoup4

インターネットに接続できない環境の場合は、公式 Web サイト (https://pypi.org/) から依存ライブラリの whl ファイルを手動でダウンロードしてインストールしてください。

これら 2 つの依存ライブラリをインストールした後でもエラーが解決できない場合は、別の TreeBuilder への切り替えを検討できます。たとえば、html5lib に付属の TreeBuilder を使用する場合は、次のコードを使用できます。

import html5lib
from html5lib.treebuilders import getTreeBuilder

parser = html5lib.HTMLParser(
   tree=getTreeBuilder("dom")
)

ここでの「dom」は、HTML を解析して DOM ツリーにすることを指します。他のタイプのツリーに解析する場合は、 getTreeBuilder() メソッドで対応するパラメータを渡すことができます。

依存ライブラリを手動でインストールし、他の TreeBuilder に切り替えることに加えて、html5lib のドキュメントを参照して詳細を学ぶこともできます。ドキュメントには次の文があります。

「デフォルトでは、サポートされている TreeBuilder が見つからない場合、html5lib は Python 標準ライブラリに付属する html.parser ライブラリを使用しようとします。」

次に、プログラムを変更し、解析用の Python 標準ライブラリに付属する html.parser ライブラリを使用してエラーを解決します。変更手順は以下のとおりです。

from html.parser import HTMLParser

parser = HTMLParser()
with open("example.html", "r") as f:
    html_text = f.read()
    parser.feed(html_text)
    dom = parser.close()

ここでは、解析に html.parser ライブラリを使用していますが、このコードは非常に単純であることがわかります。まず HTMLParser クラスをインポートし、次にそのインスタンス化されたオブジェクト パーサーを解析に使用します。Python 標準ライブラリの open() 関数を使用してローカル HTML ファイルを読み取り、読み取ったコンテンツを解析のためにパーサーの feed() メソッドに渡し、さらに close() メソッドを使用して解析された DOM ツリーを取得します。

全体として、TreeBuilder が見つからないというエラーはさまざまな理由で発生する可能性があります。ここで紹介する解決策はほんの一部であり、すべての状況で機能するとは限りません。この種の問題が発生した場合は、ログ ファイルを適時に確認し、公式ドキュメントと組み合わせて解決策を見つけ、問題を段階的にトラブルシューティングし、徐々に解決策を見つけることをお勧めします。

おすすめ

転載: blog.csdn.net/liuqingup/article/details/131299796