我有一堆不正确格式的中文html文件。它们包含不必要的空格和换行符,它们将在浏览器中显示为额外的空格。我用lxml编写了一个脚本来修改html文件。它在简单的标签上工作正常,但是我被困在嵌套的标签上。例如:使用lxml删除中文HTML文件中的多余空格
<p>祝你<span>19</span>岁
生日快乐。</p>
将显示为浏览器为:
祝你19岁 生日快乐。
注意额外的空间。这是需要删除的内容。结果HTML应该是这样的:
<p>祝你<span>19</span>岁生日快乐。</p>
我该怎么做?
请注意,嵌套(如span标签)可以是任意的,但我不需要考虑嵌套元素中的内容,它们应该保留原样。只有外部元素中的文本需要格式化。
这是我的本钱:
# -*- coding: utf-8 -*-
import lxml.html
import re
s1 = u"""<p>祝你19岁
生日快乐。</p>"""
p1 = lxml.html.fragment_fromstring(s1)
print p1.text # I get the whole line.
p1.text = re.sub("\s+", "", p1.text)
print p1.tostring() # spaces are removed.
s2 = u"""<p>祝你<span>19</span>岁
生日快乐。</p>"""
p2 = lxml.html.fragment_fromstring(s2)
print p2.text # I get "祝你"
print p2.tail # I get None
i = p2.itertext()
print i.next() # I get "祝你"
print i.next() # I get "19" from <span>
print i.next() # I get the tailed text, but how do I assemble them back?
print p2.text_content() # The whole text, but how do I put <span> back?
这个任务的哪一部分让你感到困惑?你有什么尝试? – Marcin 2012-03-19 09:42:50
@Marcin代码示例添加。希望现在已经清楚了。 – 2012-03-19 10:32:37
好问题 - 我的头顶没有答案,但我最好猜测的是你必须走树形结构(递归或迭代,如你喜欢的),去除额外的空间。 – Marcin 2012-03-19 10:40:39