删除特定深度以上的所有子标签
我们先来看一个简单的HTML示例。假设我们想要删除所有深度超过2层的子节点,也就是只保留前两层的内容,然后再进行截断和删除。
<html>
<head>
<title></title>
<meta />
<meta />
<link />
</head>
<body>
<div>
<div>
<a></a>
<a></a>
<a></a>
</div>
<span>
<h1>
<li></li>
<li></li>
</h1>
</span>
</div>
</body>
这样处理后,结果可能会变成这样:
<html>
<head>
<title></title>
<meta />
<meta />
<link />
</head>
<body>
<div>
<div></div>
<span></span>
</div>
</body>
2 个回答
1
也许可以这样做:
for child in body.children:
for element in child.children:
element.clear()
2
这个想法是递归地遍历所有元素,并逐层向上计数父元素:
from bs4 import BeautifulSoup
from urllib2 import urlopen
data = """your html goes here"""
depth = 5
soup = BeautifulSoup(data)
for tag in soup.find_all():
if len(list(tag.parents)) == depth:
tag.extract()
print soup.prettify()
输出结果是:
<html>
<head>
<title>
</title>
<meta/>
<meta/>
<link/>
</head>
<body>
<div>
<div></div>
<span></span>
</div>
</body>
</html>