我的问题可能微不足道,因为我不熟悉网络抓取。请参阅以下HTML代码:
<div class="price-container clearfix">
<span class="sale-flag-percent">-40%</span>
<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>
</div>
到目前为止,我可以访问最外层的div.price-container clearfix
。但我无法获得内跨并获得产品的价格。以任何方式获得内部跨度并获得价格。
答案 0 :(得分:1)
鉴于您的问题中的html,使用CSS selectors选择范围标记应该非常容易 一个例子,
from bs4 import BeautifulSoup
html = '''
<div class="price-container clearfix">
<span class="sale-flag-percent">-40%</span>
<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>
</div>
'''
soup = BeautifulSoup(html, 'html.parser')
tags = soup.select('div.price-container.clearfix span[data-price]')
prices = [i.text.strip() for i in tags]
print(prices)
这个表达式:
div.price-container.clearfix span[data-price]
选择所有&#39; span&#39;具有&#39;数据价格&#39;属性,如果他们是一个&div;的后代。标签上有&#39;价格容器&#39;和&#39; clearfix&#39;类属性。
结果是一个包含两个span标记文本的列表。如果您希望为每个标记使用不同的选择器,则可以使用span.price
和span.price.-old
父标记。
new_prices = soup.select('span[class="price "] span[data-price]')
old_prices = soup.select('span[class="price -old "] span[data-price]')
这将产生两个标签列表,每个价格类别一个。