lxml删除<head>中的空格和换行符

Tah*_*gir 6 python lxml html-parsing python-3.x

这个小程序:

from lxml.html import tostring, fromstring
e = fromstring('''
<html><head>
        <link href="/comments.css" rel="stylesheet" type="text/css">
        <link href="/index.css" rel="stylesheet" type="text/css">
    </head>
    <body>
        <span></span>
        <span></span>
    </body>
</html>''')

print (tostring(e, encoding=str)) #unicode on python 2
Run Code Online (Sandbox Code Playgroud)

将打印:

<html><head><link href="/comments.css" rel="stylesheet" type="text/css"><link
href="/index.css" rel="stylesheet" type="text/css"></head><body>
        <span></span>
        <span></span>
    </body></html>
Run Code Online (Sandbox Code Playgroud)

去掉了头部的空格和换行符.即使我们将两个<link>元素放在<body>中,也会发生这种情况.似乎删除了头元素之间的空白文本节点(\ s*).

我怎样才能在<link> s之间保留空格和换行符?(我希望输出与输入完全相同)

Tah*_*gir 1

最后,我使用 html5lib 来解析 html 并用它生成类似 lxml 的树。

parser = html5lib.HTMLParser(tree=html5lib.getTreeBuilder("lxml"), namespaceHTMLElements=False)