【发布时间】:2020-05-13 16:30:22
【问题描述】:
考虑以下 HTML:
<li>
<a href="url">
<b>This</b>
" is "
<b>a</b>
" test "
<b>string</b>
"!"
</a>
</li>
我想提取除"!" 之外的<a> 标签之间的所有文本。换句话说,包含在第一个开头 <b> 和最后一个结尾 </b> 之间的文本:This is a test string。
from bs4 import BeautifulSoup
html = '''
<li>
<a href="url">
<b>This</b>
" is "
<b>a</b>
" test "
<b>string</b>
"!"
</a>
</li>
'''
soup = BeautifulSoup(html)
anchor = soup.a
请注意,<b> 标记和不带标记的字符串的数量会有所不同,因此 next 或 next_sibling 将不起作用。
有更简单的方法吗?
编辑:
理想情况下,即使在最后一个</b> 之后有多个未包含在标签中的字符串,我也想要一种有效的方法。
【问题讨论】:
-
可能是
[c.text if isinstance(c, element.Tag) else str(c) for c in anchor.contents[:-1]],其中元素是from bs4 import element -
@Justin Ezequiel 谢谢你的建议。这在我的示例中可行,但如果在最后一个
</b>之后有多个未包含在标签中的字符串,则可能会发生这种情况。我认为我的“尝试”示例有点令人困惑,因为它看起来好像我总是在末尾有一个字符串。
标签: python python-3.x beautifulsoup