考虑以下 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>
之后有多个未包含在标签中的字符串也能工作的方法。 .
最佳答案
尝试下面的代码
result = ''.join([i.strip().replace('"', '') for i in anchor.strings if i.strip()][:-1])
print(result)
输出
'This is a test string'
关于python - 从 HTML 标签中包含的一系列字符串和不带标签的字符串中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59945689/