python - <head> 中的 lxml 和 <noscript>

标签 python lxml noscript lxml.html

我遇到了一个关于 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/

相关文章:

python - Flask-SocketIO eventlet 无法切换到不同的线程

python生成器垃圾收集

python - 恢复模式下的 etree.XMLParser 是否仍会抛出解析错误?

javascript - iframe文件上传和NoScript插件

javascript - 对于一小部分坚持使用 NoScript 之类的用户怎么办?

python - 由于数据帧错误,无法绘制实时数据

python 使用 bool 表达式通过 While 循环遍历列表的元素

python-3.x - 在 Python 中修改 gzip xml 文件(Adobe Premiere Pro 项目文件)的更快方法?

python - 如何从 Python 修改 SVG 文件的属性?

javascript - 如果存在 NoScript,如何检查 NoScript(浏览器插件)并在屏幕顶​​部包含栏?