Вы можете получить элемент label
по тексту, а затем извлечь значение атрибута for
:
size = "43"
soup.find(attrs={"for": True}, text=size)["for"]
Демо:
In [1]: from bs4 import BeautifulSoup
In [2]: data = '<label for="variant_id_104685">43</label>'
In [3]: soup = BeautifulSoup(data, "html.parser")
In [4]: size = "43"
In [5]: soup.find(attrs={"for": True}, text=size)["for"]
Out[5]: 'variant_id_104685'
Обратите внимание, что {"for": True}
здесь помогает учитывать только элементы label
, для которых определен атрибут for
.Обычно у вас может быть более краткий способ запросить наличие атрибута с помощью аргумента ключевого слова, например soup.find(attribute_name=True)
, но в этом случае for
является зарезервированным ключевым словом, и наличие чего-то вроде soup.find(text=size, for=True)["for"]
приведет к синтаксической ошибке.