Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python BeautifulSoup从span标记获取数据_Python_Beautifulsoup - Fatal编程技术网

Python BeautifulSoup从span标记获取数据

Python BeautifulSoup从span标记获取数据,python,beautifulsoup,Python,Beautifulsoup,请查看以下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>

请查看以下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>

卢比。
5,999   
卢比。
9,999   

在products部分中,有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))
或者,您也可以使用自定义函数来匹配类名

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

向我们展示您使用的Python/BS代码。还包括一个说明各种情况和所需结果的输入示例。
lambda c:c=='price'
不够吗?
for price in soup.find_all('span', class_=lambda c: c == 'price '):
    print(price.get_text(' ', strip=True))