遍歷文檔樹(shù)
直接子節(jié)點(diǎn)
要點(diǎn):.contents .children 屬性
.contents
tag 的 .content 屬性可以將tag的子節(jié)點(diǎn)以列表的方式輸出
#["<meta charset='utf-8'/>","<title>The Dormouse's story</title>"]
輸出方式為列表闲勺,我們可以用列表索引來(lái)獲取它的某一個(gè)元素
print(soup.head.contents[0])
#<meta charset="utf-8"/>
.children
它返回的不是一個(gè) list,不過(guò)我們可以通過(guò)遍歷獲取所有子節(jié)點(diǎn)。
我們打印輸出 .children 看一下脉课,可以發(fā)現(xiàn)它是一個(gè) list 生成器對(duì)象
print(soup.head.children)
#<list_iterator object at 0x105c1cf28>
獲取里面的內(nèi)容
for child in soup.body.children:
print(child)
所有子孫節(jié)點(diǎn)
知識(shí)點(diǎn):.descendants 屬性
.descendants
.contents 和 .children 屬性?xún)H包含tag的直接子節(jié)點(diǎn)增显,.descendants 屬性可以對(duì)所有tag的子孫節(jié)點(diǎn)進(jìn)行遞歸循環(huán)在塔,和 children類(lèi)似炮赦,我們也需要遍歷獲取其中的內(nèi)容持舆。
節(jié)點(diǎn)內(nèi)容
知識(shí)點(diǎn):.string 屬性
多個(gè)內(nèi)容
知識(shí)點(diǎn): .strings .stripped_strings 屬性
.strings
獲取多個(gè)內(nèi)容板驳,不過(guò)需要遍歷獲取又跛,比如下面的例子
.stripped_strings
輸出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白內(nèi)容
父節(jié)點(diǎn)
知識(shí)點(diǎn): .parent 屬性
全部父節(jié)點(diǎn)
知識(shí)點(diǎn):.parents 屬性
通過(guò)元素的 .parents 屬性可以遞歸得到元素的所有父輩節(jié)點(diǎn),例如
content = soup.head.title.string
for parent in content.parents:
print parent.name
兄弟節(jié)點(diǎn)
知識(shí)點(diǎn):.next_sibling .previous_sibling 屬性
兄弟節(jié)點(diǎn)可以理解為和本節(jié)點(diǎn)處在統(tǒng)一級(jí)的節(jié)點(diǎn)若治,.next_sibling 屬性獲取了該節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn)慨蓝,.previous_sibling 則與之相反,如果節(jié)點(diǎn)不存在端幼,則返回 None
注意:實(shí)際文檔中的tag的 .next_sibling 和 .previous_sibling 屬性通常是字符串或空白礼烈,因?yàn)榭瞻谆蛘邠Q行也可以被視作一個(gè)節(jié)點(diǎn),所以得到的結(jié)果可能是空白或者換行
全部兄弟節(jié)點(diǎn)
知識(shí)點(diǎn):.next_siblings .previous_siblings 屬性
通過(guò) .next_siblings 和 .previous_siblings 屬性可以對(duì)當(dāng)前節(jié)點(diǎn)的兄弟節(jié)點(diǎn)迭代輸出
for sibling in soup.a.next_siblings:
print(repr(sibling))
前后節(jié)點(diǎn)
知識(shí)點(diǎn):.next_element .previous_element 屬性