2014-07-09 138 views
2

如何使用BeautifulSoup通过另一个标签查找标签?在这个例子中,我想举个例子'0993 999 999',它在div的右边,后面跟着'Telefon:'文本。BeautifulSoup:在另一个标签后面获取标签文本

我试图用这个来得到它:

print parsed.findAll('div',{'class':"dva" })[3].text 

,但它不能正常工作。我认为必须有一种方法可以告诉BeautifulSoup它恰好落后于“电话”文本或其他方式。

<div class="kontakt"> 
     <h2 class="section-head">Kontaktné údaje</h2> 
     <address itemprop="address" itemscope itemtype="http://schema.org/PostalAddress" > 
      <span itemprop="streetAddress" >SNP 12</span>, <span itemprop="postalCode" >904 01</span> <span itemprop="addressLocality" >Pezinok</span> </address> 
     <div class="jedna">Telefon:</div> 
     <div class="dva">013/688 27 78</div> 
     <div class="jedna">Mobil:</div> 
     <div class="dva">0993 999 999</div> 
     <div class="jedna">Fax:</div 
     <div class="dva">033/690 97 94</div> 
     <div class="jedna">E-mail:</div> 
     <div class="dva"><br /></div></div> 

编辑:我试过这个,既不工作也不工作。

tags = parsed.findAll('div',{'class':"jedna"}) 
for tag in tags: 
    if tag.text=='Telefon:': 
     print tag.next_siebling.string 

请问你们给我一个提示怎么做? 谢谢!

回答

3

您可以使用find_next_sibling()

# -*- coding: utf-8 -*- 
from bs4 import BeautifulSoup 

data = u"""html here""" 

soup = BeautifulSoup(data) 
print soup.find('div', text='Telefon:').find_next_sibling('div', class_='dva').text 
print soup.find('div', text='Mobil:').find_next_sibling('div', class_='dva').text 

打印:

013/688 27 78 
0993 999 999 

仅供参考,您可以提取复制,并有一个很好的可重复使用的功能:

def get_field_value(soup, field): 
    return soup.find('div', text=field+':').find_next_sibling('div', class_='dva').text 

soup = BeautifulSoup(data) 
print get_field_value(soup, 'Telefon') # prints 013/688 27 78 
print get_field_value(soup, 'Mobil') # prints 0993 999 999 

希望有所帮助。

+0

谢谢,它的工作原理!非常有用的答案。 –