有人能告诉我什么是清理坏HTML的更好方法,所以BeautifulSoup可以处理它 - 如果使用BeautifulSoup的按摩方法或使用正则表达式清理它?
答案 0 :(得分:3)
以为我应该改写我的答案。
内置按摩有利于轻微损伤(额外的空白,没有斜线等)。在进一步参与之前,我肯定会尝试躲开这些。
您可以pass in your own massages我建议您扩展默认设置:
import copy, re
myMassage = [(re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1))]
myNewMassage = copy.copy(BeautifulSoup.MARKUP_MASSAGE)
myNewMassage.extend(myMassage)
BeautifulSoup(badString, markupMassage=myNewMassage)
# Foo<!--This comment is malformed.-->Bar<br />Baz
你最好这样做,因为它都进入一个解析器,获得BeautifulSoups优化......虽然运行时性能可能非常相似。
答案 1 :(得分:2)
从the documentation起,按摩方法只是(regular expression, replacement function)
对,所以我认为这不是一个使用按摩或正则表达式的情况。
e.g。整理不正确的评论:
(re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1))
如果你看一下BeautifulSoup.py中_feed
方法的来源,你会发现它们只是按照标记顺序运行:
for fix, m in self.markupMassage:
markup = fix.sub(m, markup)
因此,虽然你可以在BeautifulSoup看到标记之前对你自己进行一些正则表达式处理,但你可能更好地将所需的任何额外整理与默认内置MARKUP_MASSAGE
结合起来,如Oli's回答所示。< / p>