python
  • beautifulsoup
  • 2013-03-19 15 views 6 likes 
    6

    Jak mogę dostać pierwsze dziecko?Piękna zupa na pierwsze dziecko

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

    Jak mogę zdobyć Londyn?

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

    AttributeError: 'listiterator' obiekt ma bez atrybutu 'Spis treści'

    +1

    'children' jest sekwencją dzieci, z których każdy ma' contents'. Sama sekwencja nie ma "treści". To tak, jakby '[1, 2, 3]' nie jest liczbą całkowitą. W międzyczasie, jak każda kolejność, aby uzyskać pierwszą wartość, możesz po prostu "następny (iter (div.children))". – abarnert

    Odpowiedz

    4

    div.children zwraca iterator.

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

    AttributeError został podniesiony, na skutek braku znaczników jak '\n'.children. po prostu użyj właściwego selektora dzieci, aby znaleźć konkretny div.

    (więcej edit) nie można odtworzyć swoje wyjątki - oto co zrobiłem:

    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: Obiekt 'NavigableString' nie ma atrybutu 'contents'', a gdy użyję łańcucha zamiast zawartości, to daje on' RuntimeError: przekroczenie maksymalnej głębokości rekursji podczas wywoływania obiektu Pythona' –

    +1

    @EmmetB zobacz edycję – thkang

    +0

    To drukuje None, Brak następnie RuntimeError: przekroczono maksymalną głębokość rekursji podczas wywoływania obiektu w języku Python –

    Powiązane problemy