3

我正在使用漂亮的汤从这个示例 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?

4

2 回答 2

3

就像是:

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

作品。只要知道你也会在那里换行,所以.strip()ing 可能是必要的。

例如:

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.']

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

于 2013-06-18T23:52:17.883 回答
0

也许你想要的是

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

或您要查找的任何 div.s1 的索引。

于 2013-06-18T23:50:43.767 回答