剥离Python字符串中某些html标签的最快方法是什么?

时间:2010-12-11 23:22:03

标签: python html-parsing

我想删除除以下内容之外的所有html / javascript:

<b></b>
<ul></ul>
<li></li>
<a></a>

感谢。

3 个答案:

答案 0 :(得分:4)

你想要一种快速或正确的方式吗?基于正则表达式的方法不太可能是正确的,可能会导致XSS次攻击。

您应该使用HTML解析器,例如Beautiful Soup甚至htmllib

此外,<a>可以包含javascript: href个,还有各种on *属性,这些属性都是javascript。你可能想剥掉所有这些。通常,白名单方法最好:只保留您知道的属性(和属性值)是安全的。

答案 1 :(得分:1)

虽然我同意劳伦斯的观点,但有时会采用快速而肮脏的99%方法完成工作而不会产生其他问题。

这是一个演示基于正则表达式的方法的示例 -

import re

CLEANBODY_RE = re.compile(r'<(/?)(.+?)>', re.M)

def _repl(match):
    tag = match.group(2).split(' ')[0]
    if tag == 'p':
        return '<%sp>' % match.group(1)
    elif tag in ('a', 'br', 'ul', 'li', 'b', 'strong', 'em', 'i'):
        return match.group(0)
    return u''

def cleanbody(html):
    return CLEANBODY_RE.sub(_repl, html)

答案 2 :(得分:0)

将要保留的元素替换为占位符值,然后将剩余的&lt;。*&gt; regex输出,最后用相应的html元素替换占位符。