在BeautifulSoup4和Python3中,如何停止在找到的标记中递归?

在BeautifulSoup4和Python3中,如何停止在找到的标记中递归?,python,python-3.x,beautifulsoup,Python,Python 3.x,Beautifulsoup,我的html文档如下所示: <html> <body> <font color="#151B54"> outer font <font color="#512222"> inner font </font> </font> <p> <font color="#512222"> sibling font </font>

我的html文档如下所示:

<html>
<body>
 <font color="#151B54">
     outer font
   <font color="#512222">
       inner font
   </font>
 </font>
 <p>
     <font color="#512222">
       sibling font
     </font>
 </p>
</body>
</html>
我尝试的是:

  • 使用文本

    soup = BeautifulSoup(htmlText)
    for i in soup.body.find_all('font'):
        print(i.text) 
    
    给我陈述:

    outer font
    inner font
    inner font
    sibling font
    
  • 使用字符串

    soup = BeautifulSoup(htmlText)
    for i in soup.body.find_all('font')
        print(i.string)
    
    遗漏了一些文本:

    None
    inner font
    sibling font
    
  • 如何获得所需的输出

    更新


    html文档只是我给出的一个例子来解释这种情况。在我的一些文档中,包含“同级字体”的“字体”标记不一定总是在“p”标记内。也可以在各种其他标记中嵌套多个“字体”标记。因此,我需要一个通用的解决方案。

    您可以检查父项是否也是
    字体
    标记

    print([node.text for node in soup.find_all('font') if node.parent.name != "font"])
    
    print([node.text for node in soup.find_all('font') if node.parent.name != "font"])
    
    for node in soup.findAll('font'):    
        inner_text = [element for element in node if isinstance(element, NavigableString)]
        print (''.join(inner_text))
    
    outer font  
    inner font 
    sibling font