使用BeautifulSoup获取标记的孩子

时间:2016-01-11 11:47:03

标签: python python-2.7 beautifulsoup html-parsing

我正在编写一个分析工具,用于计算源代码中有多少个孩子有HTML标记。

我使用BeautifulSoup映射代码,现在我想迭代页面中的任何标记并计算它有多少个孩子。

迭代所有标签的最佳方法是什么?我怎样才能获得所有没有孩子的标签?

3 个答案:

答案 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