由于各种原因,我试图从 切换lxml.html.fromstring()
到lxml.html.html5parser.document_fromstring()
. 两者最大的区别是第一个返回一个lxml.html.HtmlElement
,第二个返回一个lxml.etree._Element
。
大多数情况下这是可以的,但是当我尝试使用该_Element
对象运行我的代码时,它崩溃了,说:
AttributeError: 'lxml.etree._Element' object has no attribute 'rewrite_links'
这是有道理的。我的问题是,处理这个问题的最佳方法是什么。我有很多需要 HtmlElements 的代码,所以我认为最好的解决方案是转换为那些。我不确定这是否可能。
更新
一个糟糕的解决方案如下所示:
from lxml.html import fromstring, tostring
from lxml.html import html5parser
e = html5parser.fromstring(text)
html_element = fromstring(tostring(e))
显然,这是相当蛮力的,但它确实有效。我能够得到一个由 html5parser 解析的 HtmlElement,这就是我所追求的。
另一种选择是弄清楚如何执行我所依赖的 rewrite_links 和 xpath 查询,但_Element
s 似乎没有该功能(这又是有道理的!)