さまざまな理由から、 から に切り替えようとしlxml.html.fromstring()
ていlxml.html.html5parser.document_fromstring()
ます。2 つの大きな違いは、1 つ目は を返し、2 つ目は をlxml.html.HtmlElement
返すことlxml.etree._Element
です。
ほとんどの場合、これで問題ありませんが、_Element
オブジェクトを使用してコードを実行しようとすると、次のようにクラッシュします。
AttributeError: 'lxml.etree._Element' object has no attribute 'rewrite_links'
これは理にかなっています。私の質問は、この問題に対処する最善の方法は何かということです。HtmlElements を期待するコードがたくさんあるので、それらに変換するのが最善の解決策だと思います。それが可能かどうかはわかりませんが。
アップデート
1 つのひどい解決策は次のようになります。
from lxml.html import fromstring, tostring
from lxml.html import html5parser
e = html5parser.fromstring(text)
html_element = fromstring(tostring(e))
明らかに、それはかなり力ずくですが、うまくいきます。html5parser によって解析された HtmlElement を取得できます。これが私が求めているものです。
もう 1 つのオプションは、私が依存している rewrite_links と xpath クエリを実行する方法を考え出すことですが、_Element
s にはその機能がないようです (これもまた理にかなっています!)。