<head>中的lxml和<noscript>

时间:2015-09-07 11:29:58

标签: python lxml noscript lxml.html

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

&#xA;&#xA;
 &gt;&gt;&gt; s ='&lt; html&gt;&lt; head&gt;&lt; noscript&gt;&lt; / noscript&gt;&lt; script&gt;&lt; / script&gt;&lt; meta&gt;&lt; / head&gt;&lt; / html&gt;' &#XA;&GT;&GT;&GT; root = lxml.html.fromstring(s)&#xA;&gt;&gt;&gt; root.xpath( '/ HTML /头/元')&#XA;&GT;&GT;&GT; root.xpath('/ html / body / meta')&#xA; [&lt; Element meta at 0x2a92788&gt;]&#xA;  
&#xA;&#xA;

meta标签应该在head元素中,而不是body。在这种情况下如何才能获得正确的元素?

&#xA;

2 个答案:

答案 0 :(得分:2)

让我猜一下:你使用旧版本的Ubuntu(如12.04)吗? 实际上,它是lxml包使用的旧版预安装libxml2库中的错误。在版本2.8.0的release notes中,他们提到HTML parser error with <noscript> in the <head>的修复 - 所以我猜libxml2&gt; = 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)

我认为如果其中任何一个版本都是&gt; = 2.8.0,<noscript>  问题应该消失。

答案 1 :(得分:1)

这对我有用:

import lxml.html

s = '<html><head><noscript></noscript><script></script><meta></head></html>' 
root = lxml.html.fromstring(s)
print(root.xpath('/html/head/meta'))
print(root.xpath('/html/body/meta'))

<强>输出:

[<Element meta at 0x10a123b8>]
[]

我使用的是Python 2.7.9和lxml版本3.4.2。