Python BeautifulSoup从span标签获取数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python BeautifulSoup从span标签获取数据相关的知识,希望对你有一定的参考价值。

请看下面的html代码:

<section class = "products">
<span class="price-box ri"> 
<span class="price ">
<span data-currency-iso="PKR">Rs.</span> 
<span dir="ltr" data-price="5999">&nbsp;5,999</span> </span>  
<span class="price -old ">
<span data-currency-iso="PKR">Rs.</span> 
<span dir="ltr" data-price="9999">&nbsp;9,999</span>  </span> 
</span>
</section>

在产品部分,有40个这样的代码块包含项目的价格。并非所有产品都有旧价格,但所有产品都有当前价格。但是当我试图获得物品价格时,它也给了我旧的价格,所以我得到的总价格为69件,应该是40件。我错过了一些东西,但由于我是这个领域的新手,我无法理解。请有人帮忙。谢谢。

答案

您可以使用CSS选择器来匹配确切的类名。例如,在这里,您可以使用span[class="price "]作为选择器,它将与旧价格不匹配。

html = '''
<section class = "products">
    <span class="price-box ri"> 
        <span class="price ">
            <span data-currency-iso="PKR">Rs.</span> 
            <span dir="ltr" data-price="5999">&nbsp;5,999</span>
        </span>  
        <span class="price -old ">
            <span data-currency-iso="PKR">Rs.</span> 
            <span dir="ltr" data-price="9999">&nbsp;9,999</span>
        </span> 
    </span>
</section>'''
soup = BeautifulSoup(html, 'lxml')

for price in soup.select('span[class="price "]'):
    print(price.get_text(' ', strip=True))

输出:

Rs. 5,999

或者,您也可以使用自定义函数来匹配类名。

for price in soup.find_all('span', class_=lambda c: c == 'price '):
    print(price.get_text(' ', strip=True))

以上是关于Python BeautifulSoup从span标签获取数据的主要内容,如果未能解决你的问题,请参考以下文章

从 <span 类中获取文本:使用 Beautifulsoup 和请求

Python BeautifulSoup:'list_iterator'对象不可订阅

python BeautifulSoup html解析

在 Beautifulsoup Python 上排除不需要的标签

如何识别beautifulsoup返回的'p'标签中是否存在'span'子标签?

Python中BeautifulSoup中对HTML标签的提取