9

さまざまな理由から、 から に切り替えようとし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 クエリを実行する方法を考え出すことですが、_Elements にはその機能がないようです (これもまた理にかなっています!)。

4

1 に答える 1