Как использовать find() Beautiful Soup вместо find_all() для лучшего времени выполнения

Я пишу веб-скребок, используя 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 '

Я ищу способ использовать функциональность верхнего сценария с синхронизацией нижнего сценария.


person Rorschach    schedule 23.07.2015    source источник


Ответы (1)


Согласно официальной документации, существует способ поиск по пользовательским атрибутам data-*.
Вы должны попробовать это:

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