2013-03-19 75 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的: '的ListIterator' 對象沒有屬性 '的內容'

+1

'children'是孩子的序列,其中每一個都有'contents'。序列本身沒有「內容」。就像'[1,2,3]'不是一個整數。同時,像任何順序一樣,爲了獲得第一個值,你可以'next(iter(div.children))'。 – abarnert 2013-03-19 04:06:46

回答

4

div.children返回迭代器。

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

AttributeError的升高,因爲非標籤像'\n'.children。只需使用適當的子選擇器來查找特定的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對象時超出最大遞歸深度' – 2013-03-19 03:05:59

+1

@EmmetB查看編輯 – thkang 2013-03-19 03:10:12

+0

它打印無, None then RuntimeError:在調用Python對象時超出最大遞歸深度 – 2013-03-19 03:14:56