Если под «выбранным» вы имеете в виду, что первый имеет класс selected
, вы можете просто проверить это:
nosto_sku_tags = bs4.select('select[name="id"] option')
for nosto_sku_tag in nosto_sku_tags:
if 'selected' in nosto_sku_tag.get('class', ()):
continue
sku_size = nosto_sku_tag.get_text(strip=True)
(в этом случае нет необходимости использовать обработку исключений, все теги имеют метод get_text()
).
Поскольку атрибут class
может быть отсутствует , вам нужно использовать .get('class', ())
, чтобы вместо этого получить пустой кортеж.
Обратите внимание, что я использовал другой запрос , чтобы найти элементы <option>
, которые вы разместили в HTML. Ваш код печатает элемент <select>
как один большой объект, а не отдельные элементы <option>
под ним. Вместо того, чтобы использовать отдельный поиск для элемента <select>
и затем содержащихся элементов <option>
, я использовал CSS-селектор , чтобы напрямую перейти к параметрам.
Код селектора BeautifulSoup CSS не так уж и сложен, поэтому мы не можем использовать селектор :not(.selected)
psuedo, чтобы отфильтровать этот вариант.
Демо-версия:
>>> nosto_sku_tags = soup.select('select[name="id"] option')
>>> for nosto_sku_tag in nosto_sku_tags:
... if 'selected' in nosto_sku_tag.get('class', ()):
... continue
... sku_size = nosto_sku_tag.get_text(strip=True)
... print(sku_size)
...
4,5
5,5
6
7
8,5
9
10
Если в элементах <option>
есть класс no , а также нет атрибута selected
, то вам придется придумать свою собственную эвристику. По умолчанию элемент first отображается в браузере, поэтому мы можем просто пропустить его:
for nosto_sku_tag in nosto_sku_tags[1:]:
sku_size = nosto_sku_tag.get_text(strip=True)
Обратите внимание на срез [1:]
.