2013-03-19 5 views
6

Làm cách nào để có được đứa con đầu lòng?Súp tuyệt đẹp nhận đứa con đầu tiên

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

Tôi làm cách nào để có được London?

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

AttributeError: 'listiterator' đối tượng có

+1

'children' là một chuỗi các con, mỗi một trong số đó có' contents'. Bản thân trình tự không có 'nội dung'. Nó giống như '[1, 2, 3]' không phải là một số nguyên. Trong khi đó, giống như bất kỳ chuỗi nào, để có được giá trị đầu tiên, bạn có thể chỉ 'next (iter (div.children))'. – abarnert

Trả lời

4

div.children không có thuộc tính 'nội dung' trả về một iterator.

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

AttributeError được nuôi nấng, vì không thẻ như '\n' là trong .children. chỉ cần sử dụng bộ chọn con thích hợp để tìm div cụ thể.

(thêm chỉnh sửa) không thể tái tạo ngoại lệ của bạn - đây là những gì tôi đã thực hiện:

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: đối tượng 'NavigableString' không có thuộc tính 'contents'', và khi tôi sử dụng chuỗi thay vì nội dung nó cho' RuntimeError: độ sâu đệ quy tối đa vượt quá khi gọi đối tượng Python' –

+1

@EmmetB xem chỉnh sửa – thkang

+0

Nó in Không, Không có sau đó RuntimeError: độ sâu đệ quy tối đa vượt quá trong khi gọi một đối tượng Python –