【问题标题】:BeautifulSoup: get tag text behind another tagBeautifulSoup:获取另一个标签后面的标签文本
【发布时间】:2014-07-09 19:17:59
【问题描述】:

如何使用 BeautifulSoup 通过另一个标签查找标签?在这个例子中,我想得到例如'0993 999 999',它位于另一个带有'Telefon:'文本的div后面。

我试图用这个来获得它:

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

请各位大神指点一下怎么做? 谢谢!

【问题讨论】:

    标签: python html beautifulsoup html-parsing


    【解决方案1】:

    你可以使用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
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      相关资源
      最近更新 更多