在计算机代码中插入注释被认为是一种良好的编程实践。注释有助于理解程序的逻辑,同时也起到了文档的作用。就像在用 C、Java、Python 等编写的程序中一样,你也可以在 HTML 以及 XML 脚本中放置注释。BeautifulSoup API 可以帮助识别 HTML 文档中的所有注释。
在 HTML 和 XML 中,注释文本写在 <!--
和 -->
标签之间。
BeutifulSoup
包,其内部名称为 bs4
,定义了 Comment
作为一个重要的对象。Comment
对象是一种特殊的 NavigableString
对象。因此,任何在 <!--
和 -->
之间的 Tag
的字符串属性都被识别为 Comment
。
示例
from bs4 import BeautifulSoup
markup = "<b><!--这是一个 HTML 中的注释文本--></b>"
soup = BeautifulSoup(markup, 'html.parser')
comment = soup.b.string
print (comment, type(comment))
输出
这是一个 HTML 中的注释文本 <class 'bs4.element.Comment'>
为了在一个 HTML 文档中搜索所有注释的发生,我们将使用 find_all()
方法。没有参数的情况下,find_all()
返回解析后的 HTML 文档中的所有元素。你可以向 find_all()
方法传递一个关键字参数 string
。我们将把函数 iscomment()
的返回值赋给它。
comments = soup.find_all(string=iscomment)
iscomment()
函数利用 isinstance()
函数验证标签中的文本是否为 Comment
对象。
def iscomment(elem):
return isinstance(elem, Comment)
comments
变量将会存储给定 HTML 文档中所有注释文本的发生。我们在示例代码中将会使用以下的 index.html
文件:
<html>
<head>
<title>Yoagoa</title>
</head>
<body>
<h2>Departmentwise Employees</h2>
<ul id="dept">
<li>Accounts</li>
<ul id='acc'>
<li>Anand</li>
<li>Mahesh</li>
</ul>
<li>HR</li>
<ul id="HR">
<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)
输出
[' 文档的标题 ', ' 页面标题 ', ' 顶层列表', ' 第一个内部列表 ', ' 第二个内部列表 ']
以上输出显示了所有注释的一个列表。我们也可以在注释集合上使用 for
循环。
示例
i=0
for comment in comments:
i+=1
print (i,".",comment)
输出
1 . 文档的标题
2 . 页面标题
3 . 顶层列表
4 . 第一个内部列表
5 . 第二个内部列表
在本章中,我们学习了如何提取 HTML 文档中的所有注释字符串。