python:根据内容替换HTML元素

2 投票
1 回答
3076 浏览
提问于 2025-04-16 15:34

我有一个HTML文档,其中有些元素包含我想隐藏的内容(就像中国政府那样,不过我只是想隐藏一些机密信息)。比如说,我有:

<div>
    <span> bkhiu jknd o so so so  yui iou 789 </span>
    <span>
        bkhiu
        <div> 56 898tr SECRET oij890 </div>
    </span>
</div>

我想找到所有包含字符串SECRET的元素,并把它们的内容全部替换成###:

<div>
    <span> bkhiu jknd o so so so  yui iou 789 </span>
    <span>
        bkhiu
        <div>###</div>
    </span>
</div>

我考虑过使用minidomre,像这样:

xmldoc = minidom.parseString(my_html_string)
# filtering nodes by their content
sensitive_nodes = filter(lambda n: re.search('SECRET', n.nodeValue), 
    xmldoc.getElementsByTagName())
# replacing content
for node in sensitive_nodes:
    node.nodeValue = '###'
# output
my_html_string = xmldoc.toxml()

但首先,解析根本没有成功:

ExpatError: mismatched tag: line 27, column 6

而且.getElementsByTagName()需要一个tagName参数……但我并不在乎标签名,我需要所有节点(以便根据它们的内容进行过滤)。基本上,这段代码根本不管用,只是想解释一下我想实现的目标。

有没有简单的方法可以做到这一点?用minidom还是其他完全不同的方式?

1 个回答

3

好的... 我找到了一种非常简单的方法,使用BeautifulSoup库:

import re
from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(my_html)
nodes_to_censor = soup.findAll(text=re.compile('.*SECRET.*'))
for node in nodes_to_censor:
    node.replaceWith('###')

撰写回答