Beautiful Soup - 查詢所有註釋



在計算機程式碼中插入註釋被認為是一種良好的程式設計實踐。註釋有助於理解程式的邏輯,也作為文件。你可以在HTML和XML指令碼中添加註釋,就像在用C、Java、Python等語言編寫的程式中一樣。BeautifulSoup API可以幫助識別HTML文件中的所有註釋。

在HTML和XML中,註釋文字寫在<!-- 和 --> 標籤之間。

<!-- Comment Text -->

BeautifulSoup包(內部名稱為bs4)將Comment定義為一個重要的物件。Comment物件是一種特殊的NavigableString物件。因此,在<!-- 和 -->之間找到的任何Tag的string屬性都被識別為Comment。

示例

from bs4 import BeautifulSoup
markup = "<b><!--This is a comment text in HTML--></b>"
soup = BeautifulSoup(markup, 'html.parser')
comment = soup.b.string
print (comment, type(comment))

輸出

This is a comment text in HTML <class 'bs4.element.Comment'>

要搜尋HTML文件中所有註釋的出現,我們將使用find_all()方法。沒有任何引數,find_all()返回解析的HTML文件中的所有元素。你可以將關鍵字引數'string'傳遞給find_all()方法。我們將把iscomment()函式的返回值賦給它。

comments = soup.find_all(string=iscomment)

iscomment()函式使用isinstance()函式驗證標籤中的文字是否是註釋物件。

def iscomment(elem):
   return isinstance(elem, Comment)

comments變數將儲存給定HTML文件中的所有註釋文字。我們在示例程式碼中將使用以下index.html檔案:

<html>
   <head>
      <!-- Title of document -->
      <title>TutorialsPoint</title>
   </head>
   <body>
      <!-- Page heading -->
      <h2>Departmentwise Employees</h2>
      <!-- top level list-->
      <ul id="dept">
      <li>Accounts</li>
         <ul id='acc'>
         <!-- first inner list -->
         <li>Anand</li>
         <li>Mahesh</li>
         </ul>
      <li>HR</li>
         <ul id="HR">
         <!-- second inner list -->
         <li>Rani</li>
         <li>Ankita</li>
         </ul>
      </ul>
   </body>
</html>

以下Python程式抓取上述HTML文件,並查詢其中的所有註釋。

示例

from bs4 import BeautifulSoup, Comment

fp = open('index.html')

soup = BeautifulSoup(fp, 'html.parser')

def iscomment(elem):
    return isinstance(elem, Comment)

comments = soup.find_all(string=iscomment)
print (comments)

輸出

[' Title of document ', ' Page heading ', ' top level list', ' first inner list ', ' second inner list ']

上述輸出顯示所有註釋的列表。我們也可以使用for迴圈遍歷註釋集合。

示例

i=0
for comment in comments:
   i+=1
   print (i,".",comment)

輸出

1 .  Title of document 
2 .  Page heading
3 .  top level list
4 .  first inner list
5 .  second inner list

在本章中,我們學習瞭如何提取HTML文件中的所有註釋字串。

廣告