Beautiful Soup - find_all() 方法



方法描述

Beautiful Soup 中的 find_all() 方法查找此 PageElement 子元素中与给定条件匹配的元素,并返回所有元素的列表。

语法

Soup.find_all(name, attrs, recursive, string, **kwargs)

参数

name − 标签名称过滤器。

attrs − 属性值过滤器的字典。

recursive − 如果为 True,则执行递归搜索。否则,只考虑直接子元素。

limit − 找到指定数量的匹配项后停止查找。

kwargs − 属性值过滤器的字典。

返回类型

find_all() 方法返回一个 ResultSet 对象,它是一个列表生成器。

示例 1

当我们为 name 传递值时,Beautiful Soup 只考虑具有特定名称的标签。文本字符串将被忽略,不匹配名称的标签也将被忽略。在这个例子中,我们将 title 传递给 find_all() 方法。

from bs4 import BeautifulSoup
html = open('index.html')
soup = BeautifulSoup(html, 'html.parser')
obj = soup.find_all('input')
print (obj)

输出

[<input id="nm" name="name" type="text"/>, <input id="age" name="age" type="text"/>, <input id="marks" name="marks" type="text"/>]

示例 2

我们将在本例中使用以下 HTML 代码:

<html>
   <body>
      <h2>Departmentwise Employees</h2>
      <ul id="dept">
      <li>Accounts</li>
         <ul id='acc'>
         <li>Anand</li>
         <li>Mahesh</li>
         </ul>
      <li>HR</li>
         <ol id="HR">
         <li>Rani</li>
         <li>Ankita</li>
         </ol>
      </ul>
   </body>
</html>

我们可以将字符串传递给 find_all() 方法的 name 参数。使用字符串,您可以搜索字符串而不是标签。您可以传入字符串、正则表达式、列表、函数或值 True。

在本例中,一个函数被传递给 name 参数。所有以 'A' 开头的名称都将由 find_all() 方法返回。

from bs4 import BeautifulSoup

def startingwith(ch):
   return ch.startswith('A')

soup = BeautifulSoup(html, 'html.parser')

lst=soup.find_all(string=startingwith)

print (lst)

输出

['Accounts', 'Anand', 'Ankita']

示例 3

在本例中,我们将 limit=2 参数传递给 find_all() 方法。该方法返回前两个出现的 <li> 标签。

soup = BeautifulSoup(html, 'html.parser')
lst=soup.find_all('li', limit =2)

print (lst)

输出

[<li>Accounts</li>, <li>Anand</li>]
广告
© . All rights reserved.