我想對每段文本進行一次字符串替換,并保持樹結構。例如,每個字符串將被反轉(zhuǎn):abc > cba。如果我將“replace_with()”應用于父節(jié)點,它只是連接嵌套文本,并展平父元素。nodes = soup.find_all(['a','b'])for node in nodes: rep = node.text[::-1] node.string.replace_with(rep)輸入:<xml><a>abc <b>def </b> ghi <a>jkl <b>mno</b> jkl </a> ghi <b>def </b>abc</a></xml>輸出:<xml> cba fed ihg lkj ihg fed cbA </xml>此外,在某些情況下(此處未顯示)循環(huán)處理內(nèi)部子項,并在父項處再次重新處理它們,導致混合結果;例如abc def abc > cba def cba我想找到一種方法來檢索每段文本,并獨立處理它。如何?
1 回答

阿晨1998
TA貢獻2037條經(jīng)驗 獲得超6個贊
您可以使用.find_all(text=True)僅查找文本節(jié)點然后處理它們。
例如:
txt = '''<xml>
<a>abc
<b>def </b>
ghi
<a>jkl
<b>mno</b>
jkl </a>
ghi
<b>def </b>
abc</a>
</xml>'''
soup = BeautifulSoup(txt, 'html.parser')
for t in soup.find_all(text=True):
t.replace_with(t[::-1])
print(soup.prettify())
印刷:
<xml>
<a>
cba
<b>
fed
</b>
ihg
<a>
lkj
<b>
onm
</b>
lkj
</a>
ihg
<b>
fed
</b>
cba
</a>
</xml>
添加回答
舉報
0/150
提交
取消