请查看以下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"> 5,999</span> </span>
<span class="price -old ">
<span data-currency-iso="PKR">Rs.</span>
<span dir="ltr" data-price="9999"> 9,999</span> </span>
</span>
</section>
在产品部分中,有40个此类代码块包含商品的价格。并非所有产品都有旧价格,但所有产品都有当前价格。但是当我试图获得物品价格时,它也给了我旧的价格,所以我得到的总价格为69件,应该是40件。我错过了一些东西,但由于我是这个领域的新手,我无法理解。请有人帮忙。谢谢。
答案 0 :(得分:2)
您可以使用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"> 5,999</span>
</span>
<span class="price -old ">
<span data-currency-iso="PKR">Rs.</span>
<span dir="ltr" data-price="9999"> 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))