В Beautifulsoup я получаю список divs. Каждый из этих div включает span:

<div role="news_item" class="ni_nav_9tg">
   <span class="nav_element_new_S5g">Germany vs. Japan</span>
</div>
...
<div role="news_item" class="ni_nav_9tg">
   <span class="nav_element_new_S5g">Brasil vs. Serbia</span>
</div>

Я хочу проверить, существует ли в этом списке div span, чей class содержит строку "new". В результате просто true или false.

Конечно, я мог бы перебрать каждый элемент div в списке и получить элемент span после этой проверки, если class содержит строку "новая", но я не уверен, что это правильный подход.

1
STORM 25 Ноя 2022 в 22:00

1 ответ

Вы можете выбрать их напрямую, например:

soup.select('div[role="news_item"]:has(span[class*="new"])')

Чтобы получить True или False, проверьте len() ResultSet:

len(soup.select('div[role="news_item"]:has(span[class*="new"])')) > 0

Примере

from bs4 import BeautifulSoup
html='''
<div role="news_item" class="ni_nav_9tg">
   <span class="nav_element_new_S5g">Germany vs. Japan</span>
</div>
...
<div role="news_item" class="ni_nav_9tg">
   <span class="nav_element_new_S5g">Brasil vs. Serbia</span>
</div>
'''

soup = BeautifulSoup(html)

len(soup.select('div[role="news_item"]:has(span[class*="new"])')) > 0
1
HedgeHog 25 Ноя 2022 в 22:11