使用 BeautifulSoup 获取标签的孩子数

Posted

技术标签:

【中文标题】使用 BeautifulSoup 获取标签的孩子数【英文标题】:Get tag's children count with BeautifulSoup 【发布时间】:2016-04-15 17:14:02 【问题描述】:

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

我用 BeautifulSoup 映射了代码,现在我想遍历页面中的任何标签并计算它有多少孩子。

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

【问题讨论】:

您能给我们举一个您的 HTML 源代码以及您已经尝试过的示例吗? 建议:找到所有没有子标签(“叶子”)的标签,然后按照自己的方式备份。 我可以比较两种汤的标签吗? 【参考方案1】:

如果你使用不带参数的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】:

我也使用 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]

希望对你有帮助

【讨论】:

【参考方案3】:

您可以使用len() 函数计算标签的子代。

meta_tags = soup.findAll('meta' , property="article:tag")
if len(meta_tags) < 1:
    return False

【讨论】:

以上是关于使用 BeautifulSoup 获取标签的孩子数的主要内容,如果未能解决你的问题,请参考以下文章

用beautifulsoup在一个div中获取孩子的文字

如何使用 BeautifulSoup 在标签内获取 html 文本

使用 BeautifulSoup 获取 span 标签的值

怎么使用beautifulsoup获取指定div标签内容

如何使用 BeautifulSoup 从父子标签中获取文本以放入 DOCX 表中

Python BeautifulSoup 获取文本第一个标签