Beautiful Soup - 刪除所有指令碼



HTML 中經常使用的標籤之一是 <script> 標籤。它可以方便地在 HTML 中嵌入客戶端指令碼,例如 JavaScript 程式碼。在本章中,我們將使用 BeautifulSoup 從 HTML 文件中刪除指令碼標籤。

<script> 標籤有一個對應的 </script> 標籤。在這兩個標籤之間,您可以包含對外部 JavaScript 檔案的引用,或者在 HTML 指令碼本身中內聯包含 JavaScript 程式碼。

要包含外部 Javascript 檔案,使用的語法為:

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

然後,您可以從 HTML 內部呼叫在此檔案中定義的函式。

您可以將 JavaScipt 程式碼放在 HTML 中的 <script> 和 </script> 程式碼之間,而不是引用外部檔案。如果將其放在 HTML 文件的 <head> 部分,則整個文件樹都可以使用該功能。另一方面,如果將其放在 <body> 部分的任何位置,則從該點開始可以使用 JavaScript 函式。

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

使用 Beautiful 刪除所有指令碼標籤很容易。您必須從解析樹中收集所有指令碼標籤的列表,並逐個提取它們。

示例

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)

輸出

<html>
<head>

</head>
</html>

您也可以使用 decompose() 方法而不是 extract() 方法,區別在於後者返回已刪除的內容,而前者只是銷燬它。為了使程式碼更簡潔,您還可以使用列表推導式語法來實現刪除了指令碼標籤的 soup 物件,如下所示:

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

© . All rights reserved.