Beautiful Soup 简明教程

Beautiful Soup - Find Elements by Class

CSS(层叠样式表)是设计 HTML 元素外观的工具。CSS 规则控制 HTML 元素的不同方面,如大小、颜色、对齐方式等。应用样式比定义 HTML 元素属性更有效。您可以将样式规则应用于每个 HTML 元素。CSS 类用于将类似的样式应用于 HTML 元素组以获得统一的网页外观,而不是逐个应用样式到每个元素。在 BeautifulSoup 中,可以找到使用 CSS 类设置样式的标签。在本章中,我们将使用以下方法搜索指定 CSS 类的元素:

  1. find_all() and find() methods

  2. select() and select_one() methods

Class in 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>

Using find() and find_all()

要搜索标签中使用的特定 CSS 类的元素,请按如下使用 Tag 对象的 attrs 属性:

Example

from bs4 import BeautifulSoup

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

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

Output

[<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>
]

Using select() and select_one()

您还可以使用 select() 方法,CSS 选择器作为参数。(.)符号后跟类名用作 CSS 选择器。

Example

from bs4 import BeautifulSoup

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

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

Output

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

select_one() 方法返回找到的第一个具有给定类的元素。

obj = soup.select_one(".submenu")