我想对每段文本进行一次字符串替换,并保持树结构。例如,每个字符串将被反转:abc > cba。如果我将“replace_with()”应用于父节点,它只是连接嵌套文本,并展平父元素。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>此外,在某些情况下(此处未显示)循环处理内部子项,并在父项处再次重新处理它们,导致混合结果;例如abc def abc > cba def cba我想找到一种方法来检索每段文本,并独立处理它。如何?
1 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
您可以使用.find_all(text=True)仅查找文本节点然后处理它们。
例如:
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
提交
取消