除了一个标记之外,在BeautifulSoup中提取文本

时间:2013-10-22 15:13:43

标签: python beautifulsoup screen-scraping

我正在尝试使用BeautifulSoup提取文本。

这是html:

<div>
    "BLABLA"
    <span> "RRRRR" </span>
    <span> "ZZZZZ" </span>
</div>

我只想获得'BLABLA''RRRR'并乘坐'ZZZZ'

当然soup.text给了我3个文本。

一种解决方案是迭代直到我找到第二个跨度(如此问题:How to get all text between just two specified tags using BeautifulSoup?

但是在这种情况下有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码(可根据需要修改):

from bs4 import BeautifulSoup, NavigableString

html = '''
<div>
    "BLABLA"
    <span> "RRRRR" </span>
    <span> "ZZZZZ" </span>
</div>'''
soup = BeautifulSoup(html, 'lxml')

wanted_text = [x.strip() if isinstance(x, NavigableString) else x.text.strip() for x in soup.find('div').contents[:2]]
print(wanted_text)
# ['"BLABLA"', '"RRRRR"']

如果HTML稍有变化,您只需更改切片的索引(即将contents[:2]更改为您需要的任何内容)。