我有一堆格式不正确的中文 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?
最佳答案
>>> root = etree.fromstring('<p>祝你<span>19</span>岁\n生日快乐。</p>')
>>> etree.tostring(root)
b'<p>祝你<span>19</span>岁\n生日快乐。</p>'
>>> for e in root.xpath('/p/*'):
... if e.tail:
... e.tail = e.tail.replace('\n', '')
...
>>> etree.tostring(root)
b'<p>祝你<span>19</span>岁生日快乐。</p>'
关于python - 使用lxml删除中文HTML文件中的多余空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9767719/