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 を取得します。第 1 レベルのテキスト 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 に答える