Beautiful Soup 简明教程

Beautiful Soup - Remove all Scripts

HTML 中经常使用的一个标记是 <script> 标记。它有助于在 HTML 中嵌入客户端脚本(如 JavaScript 代码)。在本章中,我们将使用 BeautifulSoup 从 HTML 文档中删除脚本标记。

<script> 标记有一个对应的 </script> 标记。在这两个标记之间,你可以包含对外部 JavaScript 文件的引用,或将 JavaScript 代码与 HTML 脚本本身内联。

要包含一个外部 Javascript 文件,请使用以下语法 −

<head>
   <script src="javascript.js"></script>
</head>

然后,你可以在 HTML 中调用在此文件中定义的函数。

除了引用外部文件之外,你还可以将 JavaScipt 代码放在 <script> 和 </script> 代码内的 HTML 中。如果将其放在 HTML 文档的 <head> 部分中,那么该功能将在整个文档树中可用。另一方面,如果将其放在 <body> 部分的任何位置,则 JavaScript 函数从此处可用。

<body>
   <p>Hello World</p>
   <script>
      alert("Hello World")
   </script>
</body>

使用 Beautiful 轻松去除所有脚本标签。您必须从解析树中收集所有脚本标签的列表并逐一提取它们。

Example

html = '''
<html>
   <head>
      <script src="javascript.js"></scrript>
   </head>
   <body>
      <p>Hello World</p>
      <script>
      alert("Hello World")
      </script>
   </body>
</html>
'''
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")

for tag in soup.find_all('script'):
   tag.extract()

print (soup)

Output

<html>
<head>

</head>
</html>

您还可以使用 decompose() 方法,而不是 extract(),不同之处在于后者返回被去除的内容,而前者只是销毁内容。为了获得更简洁的代码,您还可以使用列表推导语法来获取移除了脚本标签的汤对象,如下所示 −

[tag.decompose() for tag in soup.find_all('script')]