美麗的湯可能會得到你一個更完整的解決方案,但你也許可以得到一些清理與html5lib做更簡單(如果你確定與HTML5規則):
import html5lib
from html5lib import sanitizer, treebuilders, treewalkers, serializer
my_html = "<i>Some html fragment</I>" #intentional 'I'
html_parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("dom"))
dom_tree = html_parser.parseFragment(my_html)
walker = treewalkers.getTreeWalker("dom")
stream = walker(dom_tree)
s = serializer.htmlserializer.HTMLSerializer(omit_optional_tags=False, quote_attr_values=True)
cleaned_html = s.render(stream)
cleaned_html == '<i>Some html fragment</i>"
您也可以通過初始化您html_parser這樣消毒HTML:
html_parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("dom"), tokenizer=sanitizer.HTMLSanitizer)
標準答案是「美麗的湯」。 「額外的跨度」和「垃圾標籤」是您需要非常小心地定義的,因此您可以在不移除內容的情況下移除標籤。 – 2011-05-17 10:12:32
它*可能是一個更好的主意,可以重做HTML而不是清理你所擁有的。 – 2011-05-25 10:09:54