使用 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 在标签内获取 html 文本