получить одноуровневые элементы из html

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Добрый день. Нужно получить элементы одного уровня внутри тега div.
Не стал вставлять html код, очень большой кусок, но, если нужно, добавлю.
Скриншот 13-08-2021 235806.jpg

Нужно внутри тега <div> получить содержимое тегов <b> и <nobr>. если <b> - получаем текст внутри <i> "Основное время 3 исхода:", это будет Ключ, следующие за ним все <nobr> до следующего <b> - внутри каждого получаем пару название коэффициента: коэффициент ( на скрине П1: 1.22). Эти словари добавляем в список, который будет Значение для Ключа - "Основное время 3 исхода": [{"П1": "1.22"}, {"П2": "3.33"}]. и так до конца </div>. И все эти пары до кучи запихать в список. Пробовал next_sibling, но чета нагородил такого, что сам запутался.
 

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Может быть кому-нибудь будет интересно. Справился таким образом
Python:
koef_div = soup.find('div', class_='tab')
koef_tags = koef_div.find_all(['nobr', 'div'], recursive=False)

при таком способе внутрь тегов не проваливаемся. а дальше разбираем в цикле for

Python:
        groupName = ''
        for t in koef_tags:
            if t.name == 'nobr':
                k_name = t.find('span', class_='googleStatIssueName').get_text().strip()
                k_name = k_name.replace('\xa0', '')  # название коэффициента
                k_res = t.find('span', id='googleStatKef').get_text()  # кэф
                data_k = {k_name: k_res}
                # print(data_k)
                basic_koef_list_src.append(data_k)

            elif t.name == 'div':
                data_k = {'Основные': basic_koef_list_src}
                full_koef_list.append(data_k)
                add_bets_tags = t.find_all(['b', 'nobr'], recursive=False)
                for tag in add_bets_tags:
                    if tag.name == 'b':
                        if (groupName == '') and (add_koef_list_src == []):
                            groupName = tag.find('i').text.strip()
                        else:
                            data = {groupName: add_koef_list_src}
                            full_koef_list.append(data)
                            groupName = ''
                            add_koef_list_src = []
                            groupName = tag.get_text()

                    elif tag.name == 'nobr':
                        if tag.find('span', class_='googleStatIssue'):
                            k_name = tag.find('span', class_='googleStatIssueName').text.strip()
                            k_name = k_name.replace('\xa0', '')
                            k_res = tag.find('span', id='googleStatKef').text
                            data = {k_name: k_res}
                            add_koef_list_src.append(data)
                        else:
                            k_name = tag.text
                            k_name = k_name.replace('\xa0', '')
                            k_res = tag.find('span', id='googleStatKef').text
                            data = {k_name: k_res}
                            add_koef_list_src.append(data)
 

Форум IT Специалистов