概述
1)直接子节点
要点:.contents .children 属性
.contents,tag 的 .content 属性可以将tag的子节点以列表的方式输出,
1 2 |
|
输出方式为列表,我们可以用列表索引来获取它的某一个元素
1 2 |
|
.children ,返回的不是一个 list,不过我们可以通过遍历获取所有子节点。
我们打印输出 .children 看一下,可以发现它是一个 list 生成器对象
1 2 |
|
我们怎样获得里面的内容呢?很简单,遍历一下就好了,代码及结果如下
1 2 |
|
(2)所有子孙节点
知识点:.descendants 属性
.descendants
.contents 和 .children 属性仅包含tag的直接子节点,.descendants 属性可以对所有tag的子孙节点进行递归循环,和 children类似,我们也需要遍历获取其中的内容。
1 2 |
|
运行结果如下,可以发现,所有的节点都被打印出来了,先生最外层的 HTML标签,其次从 head 标签一个个剥离,以此类推。
(3)节点内容
知识点:.string 属性
如果tag只有一个 NavigableString 类型子节点,那么这个tag可以使用 .string 得到子节点。
如果一个tag仅有一个子节点,那么这个tag也可以使用 .string 方法,输出结果与当前唯一子节点的 .string 结果相同。
通俗点说就是:如果一个标签里面没有标签了,那么 .string 就会返回标签里面的内容。
如果标签里面只有唯一的一个标签了,那么 .string 也会返回最里面的内容。例如
1 2 3 4 |
|
如果tag包含了多个子节点,tag就无法确定,string 方法应该调用哪个子节点的内容, .string 的输出结果是 None
1 2 |
|
注意:
这样无换行的就可以。
# <head><title>The Dormouse's story</title></head>
这样有换行的就不可以。
# <head>
# <title>The Dormouse's story</title>
# </head>
(4)多个内容
知识点: .strings .stripped_strings 属性
.strings
获取多个内容,不过需要遍历获取,比如下面的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
.stripped_strings
输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容
1 2 3 4 5 6 7 8 9 10 11 12 |
|
(5)父节点
知识点: .parent 属性
1 2 3 4 5 6 7 |
|
(6)全部父节点
知识点:.parents 属性
通过元素的 .parents 属性可以递归得到元素的所有父辈节点,例如
1 2 3 |
|
(7)兄弟节点
知识点:.next_sibling .previous_sibling 属性
兄弟节点可以理解为和本节点处在统一级的节点,.next_sibling 属性获取了该节点的下一个兄弟节点,.previous_sibling 则与之相反,如果节点不存在,则返回 None
注意:实际文档中的tag的 .next_sibling 和 .previous_sibling 属性通常是字符串或空白,因为空白或者换行也可以被视作一个节点,所以得到的结果可能是空白或者换行
1 2 3 4 5 6 7 8 9 10 11 |
|
(8)全部兄弟节点
知识点:.next_siblings .previous_siblings 属性
通过 .next_siblings 和 .previous_siblings 属性可以对当前节点的兄弟节点迭代输出
1 2 3 4 5 6 7 8 |
|
(9)前后节点
知识点:.next_element .previous_element 属性
与 .next_sibling .previous_sibling 不同,它并不是针对于兄弟节点,而是在所有节点,不分层次
比如 head 节点为
<head><title>The Dormouse's story</title></head>
那么它的下一个节点便是 title,它是不分层次关系的
1 2 |
|
(10)所有前后节点
知识点:.next_elements .previous_elements 属性
通过 .next_elements 和 .previous_elements 的迭代器就可以向前或向后访问文档的解析内容,就好像文档正在被解析一样
1 2 3 4 5 6 7 8 9 |
|
最后
以上就是单身柠檬为你收集整理的BeautifulSoup 遍历文档树的全部内容,希望文章能够帮你解决BeautifulSoup 遍历文档树所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复