python - 如何使用 Beautiful Soup 的 find() 代替 find_all() 以获得更好的运行时间

标签 python find findall beautifulsoup

我正在使用 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 '

如果页面上的第一个图像是我想要的图像,我创建的第二个函数将仅返回我想要的结果,否则它将不返回任何内容。但是,它具有我正在寻找的运行时。

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有一种方法可以通过自定义 data-* 属性进行搜索。
你应该尝试这个:

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

关于python - 如何使用 Beautiful Soup 的 find() 代替 find_all() 以获得更好的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593645/

相关文章:

python - 使用 BeautifulSoup 抓取亚马逊网页

python - Jenkins 在后台运行脚本

c++ - 在 C++ 中部分搜索字符串数组

python - 如何显示完整结果,而不是 python 中正则表达式搜索的匹配文本

python - 查找文本中的所有实例,最后一个单词也应该是使用 python 正则表达式进行搜索的开头

matlab - 何时使用查找而不是逻辑索引

python - 如何在 django Rest API 中向路由器提供参数?

Python 访问 BaseRequestHandler

python - python中的时区处理

visual-studio-2010 - 你如何找到所有带有两个单独单词的文件?