如何使用python beautiful soup只获得1级navigableText?

时间:2013-06-18 23:46:12

标签: python beautifulsoup

我使用漂亮的汤来获取此示例html代码中的文本:

....
<div style="s1">
    <div style="s2">Here is text 1</div>
    <div style="s3">Here is text 2</div>
Here is text 3 and this is what I want.
</div>
....

文本1和文本2处于同一级别2,文本3位于上级1.我只想获取文本3并使用它:

for anchor in tbody.findAll('div', style="s1"):
    review=anchor.text
    print review

但是这些代码让我得到了所有文本1,2,3。我如何才能获得第一级文本3?

2 个答案:

答案 0 :(得分:3)

类似的东西:

for anchor in tbody.findAll('div', style="s1"):
    text = ''.join([x for x in anchor.contents if isinstance(x, bs4.element.NavigableString)])

的工作原理。只要知道你也会在那里得到换行符,所以.strip()可能是必要的。

例如:

for anchor in tbody.findAll('div', style="s1"):
    text = ''.join([x for x in anchor.contents if isinstance(x, bs4.element.NavigableString)])
    print([text])
    print([text.strip()])

打印

[u'\n\n\nHere is text 3 and this is what I want.\n']
[u'Here is text 3 and this is what I want.']

(我将它们放在列表中,以便您可以看到换行符。)

答案 1 :(得分:0)

也许你想要的是

tbody.findAll('div', style="s1")[0].string

或您正在寻找的div.s1的索引。