BeautifulSoup:在另一个标签后面添加标签文字

时间:2014-07-09 19:17:59

标签: python html beautifulsoup html-parsing

如何使用BeautifulSoup通过其他标签查找标签?在这个例子中,我想得到例如' 0993 999 999'这是div中的另一个div与Telefon:'文本。

我尝试使用它来获取它:

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

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

1 个答案:

答案 0 :(得分: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

希望有所帮助。