Как получить текст из определенного имени класса, если существует другой класс-брат?

#python #python-3.x #beautifulsoup

#python #python-3.x #beautifulsoup

Вопрос:

Я пытался получить текст из class="eventAwayMinute">57 каждого matchEvent класса (родительский тег) Если matchEvent класс содержит class="eventIcon eventIcon_1" :

 <div class="matchEvent">
    <div class="eventHomePlayer">
    </div>
    <div class="eventHomeMinute"></div>
    <div class="eventIcon eventIcon_1"></div>
    <div class="eventAwayMinute">57'</div>
    <div class="eventAwayPlayer">
        George
        <span>(Irakli)</span> </div>
</div>
  

Я пытался

 Minutes = [(gm.get_text()).strip() for gm in soup.select('matchEvent , div[class$="eventIcon_1"]')]
  

и это не работает.

Я также пробовал

 Minutes = [(gm.get_text()).strip() for gm in soup.select('matchEvent')]
  

Но он возвращает все минуты, которые существуют в каждом matchEvent ( matchEvent в HTML-коде есть несколько классов).

Ответ №1:

Вы можете использовать селектор :has() CSS, чтобы проверить, есть ли matchEvent eventIcon eventIcon_1 класс, а затем распечатать eventAwayMinute класс:

 from bs4 import BeautifulSoup

html = """<div class="matchEvent">
    <div class="eventHomePlayer">
    </div>
    <div class="eventHomeMinute"></div>
    <div class="eventIcon eventIcon_1"></div>
    <div class="eventAwayMinute">57'</div>
    <div class="eventAwayPlayer">
        George
        <span>(Irakli)</span> </div>
</div>
"""
soup = BeautifulSoup(html, "html.parser")

for tag in soup.select(".matchEvent:has(.eventIcon.eventIcon_1)"):
    print(tag.select_one(".eventAwayMinute").text.strip("'"))
  

Вывод:

 57
  

Комментарии:

1. Спасибо. Если вы не возражаете, у меня есть один вопрос. Возможно ли в одной строке получить текст, если есть eventIcon_1 или eventIcon_3, и найти текст в eventAwayMinute или в eventHomeMinute ? Или я должен написать для каждого возможного случая?

2. @GeorgeKatsadze Чтобы выбрать несколько значений, добавьте запятую , в селектор, например: soup.select(".matchEvent:has(.eventIcon.eventIcon_1, .eventIcon.eventIcon_3)") .. print(tag.select(".eventAwayMinute, eventHomeMinute"))

3. Большое вам спасибо. Это было полезно