Python网络编程之BeautifulSoup库的使用(二)

接上篇:


5. 遍历文档树


(1)直接子节点


Tag的.content属性可以将tag的子节点以列表的形式输出,用例:

输出:


Tag的.children属性可以将tag的所有子节点返回,返回形式不是一个list,而是一个list生成器,需要通过遍历来获取所需的子节点,用例:

输出:

(2)所有子孙节点


.children和.content返回的仅仅是tag的直接子节点,而.descendants可以对所有tag的子孙节点进行递归循环遍历,用例:

输出:

从输出结果来看,所有节点都被打印出来,首先是最外层的html标签,接着是head标签,一层层的剥离。


(3)节点内容


如果tag只有一个 NavigableString 类型子节点,那么这个tag可以使用 .string 得到子节点。如果一个tag仅有一个子节点,那么这个tag也可以使用 .string 方法,输出结果与当前唯一子节点的 .string 结果相同。


如果tag包含了多个子节点,tag就无法确定string 方法应该调用哪个子节点的内容, .string 的输出结果是 None,用例:

输出:


(4)多个内容

.strings属性可以获得多个内容,通过遍历实现,用例:

输出:

输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容,用例:

输出:

(5)父节点


通过元素的 .parents属性可以得到元素的所有父节点,用例:

输出:


(6)所有父节点


通过元素的 .parents 属性可以递归得到元素的所有父辈节点,用例:

输出:


(7)兄弟节点


兄弟节点可以理解为和本节点处在统一级的节点,.next_sibling 属性获取了该节点的下一个兄弟节点,.previous_sibling 则与之相反,如果节点不存在,则返回 None

注意:实际文档中的tag的 .next_sibling 和 .previous_sibling 属性通常是字符串或空白,因为空白或者换行也可以被视作一个节点,所以得到的结果可能是空白或者换行,用例:

输出都是空白,但是下面用例:

输出:


(8)全部兄弟节点


通过 .next_siblings 和 .previous_siblings 属性可以对当前节点的兄弟节点迭代输出,用例:

输出:

下节待续......

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容