Part24 :2 基于bs4库的HTML内容便利方法
那么soup本身是一种特殊的标签,那么他的父亲是谁呢?我们看一下:
没有显示,也就是说明soup的父亲是空的。
下面我们给出一个标签树上行代码:

这段代码呢能够对soup的A标签所有的先辈的名字进行打印。这里面需要注意一点,在遍历一个标签的所有先辈标签时,会遍历到soup本身,而soup的先辈它并不存在.name的信息。所以在这种情况下就要做一个区分:如果先辈是None,我们就不能打印这方面的信息了。
下面我们介绍一下标签树的平行遍历:
beautifulsoup库一共提供了4个标签树的平行遍历属性。分别是:

.next_sibling,它返回按照HTML的文本顺序的下一个平行节点标签。
.previous_sibling,返回按照HTML文本顺序的上一个平行节点标签。
.next_siblings和.previous_siblings是分别对应之前两个属性的迭代类型,它能够分别返回按照HTML文本顺序的后续或者前序的所有平行节点标签。
下面我们看一下相关例子:
那么在看到相关例子之前我们需要注意标签树的平行遍历是有条件的,

所有的平行遍历必须发生在同一个父亲节点下,如果不是同一个父亲节点下的标签之间并不构成平行遍历关系,zaiwome你的树形结构中title和P标签不是平行遍历关系,因此我们没法通过title直接获得P标签。而在body下的两个P标签它们之间构成了平行遍历关系。
下面我们启动IDLE:
首先还是先做一锅汤:

然后我们找a标签的下一个标签:

我们发现a标签的下一个平行节点是一个字符串'and',这里面我们需要强调一下或者是需要注意一下:在标签树中尽管树形结构采用的是标签的形式来组织,但是标签之间的NavigebleString也构成了标签树的节点。也就是说任何一个节点他的平行标签它的儿子标签是可能存在NavigebleString类型的。所以我们并不能想当然的认为平行遍历获得的下一个节点一定是标签类型,这在我们后续的分析中需要做相关的判断,在后面我们会有相关的实例来介绍对这种情况的判断和排除。
好,下面我们看一下a标签下一个平行标签的再下一个标签是什么:

我们看到a标签的下一个标签的再下一个标签是另外一种标签。
好,我们看一下当前a标签的前一个平行节点:

这是一段文本,是在HTML页面中解释a标签之前的信息。我们也可以对a标签之前的节点的再执行节点做平行遍历:

我们发现没有返回任何输出,这说明a标签的前一个节点的再前一个节点是空信息。我们也可以检测一下a标签的父亲节点:

网友评论