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

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

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

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

【问题讨论】:

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

标签: python python-2.7 beautifulsoup html-parsing


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        • 2021-11-27
        • 2015-08-26
        • 2012-07-08
        • 2017-06-29
        • 1970-01-01
        相关资源
        最近更新 更多