如何使用Beautiful Soup的find()而不是find_all()来获得更好的运行时间

时间:2015-07-23 16:57:15

标签: python find beautifulsoup findall bs4

我正在使用python的bs4编写一个webscraper。 我正在尝试找到具有某个属性'data-a-dynamic-image'的第一张图片。到目前为止,我有下面的代码,它的工作原理。但是,我希望仅使用find()而不是find_all 。这是因为我只关心具有该属性的页面上的第一个项目。我不想使用find_all并浪费时间筛选整个网页。

def siftImage(soup):
    try:
        for line in soup.find_all('img'):
            if line is not None:
                if line.has_attr('data-a-dynamic-image'):
                    return line['src']

    except:
        return 'No Image '

我做的第二个功能只返回我想要的结果,如果页面上的第一个图像是我想要的图像,否则它将不返回任何内容。但是,它有我正在寻找的运行时。

def siftImageTwo(soup):
    try:
        line = soup.find('img'):
        if line.has_attr('data-a-dynamic-image'):
            return line['src']

    except:
        return 'No Image '

我正在寻找一些方法来获得顶部脚本的功能以及底部脚本的时间。

1 个答案:

答案 0 :(得分:3)

根据official documentation,有一种方法可以按自定义数据 - *属性进行搜索 你应该试试这个:

line = soup.find('img', attrs={'data-a-dynamic-image': True})