用美容素按摩或用Regex清洁

2024-03-29 06:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能告诉我,有什么更好的方法来清理不好的HTML,这样BeautifulSoup就可以处理它了-应该使用beauthulsoup的按摩方法还是使用正则表达式清理它?在


Tags: 方法htmlbeautifulsoupbeauthulsoup
2条回答

the documentation开始,按摩方法只是(regular expression, replacement function)的对,所以我不认为这真的是使用massaging或regexp的情况。在

例如,要整理格式错误的评论:

(re.compile('<!-([^-])'), lambda match: '<! ' + match.group(1))

如果您查看中_feed方法的源代码漂亮极了您将看到这些只是按照标记顺序运行:

^{pr2}$

因此,虽然您可以在BeautifulSoup看到标记之前自己进行一些regexp处理,但最好将所需的任何额外整理与默认内置的MARKUP_MASSAGE结合起来,如Oli's答案所示。在

我想我应该重写我的答案。在

内置的按摩器对轻微损伤很好(额外的空白,没有闭合的斜杠等等)。我当然会在卷入此事之前设法逃脱惩罚。在

您可以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

你可能最好这样做,因为它都进入一个解析池,获得美化组优化。。。虽然运行时性能可能非常相似。在

相关问题 更多 >