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")
广告

© . All rights reserved.