本章解释了如何从HTML文档中移除所有样式。层叠样式表(CSS)用于控制HTML文档不同方面的外观。这包括使用特定字体、颜色、对齐方式、间距等来设置文本的样式。CSS可以以不同的方式应用于HTML标签。
一种方法是在CSS文件中定义不同的样式,并在文档的<head>
部分使用<link>
标签包含进HTML脚本中。例如,
示例
<html>
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
. . .
. . .
</body>
</html>
HTML脚本正文部分的不同标签将使用mystyle.css文件中的定义。
另一种方法是在HTML文档本身的<head>
部分内部定义样式配置。正文部分的标签将使用内部提供的定义进行渲染。
内部样式的示例
<html>
<head>
<style>
p {
text-align: center;
color: red;
}
</style>
</head>
<body>
<p>para1.</p>
<p id="para1">para2</p>
<p>para3</p>
</body>
</html>
无论哪种情况,要通过编程方式移除样式,只需从soup对象中移除<head>
标签即可。
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
soup.head.extract()
第三种方法是在标签本身中通过包含style
属性来定义样式。style
属性可能包含一个或多个样式属性定义,例如颜色、大小等。例如,
<body>
<h1 style="color:blue;text-align:center;">This is a heading</h1>
<p style="color:red;">This is a paragraph.</p>
</body>
要从HTML文档中移除这样的内联样式,你需要检查标签对象的attrs字典是否有定义style
键,如果有,则删除它。
tags = soup.find_all()
for tag in tags:
if tag.has_attr('style'):
del tag.attrs['style']
以下代码不仅移除了内联样式,而且还移除了<head>
标签本身,因此结果的HTML树将不再有任何样式。
html = '''
<html>
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1 style="color:blue;text-align:center;">This is a heading</h1>
<p style="color:red;">This is a paragraph.</p>
</body>
</html>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
soup.head.extract()
tags = soup.find_all()
for tag in tags:
if tag.has_attr('style'):
del tag.attrs['style']
print(soup.prettify())
输出
<html>
<body>
<h1>
This is a heading
</h1>
<p>
This is a paragraph.
</p>
</body>
</html>