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

How to use Beautiful Soup's find() instead of find_all() for better runtime

我正在使用 python 的 bs4 编写网络爬虫。 我试图找到具有特定属性 '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 '

我做的第二个函数只会return我想要的结果,如果页面上的第一个图像是我想要的图像,否则它不会return任何东西。但是,它具有我正在寻找的运行时。

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

    except:
        return 'No Image '

我正在寻找一些方法来使顶部脚本的功能与底部脚本的时间相匹配。

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

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