2013-03-19 13 views
6

どのように最初の子供を得ることができますか?最初の子供を得る美しいスープ

<div class="cities"> 
     <div id="3232"> London </div> 
     <div id="131"> York </div> 
    </div> 

ロンドンを取得するにはどうすればよいですか?

for div in nsoup.find_all(class_='cities'): 
    print (div.children.contents) 

はAttributeError: '反復子' オブジェクトが無属性 '内容'

+1

'children'は' contents'を持つ各一つは、子どものシーケンスです。シーケンス自体には 'contents'はありません。 '[1、2、3]'は整数ではないのと同じです。一方、どんなシーケンスと同様に、最初の値を取得するには、 'next(iter(div.children))'だけができます。 – abarnert

答えて

4

div.childrenを持つイテレータを返します。 '\n'.childrenにいるような

for div in nsoup.find_all(class_='cities'): 
    for childdiv in div.find_all('div'): 
     print (childdiv.string) #london, york 

はAttributeErrorがあるため非タグで、育ちました。適切な子セレクタを使って特定のdivを見つけてください。

が(もっと編集)あなたの例外を再現することはできません - ここに私がやったものだ:

In [137]: print foo.prettify() 
<div class="cities"> 
<div id="3232"> 
    London 
</div> 
<div id="131"> 
    York 
</div> 
</div> 

In [138]: for div in foo.find_all(class_ = 'cities'): 
    .....:  for childdiv in div.find_all('div'): 
    .....:   print childdiv.string 
    .....: 
London 
York 

In [139]: for div in foo.find_all(class_ = 'cities'): 
    .....:  for childdiv in div.find_all('div'): 
    .....:   print childdiv.string, childdiv['id'] 
    .....: 
London 3232 
York 131 
+0

'AttributeError: 'NavigableString'オブジェクトには 'contents'属性がありません。コンテンツの代わりに文字列を使用すると' RuntimeError:Pythonオブジェクトの呼び出し中に最大再帰深度を超過しました。 ' –

+1

@EmmetB編集 – thkang

+0

を表示します。 None then RuntimeError:Pythonオブジェクトの呼び出し中に最大再帰深度を超過しました –

関連する問題