我正在编写一个分析工具,用于计算源代码中有多少个孩子有HTML标记。
我使用BeautifulSoup映射代码,现在我想迭代页面中的任何标记并计算它有多少个孩子。
迭代所有标签的最佳方法是什么?我怎样才能获得所有没有孩子的标签?
答案 0 :(得分:0)
我使用BeautifulSoup也是如此。使用每个元素的 findChildren 方法
在下面的代码中, fullData 包含网页的HTML字符串
soup=BeautifulSoup(fullData)
elements = soup.findAll()
def findElements(dataList,el):
temp=el.findChildren()
if(len(temp)==0):
print(el.get_text())
tempResults=[findElements(dataList,el) for el in elements]
希望这有帮助
答案 1 :(得分:0)
如果您使用没有参数的find_all()
,则可以迭代每个标记。
您可以使用len(tag.contents)
获取标记所包含的子项数。
获取没有孩子的所有标签的列表:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open('someHTMLFile.html', 'r'), 'html.parser')
body = soup.body
empty_tags = []
for tag in body.find_all():
if len(tag.contents) == 0:
empty_tags.append(tag)
print empty_tags
...或
empty_tags = [tag for tag in soup.body.find_all() if len(tag.contents) == 0]
答案 2 :(得分:0)
您可以使用len()
函数来计算标签的子代数。
meta_tags = soup.findAll('meta' , property="article:tag")
if len(meta_tags) < 1:
return False