Beautiful Soup - 透過類查詢元素



CSS(層疊樣式表)是用於設計 HTML 元素外觀的工具。CSS 規則控制 HTML 元素的不同方面,例如大小、顏色、對齊等。應用樣式比定義 HTML 元素屬性更有效。您可以將樣式規則應用於每個 HTML 元素。與其單獨地將樣式應用於每個元素,不如使用 CSS 類將類似的樣式應用於 HTML 元素組,以實現統一的網頁外觀。在 BeautifulSoup 中,可以找到使用 CSS 類設定樣式的標籤。在本章中,我們將使用以下方法搜尋指定 CSS 類的元素:

  • find_all() 和 find() 方法
  • select() 和 select_one() 方法

CSS 中的類

CSS 中的類是指定與外觀相關的不同特徵(例如字型型別、大小和顏色、背景顏色、對齊等)的屬性的集合。在宣告類時,類名字首為點 (.)。

.class {  
   css declarations;  
}

CSS 類可以內聯定義,也可以在需要包含在 HTML 指令碼中的單獨 css 檔案中定義。CSS 類的典型示例如下:

.blue-text {
   color: blue;
   font-weight: bold;
}

您可以藉助以下 BeautifulSoup 方法搜尋使用特定類樣式定義的 HTML 元素。

在本節中,我們將使用以下 HTML 頁面:

<html>
   <head>
      <title>TutorialsPoint</title>
   </head>
   <body>
      <h2 class="heading">Departmentwise Employees</h2>
      <ul>
         <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">Rani</li>
            <li class="submenu">Ankita</li>
         </ul>
      </ul>
   </body>
</html>

使用 find() 和 find_all()

要搜尋標籤中使用的某個 CSS 類,請使用 Tag 物件的 attrs 屬性,如下所示:

示例

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')

obj = soup.find_all(attrs={"class": "mainmenu"})
print (obj)

輸出

[<li class="mainmenu">Accounts</li>, <li class="mainmenu">HR</li>]

結果是所有具有 mainmenu 類的元素列表

要獲取 attrs 屬性中提到的任何 CSS 類的元素列表,請將 find_all() 語句更改為:

obj = soup.find_all(attrs={"class": ["mainmenu", "submenu"]})

這將生成所有使用上面任何 CSS 類的元素列表。

[
   <li class="mainmenu">Accounts</li>, 
   <li class="submenu">Anand</li>, 
   <li class="submenu">Mahesh</li>, 
   <li class="mainmenu">HR</li>, 
   <li class="submenu">Rani</li>, 
   <li class="submenu">Ankita</li>
] 

使用 select() 和 select_one()

您還可以使用 select() 方法,並將 CSS 選擇器作為引數。點 (.) 後跟類名稱用作 CSS 選擇器。

示例

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')

obj = soup.select(".heading")
print (obj)

輸出

[<h2 class="heading">Departmentwise Employees</h2>]

select_one() 方法返回找到的第一個具有給定類的元素。

obj = soup.select_one(".submenu")
廣告