Emm*_*t B 12 python beautifulsoup
我怎样才能得到第一个孩子?
 <div class="cities"> 
       <div id="3232"> London </div>
       <div id="131"> York </div>
  </div>
Run Code Online (Sandbox Code Playgroud)
我怎么去伦敦?
for div in nsoup.find_all(class_='cities'):
    print (div.children.contents)
Run Code Online (Sandbox Code Playgroud)
AttributeError:'listiterator'对象没有属性'contents'
使用现代版本的 bs4(当然是 bs4 4.7.1+),您可以访问 :first-child css 伪选择器。很好,很有描述性。使用soup.select_one,如果你只想要返回第一个匹配即soup.select_one('.cities div:first-child').text。not None在使用.text访问器之前进行测试被认为是一种很好的做法。
from bs4 import BeautifulSoup as bs
html = '''
<div class="cities"> 
       <div id="3232"> London </div>
       <div id="131"> York </div>
  </div>
  '''
soup = bs(html, 'lxml') #or 'html.parser'
first_children = [i.text for i in soup.select('.cities div:first-child')]
print(first_children)
Run Code Online (Sandbox Code Playgroud)
        div.children返回一个迭代器。
for div in nsoup.find_all(class_='cities'):
    for childdiv in div.find_all('div'):
        print (childdiv.string) #london, york
Run Code Online (Sandbox Code Playgroud)
出现AttributeError的原因是,因为'\n'are中的非标记.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
Run Code Online (Sandbox Code Playgroud)
        当前接受的答案是所有城市,当问题只需要第一个时。
如果你只需要第一个孩子,你可以利用.children返回一个迭代器而不是一个列表。请记住,迭代器会即时生成列表项,因为我们只需要迭代器的第一个元素,所以我们不需要生成所有其他城市元素(从而节省时间)。
for div in nsoup.find_all(class_='cities'):
    first_child = next(div.children, None)
    if first_child is not None:
        print(first_child.string.strip())
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           15233 次  |  
        
|   最近记录:  |