Чтобы получить точное соответствие класса, вы можете использовать лямбда-выражение следующей функции в качестве фильтра.
soup.find_all(lambda x: x.name == 'div' and ''.join(x.get('class', list())) == 'abc')
Вы также можете обернуть это в функцию, если хотите. ''.join(x.get('class', list())) == 'abc'
присоединяет классы (если доступно) и проверяет, равно ли оно 'abc'
.
Пример
from bs4 import BeautifulSoup
html = """
<div class = "abc def"></div>
<div class = "abc"></div>
<div></div>
"""
soup = BeautifulSoup(html, 'html.parser')
print(
soup.find_all(
lambda x: x.name == 'div' and ''.join(x.get('class', list())) == 'abc'
)
)
Выход
[<div class="abc"></div>]
Ссылка: