在BeautifulSoup4和Python3中,如何停止在找到的标记中递归?
我的html文档如下所示:在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>
<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