2010-06-17 49 views

回答

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的优化......虽然运行时性能可能非常相似。

2

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_MASSAGEOli's答案所示。