Beautiful Soup - descendants 属性



方法描述

使用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>TutorialsPoint</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>TutorialsPoint</title>
TutorialsPoint
广告
© . All rights reserved.