Beautiful Soup - 删除所有样式



本章解释如何从HTML文档中删除所有样式。层叠样式表(CSS)用于控制HTML文档不同方面的外观。它包括使用特定的字体、颜色、对齐方式、间距等来设置文本的渲染样式。CSS可以通过不同的方式应用于HTML标签。

一种是在CSS文件中定义不同的样式,并使用``标签在文档的``部分的HTML脚本中包含该文件。例如:

示例

<html>
   <head>
      <link rel="stylesheet" href="style.css">
   </head>
   <body>
   . . .
   . . .
   </body>
</html>

HTML脚本主体部分的不同标签将使用mystyle.css文件中的定义。

另一种方法是在HTML文档本身的``部分定义样式配置。主体部分的标签将使用内部提供的定义进行渲染。

内部样式示例:

<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']
print (soup)

以下代码删除内联样式并删除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>
广告
© . All rights reserved.