从div标记

时间:2018-04-05 08:35:05

标签: python html css 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">&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>
</div>

到目前为止,我可以访问最外层的div.price-container clearfix。但我无法获得内跨并获得产品的价格。以任何方式获得内部跨度并获得价格。

1 个答案:

答案 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">&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>
</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.pricespan.price.-old父标记。

new_prices = soup.select('span[class="price "] span[data-price]')
old_prices = soup.select('span[class="price -old "] span[data-price]')

这将产生两个标签列表,每个价格类别一个。