sabolch
@sabolch
Web devoloper

Beautiful Soup, как эффективнее ловить теги?

Есть сайт руспрофиль.ру, делаю парсинг ФИО.
url = 'https://www.rusprofile.ru/codes/561010/'
fio = soup.select('.company-item > .company-item-info > dl > dd')


Дело в том, что не всегда количество тегов в каждом блоке равны. Где-то на один больше, где-то меньше.
В итоге, первая страница парсится хорошо, но среди результатов пару ошибок есть из-за кол-ва тегов.
Затем, программа открывает следующую страницу и вот уже там ошибок гораздо больше. Вместо нужных тегов вылезают совсем другие и в итоге каша.

Вывод для первой страницы делаю так:
for i in range(0, len, 5):
    print(fio[i].text)
    names.append(fio[i].text)
    for j in range(5, len, 6):
        print(fio[j].text)
        names.append(fio[j].text)

Для первой страницы подходит на 98%, а вот когда страница меняется, то уже 2% попаданий)))

Есть ли более эффективный метод ловли нужных тегов?

Пример верстки сайта
<div class="company-item">
    <div class="company-item__title">
        <a href="/id/10612303">                                ООО "Восток"            </a>        
    </div>
    <div class="company-item-info">
        <dl>
            <dt>Генеральный директор</dt>
            <dd>Титаев Александр Витальевич</dd>
        </dl>
    </div>
    <address class="company-item__text">
        603005, Нижегородская область, город Нижний Новгород, улица Пискунова, дом 14/5, помещение 8                                            
    </address>
    <div class="company-item-info">
        <dl>
            <dt>ИНН</dt>
            <dd>5260430967</dd>
        </dl>
        <dl>
            <dt>ОГРН</dt>
            <dd>1165275042349</dd>
        </dl>
        <dl>
            <dt>Дата регистрации</dt>
            <dd>1 сентября 2016 г.</dd>
        </dl>
        <dl>
            <dt>Уставный капитал</dt>
            <dd>10 000 руб.</dd>
        </dl>
    </div>
    <div class="company-item-info">
        <dl>
            <dt>Основной вид деятельности</dt>
            <dd>56.10.1 Деятельность ресторанов и кафе с полным ресторанным обслуживанием, кафетериев, ресторанов быстрого питания и самообслуживания</dd>
        </dl>
    </div>
</div>


Резюмирую: нужно вытаскивать ФИО, количество тегов не всегда равны, иногда добавляются или убавляются какие-то теги. Поэтому, если обращаться по индексу, как в моем примере, то будет провал...
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
sabolch
@sabolch Автор вопроса
Web devoloper
Решил проблему другим выводом.

fio = soup.select('.company-item-info')
len = len(soup.select('.company-item-info'))

for i in range(0, len, 3):
    print(fio[i].dd.text)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы