【发布时间】:2015-01-27 12:30:10
【问题描述】:
我正在做美味的汤。 我有一个 html 字符串:
<div><b>ignore this</b>get this</div>
如何检索“get this”,而忽略“ignore this”
谢谢
【问题讨论】:
标签: python python-3.x beautifulsoup
我正在做美味的汤。 我有一个 html 字符串:
<div><b>ignore this</b>get this</div>
如何检索“get this”,而忽略“ignore this”
谢谢
【问题讨论】:
标签: python python-3.x beautifulsoup
您可以获得div 文本,而不是递归检索子文本:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<div><b>ignore this</b>get this</div>')
>>> soup.div.find(text=True, recursive=False)
u'get this'
这与文本相对于子项的位置无关:
>>> soup = BeautifulSoup('<div>get this<b>ignore this</b></div>')
>>> soup.div.find(text=True, recursive=False)
u'get this'
【讨论】:
recursive=False 如何为您提供div 的文本,而忽略子元素,无论它们的位置如何。 (谢谢,我在第二个 sn-p 中将 s 修正为 soup 错字:))
<div class="main"><div class="sub">Text1.<span>I don't want this text.</span></div><div class="sub">Text2.<span>I don't want this text either.</span></div></div>。我一直在尝试做的是使用soup.findAll('div','sub', recursive=False),但这给了我一个空列表,而soup.findAll('div','sub')给了我Text1. I don't want this text. Text2. I don't want this text either.我在这里做错了什么?
find_all 返回匹配列表。您需要将我的解决方案应用于每个匹配的 div。像这样的东西:' '.join(div.find(text=True, recursive=False) for div in soup.findAll('div', 'sub'))。如果需要,然后将所有文本连接到一个字符串中。