2014-07-09 182 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

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