一、方法描述
在 Beautiful Soup API 中,PageElement 对象的 descendants
属性允许你遍历其下所有的子元素。此属性返回一个生成器对象,可以用来以广度优先的顺序检索子元素。
在搜索树结构时,广度优先遍历从树根开始,并在进入下一层深度之前先探索当前深度级别的所有节点。
二、语法
tag.descendants
三、返回值
descendants
属性返回一个生成器对象。
四、示例
示例 1
在下面的代码中,我们有一个包含嵌套无序列表标签的 HTML 文档。我们通过广度优先的方式解析子元素。
html = '''
<ul id='outer'>
<li class="mainmenu">Accounts</li>
<ul>
<li class="submenu">Anand</li>
<li class="submenu">Mahesh</li>
</ul>
<li class="mainmenu">HR</li>
<ul>
<li class="submenu">Anil</li>
<li class="submenu">Milind</li>
</ul>
</ul>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tag = soup.find('ul', {'id': 'outer'})
tags = soup.descendants
for desc in tags:
print(desc)
输出:
<ul id="outer">
<li class="mainmenu">Accounts</li>
<ul>
<li class="submenu">Anand</li>
<li class="submenu">Mahesh</li>
</ul>
<li class="mainmenu">HR</li>
<ul>
<li class="submenu">Anil</li>
<li class="submenu">Milind</li>
</ul>
</ul>
<li class="mainmenu">Accounts</li>
Accounts
<ul>
<li class="submenu">Anand</li>
<li class="submenu">Mahesh</li>
</ul>
<li class="submenu">Anand</li>
Anand
<li class="submenu">Mahesh</li>
Mahesh
<li class="mainmenu">HR</li>
HR
<ul>
<li class="submenu">Anil</li>
<li class="submenu">Milind</li>
</ul>
<li class="submenu">Anil</li>
Anil
<li class="submenu">Milind</li>
Milind
示例 2
在下面的例子中,我们列出了 <head>
标签的后代元素。
html = """
<html><head><title>Yoagoa</title></head>
<body>
<p>Hello World</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tag = soup.head
for element in tag.descendants:
print(element)
输出:
<title>Yoagoa</title>
Yoagoa