CSS(层叠样式表)是一种用来设计HTML元素外观的工具。CSS规则控制着HTML元素的不同方面,比如大小、颜色、对齐等。应用样式比定义HTML元素属性更为有效。你可以为每一个HTML元素应用样式规则。相比于为每个元素单独应用样式,使用CSS类来为一组HTML元素应用相似的样式以达到统一的网页外观更加高效。在BeautifulSoup中,可以通过CSS类来查找带有特定样式的标签。在本章中,我们将使用以下方法来查找具有指定CSS类的元素:
-
-
select()
和 select_one()
方法
CSS 中的类
CSS中的类是一组指定与外观相关特性的属性集合,例如字体类型、大小和颜色、背景色、对齐方式等。在声明类时,类名前缀为一个点 (.
)。
.className {
css declarations;
}
CSS类可以在行内定义,也可以在单独的CSS文件中定义,该文件需要在HTML脚本中引用。典型的CSS类定义如下所示:
.blue-text {
color: blue;
font-weight: bold;
}
你可以使用以下BeautifulSoup方法来查找定义了特定类样式的HTML元素。
为了本章的目的,我们将使用以下HTML页面:
<html>
<head>
<title>Yoagoa</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")