哆啦的時(shí)光機(jī)
2022-12-27 15:18:55
我想對(duì)每段文本進(jìn)行一次字符串替換,并保持樹結(jié)構(gòu)。例如,每個(gè)字符串將被反轉(zhuǎn):abc > cba。如果我將“replace_with()”應(yīng)用于父節(jié)點(diǎn),它只是連接嵌套文本,并展平父元素。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)部子項(xiàng),并在父項(xiàng)處再次重新處理它們,導(dǎo)致混合結(jié)果;例如abc def abc > cba def cba我想找到一種方法來檢索每段文本,并獨(dú)立處理它。如何?
1 回答

阿晨1998
TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以使用.find_all(text=True)僅查找文本節(jié)點(diǎn)然后處理它們。
例如:
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>
添加回答
舉報(bào)
0/150
提交
取消