2

一部の要素に隠したいものが含まれているhtmlドキュメントがあります(機密情報を隠したいだけであることを除いて、中国政府が行っているように)。たとえば、私が持っているとしましょう:

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

そして、 string を含むすべての要素を取得し、SECRETコンテンツ全体を ### に置き換えるだけです:

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

私は次のようなものでminidomandreを使用することを考えました:

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 またはまったく異なるものとは?

4

1 に答える 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('###')
于 2011-04-12T12:02:57.943 に答える