有人可以告诉我最好的方法来清理坏的HTML,所以BeautifulSoup可以处理它 - 应该使用BeautifulSoup的按摩方法还是使用正则表达式清理它?用BeatifulSoup按摩或用Regex清洁
谢谢。
有人可以告诉我最好的方法来清理坏的HTML,所以BeautifulSoup可以处理它 - 应该使用BeautifulSoup的按摩方法还是使用正则表达式清理它?用BeatifulSoup按摩或用Regex清洁
谢谢。
以为我应该改写我的答案。
内置按摩对光线伤害很大(额外的空白,没有斜杠等)。我肯定会尝试脱离这些,然后再参与进来。
您可以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的优化......虽然运行时性能可能非常相似。
从the documentation,按摩方法只是(regular expression, replacement function)
对,所以我不认为这是真正的使用按摩或正则表达式的情况。
例如收拾畸形的评论:
(re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1))
如果你看一下在BeautifulSoup.py的方法的来源,你会看到,这些只是按顺序运行对标记:
for fix, m in self.markupMassage:
markup = fix.sub(m, markup)
因此,虽然你可以做一些你自己的正则表达式处理之前,BeautifulSoup得到看到的标记,你可能更好地结合任何额外的整理所需的默认内置MARKUP_MASSAGE
如Oli's答案所示。