У меня есть 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>
Я думал об использовании minidom
и re
с чем-то вроде:
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
... в то время как мне нет дела до имени тега и мне нужны ВСЕ узлы (для фильтрации по их содержимому). По сути, этот код вообще не работает, а просто пытается объяснить, чего я хочу достичь.
Есть идеи, как я мог бы сделать это легко? С минидом или чем то совсем другим?