Beautiful Soup 简明教程

Beautiful Soup - find_all() Method

Method Description

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

Syntax

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

Parameters

name − 对标记名称的筛选。

attrs − 对属性值进行筛选的字典。

recursive − 如果为 True,则 find() 将执行递归搜索。否则,仅考虑直接子元素。

limit − 在找到指定数量的出现次数后停止寻找。

kwargs − 对属性值进行筛选的字典。

Return type

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

Example 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)

Output

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

Example 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 参数中传递一个字符串。使用字符串,你可以搜索字符串而非标签。你可以传递字符串、正则表达式、列表、函数或真值。

在本示例中,一个函数被传递给了 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)

Output

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

Example 3

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

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

print (lst)

Output

[<li>Accounts</li>, <li>Anand</li>]