【问题标题】:Beautifulsoup accessing nested HTML tagsBeautifulsoup 访问嵌套的 HTML 标签
【发布时间】:2020-10-18 17:29:08
【问题描述】:

我正在尝试从如下所示的 HTML 中获取价格:

<span id="IKSUD11720" class="prices">
    <span class="listPrice">49,50
    </span>39,50 €
</span>
<span id="IBAU0292101" class="prices">28,95 €</span>

使用以下代码:

price = x.find('span', class_='prices').text我明白了:

49,5039,50 €
28,95 €

我怎样才能只访问每个跨度的第二个价格?这样输出将是:

39,50 €
28,95 €

我尝试使用 find_all 但没有成功。

【问题讨论】:

    标签: python html beautifulsoup


    【解决方案1】:

    您可以使用.stripped_strings() 并获取最后一个元素:

    from bs4 import BeautifulSoup
    
    
    txt = '''<span id="IKSUD11720" class="prices">
        <span class="listPrice">49,50
        </span>39,50 €
    </span>
    <span id="IBAU0292101" class="prices">28,95 €</span>'''
    
    soup = BeautifulSoup(txt, 'html.parser')
    
    for span in soup.select('.prices'):
        print(list(span.stripped_strings)[-1])
    

    打印:

    39,50 €
    28,95 €
    

    或者:

    for span in soup.select('.prices'):
        print(span.get_text(strip=True, separator='|').split('|')[-1])
    

    或者:

    for span in soup.select('.prices'):
        print(span.contents[-1].strip())
    

    【讨论】: