2014-07-09 2 views
2

BeautifulSoup를 사용하여 다른 태그로 태그를 찾는 방법은 무엇입니까? 이 예제에서 저는 '0993 999 999'를 얻고 싶습니다. 이것은 'Telefon :'텍스트로 다른 div 바로 뒤에있는 div에 있습니다. BeautifulSoup : 다른 태그 뒤에 태그 텍스트 가져 오기

나는이를 사용하여 얻을려고 :

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

을하지만 그것은 제대로 작동하지 않습니다. BeautifulSoup에게 'Telefon'텍스트 나 다른 방법 바로 뒤에 있다고 말하는 방법이 있어야한다고 생각합니다.

<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

감사합니다. 작동합니다! 매우 유용한 답변입니다. –

관련 문제