Подскажите, пожалуйста, как собрать только нужные данные у блоков, если они не вложены в те, по которым их можно идентифицировать. Проще говоря, есть сайт, у него структура построена следующим образом:
<div class="sportName baseball">
<div class="event__header">
<div class="icon--flag event__title fl_205" title="Венесуэла">
<div class="event__titleBox">
<span class="event__title--type">ВЕНЕСУЭЛА</span>
<span class="event__title--name" title="ЛВБП">ЛВБП</span>
</div>
</div>
</div>
<div id="g_6_MmpBOXpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div id="g_6_MmpBOtha" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div id="g_6_MmprgOXpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div class="event__header">
<div class="icon--flag event__title fl_205" title="Мексика">
<div class="event__titleBox">
<span class="event__title--type">МЕКСИКА</span>
<span class="event__title--name" title="ЛМП">ЛМП</span>
</div>
</div>
</div>
<div id="g_6_Mmthrpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div id="g_6_MthrBOtha" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div id="g_6_MmprgOjtr" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
</div>
Можно ли как-то прописать, что если содержимое div
с class="event__header"
удовлетворяет условиям, содержит в тегах <span class="event__title--type">ВЕНЕСУЭЛА</span>
и <span class="event__title--name" title="ЛВБП">ЛВБП</span>
ВЕНЕСУЭЛА
и ЛВБПЭ
, соответственно, то собираем, например, id
у div title="Подробности матча!"
, до следующего div
с class="event__header"
, или есть другие более правильные варианты?
Заранее спасибо за помощь!
ПРАВКИ:
Как-то не выходит использовать find_next_siblings
, может кто знает, что не так?
from bs4 import BeautifulSoup
test_html = """
<div class="sportName baseball">
<div class="event__header">
<div class="icon--flag event__title fl_205" title="Венесуэла">
<div class="event__titleBox">
<span class="event__title--type">ВЕНЕСУЭЛА</span>
<span class="event__title--name" title="ЛВБП">ЛВБП</span>
</div>
</div>
</div>
<div id="g_6_MmpBOXpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div id="g_6_MmpBOtha" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div id="g_6_MmprgOXpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div class="event__header">
<div class="icon--flag event__title fl_205" title="Мексика">
<div class="event__titleBox">
<span class="event__title--type">МЕКСИКА</span>
<span class="event__title--name" title="ЛМП">ЛМП</span>
</div>
</div>
</div>
<div id="g_6_Mmthrpa" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div id="g_6_MthrBOtha" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
<div id="g_6_MmprgOjtr" title="Подробности матча!" class="event__match event__match--scheduled event__match--twoLine"></div>
</div>
"""
soup = BeautifulSoup(test_html, 'html.parser')
current = soup.find_all("div", class_="event__header")
liga = []
for i in current:
span1 = i.find_all("span")
for j in span1:
span2 = j.get_text()
liga.append(span2)
print(span2)
print(liga)
span3 = ["МЕКСИКА"]
for m in span2:
if m in span3:
s = current.find_next_siblings("div")
print(s)
else:
print("Совпадений нет")
from bs4 import BeautifulSoup
test_html = """
<div class="sportName baseball">
<div class="event__header">
<div class="icon--flag event__title fl_205" title="Венесуэла">
<div class="event__titleBox">
<span class="event__title--type">ВЕНЕСУЭЛА</span>
<span class="event__title--name" title="ЛВБП">ЛВБП</span>
</div>
</div>
</div>
<div id="g_6_UyjXVFhP" title="Подробности матча!" class="event__match event__match--twoLine">
<div class="event__check"></div>
<div class="event__stage">
<div class="event__stage--block">Завершен</div>
</div>
<div class="event__participant event__participant--home">Ла Гуайра</div>
<div class="event__participant event__participant--away fontBold">Маргарита</div>
<div class="event__score event__score--home">5</div>
<div class="event__score event__score--away">7</div>
<div class="event__part event__part--home event__part--1">0</div>
<div class="event__part event__part--away event__part--1">0</div>
<div class="event__part event__part--home event__part--2">0</div>
<div class="event__part event__part--away event__part--2">0</div>
<div class="event__part event__part--home event__part--3">0</div>
<div class="event__part event__part--away event__part--3">0</div>
<div class="event__part event__part--home event__part--4">1</div>
<div class="event__part event__part--away event__part--4">1</div>
<div class="event__part event__part--home event__part--5">2</div>
<div class="event__part event__part--away event__part--5">0</div>
<div class="event__part event__part--home event__part--6">0</div>
<div class="event__part event__part--away event__part--6">1</div>
<div class="event__part event__part--home event__part--7">0</div>
<div class="event__part event__part--away event__part--7">0</div>
<div class="event__part event__part--home event__part--8">0</div>
<div class="event__part event__part--away event__part--8">0</div>
<div class="event__part event__part--home event__part--9">2</div>
<div class="event__part event__part--away event__part--9">3</div>
<div class="event__part event__part--home event__part--10">0</div>
<div class="event__part event__part--away event__part--10">2</div>
<div class="event__spacer event__spacer--home"></div>
<div class="event__spacer event__spacer--away"></div>
<div class="event__part event__part--home event__part--11">14</div>
<div class="event__part event__part--away event__part--11">13</div>
<div class="event__part event__part--home event__part--12">0</div>
<div class="event__part event__part--away event__part--12">2</div>
<div class="event__check"></div>
<div class="event__icons">
<div class="event__icon icon--info"></div>
</div>
</div>
<div id="g_6_6csaRZ0t" title="Подробности матча!" class="event__match event__match--twoLine">
<div class="event__check"></div>
<div class="event__stage">
<div class="event__stage--block">Завершен</div>
</div>
<div class="event__participant event__participant--home">Лара</div>
<div class="event__participant event__participant--away fontBold">Каракас</div>
<div class="event__score event__score--home">4</div>
<div class="event__score event__score--away">9</div>
<div class="event__part event__part--home event__part--1">2</div>
<div class="event__part event__part--away event__part--1">2</div>
<div class="event__part event__part--home event__part--2">0</div>
<div class="event__part event__part--away event__part--2">5</div>
<div class="event__part event__part--home event__part--3">0</div>
<div class="event__part event__part--away event__part--3">0</div>
<div class="event__part event__part--home event__part--4">0</div>
<div class="event__part event__part--away event__part--4">0</div>
<div class="event__part event__part--home event__part--5">0</div>
<div class="event__part event__part--away event__part--5">0</div>
<div class="event__part event__part--home event__part--6">0</div>
<div class="event__part event__part--away event__part--6">0</div>
<div class="event__part event__part--home event__part--7">0</div>
<div class="event__part event__part--away event__part--7">0</div>
<div class="event__part event__part--home event__part--8">1</div>
<div class="event__part event__part--away event__part--8">0</div>
<div class="event__part event__part--home event__part--9">1</div>
<div class="event__part event__part--away event__part--9">2</div>
<div class="event__spacer event__spacer--home"></div>
<div class="event__spacer event__spacer--away"></div>
<div class="event__part event__part--home event__part--11">8</div>
<div class="event__part event__part--away event__part--11">15</div>
<div class="event__part event__part--home event__part--12">3</div>
<div class="event__part event__part--away event__part--12">0</div>
<div class="event__icons"></div>
</div>
<div class="event__header">
<div class="icon--flag event__title fl_205" title="Мексика">
<div class="event__titleBox">
<span class="event__title--type">МЕКСИКА</span>
<span class="event__title--name" title="ЛМП">ЛМП</span>
</div>
</div>
</div>
<div id="g_6_Mmthrpa" title="Подробности матча!" class="event__match event__match--twoLine"></div>
<div id="g_6_MthrBOtha" title="Подробности матча!" class="event__match event__match--twoLine"></div>
<div id="g_6_MmprgOjtr" title="Подробности матча!" class="event__match event__match--twoLine"></div>
</div> """
soup = BeautifulSoup(test_html, 'html.parser')
liga = []
ehlist = soup.find_all('div', attrs={'class':'event__header'})
for eh in ehlist:
tlist = eh.find_all('div', attrs={'title':'Венесуэла'})
if tlist:
for t in tlist:
splist = t.find_all('span')
for sp in splist:
text = sp.get_text()
liga.append(text)
print(liga[0] + ": " + liga[1])
print(' ' * 21 + 'Оч 1 2 3 4 5 6 7 8 9 ДИ Х Ош')
print(' ' * 21 + '-' * 38)
slist = eh.find_next_siblings() # выборка тегов с данными о матчах
x = None
while x == None:
slist.remove(slist[-1])
for s in slist:
x = s.find('span')
slist.remove(slist[-1])
for s in slist: # формирование строк данных
text = s.get_text()
events = text.split('\n')[5:]
eup = events[2::2]
edn = events[3::2]
if eup[10] != '':
eup.remove(eup[11])
if edn[10] != '':
edn.remove(edn[11])
print('%-20s' % events[0], end='') # форматирование таблицы
for u in eup:
print('%+3s' % u, end = '')
print('\n%-20s' % events[1], end='')
for d in edn:
print('%+3s' % d, end = '')
print('\n')
К вопросу об использовании find_next_sibligs().
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я пытаюсь сделать margin-отступ от внешнего блокаouter
Есть меню типо аккордеона, нужно сделать что бы открытый пункт можно было закрыть, то есть что бы 2 элемента были закрыты