После того как вы каждый a class="btn-full"
, вы можете использовать классы span, чтобы получить теги, которые вы хотите, сильный тег является дочерним элементом диапазона с классом text-large
, поэтому вам просто нужно позвонить .strong.text
в тег, для диапазона с классом css mobile-sprite tiny-star
вам нужно найти следующий сильный тег, поскольку он является дочерним элементом span, а не дочерним:
h = """<a class="btn-full" href="/title/tt1480055?ref_=m_ttep_ep_ep1">
<span class="text-large">
1.
<strong>
Winter Is Coming
</strong>
</span>
<br/>
<span class="mobile-sprite tiny-star">
</span>
<strong>
8.9
</strong>
17 Apr. 2011
</a>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(h)
title = soup.select_one("span.text-large").strong.text.strip()
score = soup.select_one("span.mobile-sprite.tiny-star").find_next("strong").text.strip()
print(title, score)
Что дает:
(u'Winter Is Coming', u'8.9')
Если вы действительно хотите получить этот эпизод самый простой способ, чтобы разбить текст один раз:
soup = BeautifulSoup(h)
ep, title = soup.select_one("span.text-large").text.split(None, 1)
score = soup.select_one("span.mobile-sprite.tiny-star").find_next("strong").text.strip()
print(ep, title.strip(), score)
который даст вам:
(u'1.', u'Winter Is Coming', u'8.9')
Я пошел, чтобы ответить на ваш вопрос, но потом понял, что-то неправильно понятым. Вы можете захватить название (если все эпизоды настроены таким образом), делая что-то вроде 'soup.select ('span> strong')', но это все равно оставляет вам необходимость захватить номер эпизода. – coralvanda
«Зима идет ...» И ... Игра в игры престолов: D –