我有一堆不正確格式的中文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