2013-06-18 34 views
3

我用美麗的湯擺脫這個例子中的HTML代碼文本:如何使用python美麗的湯只獲得1級navigableText?

.... 
<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?

回答

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

(我把它們放在列表,所以你可以看到新行)。

+0

我跑的代碼,它表明,BS4不定義。我使用的是python2.7.4,而且我有一行「從bs4導入BeautifulSoup」頂部。我如何修改你的「bs4.element.NavigableString」部分? – user2437712

+0

只需在導入中添加'import bs4'。或者,添加'from bs4.element import NavigableString'並將我列出的代碼的'bs4.element.NavigableString'部分更改爲'NavigableString'。任何一個工作。 – jedwards

+0

問題解決了!非常感謝傑德華茲! – user2437712

0

也許你想要的是

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

或兩者的指數div.s1你要尋找的。