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>]
廣告