#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. Большое вам спасибо. Это было полезно