我的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文档只是我用来解释这种情况的一个例子。在我的一些文档中,包含'兄弟字体'的'font'标签不一定总是在'p'标签内。在其他各种标签中也可以嵌套多个“font”标签。所以,我需要一个通用的解决方案。
答案 0 :(得分:2)
您可以检查父级是否也是font
标记。
print([node.text for node in soup.find_all('font') if node.parent.name != "font"])
答案 1 :(得分:0)
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