Beautiful Soup 简明教程
Beautiful Soup - Remove Child Elements
HTML 文档是不同标记的分层排列,其中一个标记可能在其上嵌套一个或多个标记,并在多个层级中。我们如何删除特定标记的子元素?使用 BeautifulSoup,这非常容易。
BeautifulSoup 库中有两种主要方法,可以删除特定标记。decompose() 方法和 extract() 方法,区别在于后者返回被移除的内容,而前者只是将其销毁。
因此,要删除子元素,请为给定的 Tag 对象调用 findChildren() 方法,然后在每个方法上 extract() 或 decompose()。
考虑以下代码段:
soup = BeautifulSoup(fp, "html.parser")
soup.decompose()
print (soup)
这将销毁整个 soup 对象本身,即文档的已解析树。显然,我们不想这样做。
现在是以下代码:
soup = BeautifulSoup(fp, "html.parser")
tags = soup.find_all()
for tag in tags:
for t in tag.findChildren():
t.extract()
在文档树中,<html> 是第一个标记,所有其他标记都是其子代,因此,在循环的第一次迭代中,它将删除除 <html> 和 </html> 之外的所有标记。
如果我们想删除特定标记的子代,则可以使用此方法更有效。例如,您可能希望删除 HTML 表格的头行。
以下 HTML 脚本有一个表格,第一个 <tr> 元素具有用 <th> 标记标记的标题。
<html>
<body>
<h2>Beautiful Soup - Remove Child Elements</h2>
<table border="1">
<tr class='header'>
<th>Name</th>
<th>Age</th>
<th>Marks</th>
</tr>
<tr>
<td>Ravi</td>
<td>23</td>
<td>67</td>
</tr>
<tr>
<td>Anil</td>
<td>27</td>
<td>84</td>
</tr>
</table>
</body>
</html>
我们可以使用以下 Python 代码删除具有 <th> 单元的 <tr> 标记的所有子元素。