Получить узел внутри div без дублирования - PullRequest
0 голосов
/ 09 июня 2019

У меня есть HTML-код ниже

<div class = "conf">
Brazil vs. Colombia
</ div>
<div class = "targetHour"> 08:00 pm </ div>
</ div>
</ div>
<div class = "matches">
<div class = "conf">
Chilex Argentina
</ div>
<div class = "targetHour"> 08:00 pm </ div>
</ div>
</ div>

Мне нужно получить значение родительского div и значение дочернего div без дублирования результата.Свяжите расписание каждой игры с соответствующим родителем.

Это мой код pyhton

for nc in soup.find_all('div', attrs={'class': 'league-data'}):
    campeonato = nc.text
    for hr in soup.find('div', attrs={'class': 'match row cf'}).findAll("div",recursive=False):
        print(campeonato + "|" + hr.text)

Ответы [ 2 ]

1 голос
/ 09 июня 2019

Альтернатива (предполагает четную длину списка)

from bs4 import BeautifulSoup

data = '''<div class = "conf">
Brazil vs. Colombia
</div>
<div class = "targetHour"> 08:00 pm </div>
</div>
</div>
<div class = "matches">
<div class = "conf">
Chilex Argentina
</div>
<div class = "targetHour"> 08:00 pm </div>
</div>
</div>'''

soup = BeautifulSoup(data, 'lxml')
items = [item.text.strip() for item in soup.select('.conf, .targetHour')]
for i in range(0, len(items), 2):
       print(items[i],items[i+1])
1 голос
/ 09 июня 2019

Вы можете использовать функцию zip() для привязки матчей к соответствующему расписанию:

from bs4 import BeautifulSoup

data = '''<div class = "conf">
Brazil vs. Colombia
</div>
<div class = "targetHour"> 08:00 pm </div>
</div>
</div>
<div class = "matches">
<div class = "conf">
Chilex Argentina
</div>
<div class = "targetHour"> 08:00 pm </div>
</div>
</div>'''

soup = BeautifulSoup(data, 'lxml')

for match, hour in zip( soup.select('div.conf'), soup.select('div.targetHour') ):
    print(match.text.strip(), hour.text.strip())

Печать:

Brazil vs. Colombia 08:00 pm
Chilex Argentina 08:00 pm
...