在 BeautifulSoup4、Python3 中,如何停止在找到的标签内递归?
In BeautifulSoup4, Python3, How to stop recursing inside a found tag?
我的 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>
我想提取 'font' 标签之间的所有文本。预期输出:
outer font
inner font
sibling font
我试过的是:
使用文字
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文档只是我举的一个例子来说明情况。在我的一些文档中,包含 'sibling font' 的 'font' 标签不一定总是在 'p' 标签内。也可以有多个 'font' 标签嵌套在各种其他标签中。所以,我需要一个通用的解决方案。
您可以检查父项是否也是 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
我的 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>
我想提取 'font' 标签之间的所有文本。预期输出:
outer font
inner font
sibling font
我试过的是:
使用文字
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文档只是我举的一个例子来说明情况。在我的一些文档中,包含 'sibling font' 的 'font' 标签不一定总是在 'p' 标签内。也可以有多个 'font' 标签嵌套在各种其他标签中。所以,我需要一个通用的解决方案。
您可以检查父项是否也是 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