我遇到了一个关于 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>]
meta 标签应该在 head 元素中,而不是 body 中。在这种情况下如何获得正确的元素?
最佳答案
让我猜猜:您使用的是旧版本的 Ubuntu(例如 12.04)吗?
其实是旧版预装的bug libxml2
lxml 包使用的库。在release notes对于 2.8.0 版,他们提到了 HTML parser error with <noscript> in the <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 - <head> 中的 lxml 和 <noscript>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32437628/