python-lxml和in

我在lxml中遇到了一个奇怪的错误:

>>> s = '<html><head><noscript></noscript><script></script><meta></head></html>' 
>>> root = lxml.html.fromstring(s)
>>> root.xpath('/html/head/meta')
>>> root.xpath('/html/body/meta')
[<Element meta at 0x2a92788>]

元标记应位于head元素中,而不是body中.在这种情况下如何获得正确的元素?

解决方法:

让我猜测:您是否正在使用旧版本的Ubuntu(例如12.04)?
实际上,这是lxml软件包使用的预安装libxml2库的旧版本中的错误.在版本2.8.0的release notes中,他们提到了对HTML解析器错误的修复,其中< noscript>在< head>中-所以我猜libxml2> = 2.8.0的版本应该可以工作. Ubuntu 12.04已安装版本2.7.8.

>>> import lxml.etree
>>> lxml.etree.LIBXML_COMPILED_VERSION
(2, 7, 8)
>>> lxml.etree.LIBXML_VERSION
(2, 9, 1)

我认为,如果这些版本中的任何一个> = 2.8.0,则< noscript>
 问题应该消失了.

上一篇:python-使用lxml处理请求中的html. TypeError:无法腌制_ElementUnicodeResult对象


下一篇:用Python的方式有条件地遍历列表中的项目