Beautiful Soup 简明教程
Beautiful Soup - Find all Comments
计算机代码中加入注释被认为是一种良好的编程实践。注释有助于理解程序的逻辑,同时也可以作为文档。和用 C、Java、Python 等语言编写的程序一样,您还可以在 HTML 和 XML 脚本中添加注释。BeautifulSoup API 可以帮助识别 HTML 文档中的所有注释。
在 HTML 和 XML 中,注释文本写在 <!-- 和 -→ 标签之间。
<!-- Comment Text -->
BeutifulSoup 包,其内部名称为 bs4,将注释定义为一个重要的对象。注释对象是一种特殊的 NavigableString 对象类型。因此,任何在 <!-- 和 -→ 之间找到的标签的 string 属性都被认为是注释。
Example
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))
Output
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 文档,并找到了其中的所有注释。
Example
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)