Python 如何在Beauty soup中获取递归节点的最内部XML
使用此代码Python 如何在Beauty soup中获取递归节点的最内部XML,python,python-3.x,beautifulsoup,Python,Python 3.x,Beautifulsoup,使用此代码 3404981 轮胎 6388965011 轮胎和内胎 3403201 骑脚踏车兜风 3375301 类别 1. 3375251 运动与户外 我试图使用美丽的汤,以获得最内部的节点。在本例中为“运动与户外”。因为我不知道一个BrowseNode可以进入多少层,如果假设最内层是我需要的根,我怎么才能得到最内层呢 谢谢如果您可以相信每个BrowseNode都有或没有后代,这非常简单: def deepest(root, tag): descendant = root.find(
3404981
轮胎
6388965011
轮胎和内胎
3403201
骑脚踏车兜风
3375301
类别
1.
3375251
运动与户外
我试图使用美丽的汤,以获得最内部的节点。在本例中为“运动与户外”。因为我不知道一个BrowseNode可以进入多少层,如果假设最内层是我需要的根,我怎么才能得到最内层呢
谢谢如果您可以相信每个
BrowseNode
都有或没有后代,这非常简单:
def deepest(root, tag):
descendant = root.find(tag)
if descendant:
return deepest(descendant, tag)
return root
(你可以让它更简洁,但我想让逻辑尽可能清晰。)
如果一个
BrowseNode
可能有两个或更多的BrowseNode
子体,并且您必须找到最深的子体,那么您必须修改它以进行深度优先搜索。这并不难;您只需使最深
返回(级别,节点)
而不只是节点
,使用查找所有
而不是查找
,并对子代中的子代执行最大值(最深(子代,标记))
如果您确实需要在文档中的任何位置获取嵌套最深的一个,您可以查看所有嵌套,然后计算父嵌套。对于非大型文档,性能应该是正常的。注:这不适用于两个与兄弟元素深度相同或位于不同位置的此类元素的情况
深度=(
(elem,sum(如果p.name=='BrowseNode'),则elem.parents中的p为1)
用于汤中的元素。findAll('BrowseNode'))
最深元素,最深深度=最大(深度,键=λt:t[1])
是什么让运动与户外
比3375251
更深入呢?它不……我的问题是关于标签……我不知道它会深入到什么程度。这对我来说是递归的。我想要的是最里面的标签的值。谢谢。好的,你是否必须处理一个BrowseNode
可能有两个BrowseNode
子节点的可能性,其中一个比另一个更深,或者你是否可以相信每个BrowseNode
下都有0或1个BrowseNode
s?