Python - 美丽的汤或条件在soup.find_all(....)

时间:2016-04-16 03:52:11

标签: python beautifulsoup

我们正在废弃Amazon.in网站以检索任何产品的价格。所有产品都具有不同的价值。属于' span'标签,如;

 id = 'priceblock_ourprice',  id = 'priceblock_saleprice', and  id = 'priceblock_dealprice'.

我们的任务是使用Beautiful Soup中的find_all(..)方法检索产品的价格。根据我们的基本知识,我们只能为find_all(..)方法提供一个参数,如下所示:

m = soup1.find_all('span', {'id': 'priceblock_ourprice'})

有没有办法使用OR条件为find_all(..)方法提供多个参数?

以下是具有相同' id'的不同值的链接属性:

Link 1

Link 2

Link 3

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我还没有对此进行过测试,但我相信你可以将一个函数作为参数传递给find_all(),所以你可以试试这样的事情:

def check_id(tag):
    valid_ids = ['priceblock_ourprice','priceblock_saleprice','priceblock_dealprice']
    if tag.has_attr('id'):
        return tag['id'] in valid_ids
    else:
        return False

m = soup1.find_all(check_id)

答案 1 :(得分:1)

您可以将条件添加到find_all参数中,如下所示:

td_tag_list = soup.find_all(
            lambda tag:tag.name == "span" and
            'id' in tag.attrs and tag.attrs['id'] == 'priceblock_ourprice')