Beautifulsoup итерация через собранные данные

Вопрос или проблема

У меня есть этот HTML-код, который повторяется несколько раз:

     <div class="Company_line-logo image-loader-target" data-image-loader-height="47" data-image-loader-height-mobile="47" data-image-loader-src="/var/fiftyPartners/storage/images/startups/woleet/3261-1-fre-FR/Woleet_company_line_logo.png" data-image-loader-src-mobile="/var/fiftyPartners/storage/images/startups/woleet/3261-1-fre-FR/Woleet_company_line_logo_mobile.png" data-image-loader-width="189" data-image-loader-width-mobile="189" style="background-image:url("http://en.50partners.fr/var/fiftyPartners/storage/images/startups/woleet/3261-1-fre-FR/Woleet_company_line_logo.png");"></div>   
<h5 class="Company_line-title">Woleet</h5>
        <div class="Company_line-description">

Используя:

    for blocks in soup:
        block = soup.find('a', class_='Company_line logo-contains-name').find('h5').get_text()

Я могу получить то, что хочу, а именно “Woleet” между тегами h5.

Я попытался перебрать это, чтобы получить все из них:

    block = soup.find('a', class_='Company_line logo-contains-name')
    for name in block:
        names = block.find_all('h5')

Это возвращает только 1
h5 class=”Company_line-title”>Woleet</h5
где я должен получить 50 имен, таких как “Woleet”.

Как я могу перебрать это и получить текст со всех тегов h5?

Спасибо!

Я смог перебрать и получить текст со всех тегов h5 с помощью этого кода:

    main_block = soup.find(class_='Node_full startups content_class_folder')
    block = [h5.get_text() for h5 in main_block.find_all('h5', class_='Company_line-title')]

Мне интересно, есть ли другой способ извлечь текст из тегов h5.

.

Ответ или решение

Итерация по данным, извлекаемым с помощью Beautiful Soup

Beautiful Soup — это мощная библиотека для парсинга HTML и XML документов на Python. В данном случае у нас есть задача извлечения информации из повторяющихся HTML-кодов, которые содержат названия компаний внутри тегов <h5> с классом "Company_line-title". Приведем детальное объяснение того, как правильно организовать итерацию и извлечение данных.

Проблема

В вашем исходном коде вы пытались использовать цикл для извлечения данных, однако возвращаемое значение было ограничено одним элементом. Это произошло, потому что используемый вами метод find() возвращает только первый найденный элемент, а не все соответствующие ему элементы.

Решение

Чтобы извлечь все названия компаний, вам следует воспользоваться методом find_all(), который вернет список всех найденных элементов с указанными параметрами. В вашем случае код будет следующим:

from bs4 import BeautifulSoup

html_content = """..."""  # Здесь должно быть ваше содержимое HTML
soup = BeautifulSoup(html_content, 'html.parser')

# Нахождение основного блока, содержащего компании
main_block = soup.find(class_='Node_full startups content_class_folder')

# Извлечение всех h5 заголовков с необходимым классом
company_names = main_block.find_all('h5', class_='Company_line-title')

# Итерация по найденным элементам и получение текста
for company in company_names:
    print(company.get_text())

Альтернативные подходы к извлечению данных

Хотя вышеуказанный метод является стандартным способом получения необходимых данных, существует ряд альтернативных подходов, которые могут улучшить читаемость и структуру вашего кода:

  1. Использование списковых включений (List Comprehensions):
    Этот подход позволяет вам создать список названий компании в одной строке.

    company_names = [h5.get_text() for h5 in main_block.find_all('h5', class_='Company_line-title')]
  2. Вывод с форматированием:
    Если вы хотите, чтобы вывод был более читаемым:

    for i, company in enumerate(company_names, start=1):
       print(f"{i}. {company}")
  3. Сохранение данных в файл:
    Если данные вам нужны не только в консоли, вы можете сохранить их в текстовый файл:

    with open('companies.txt', 'w', encoding='utf-8') as f:
       for company in company_names:
           f.write(company.get_text() + '\n')

Заключение

Beautiful Soup предлагает множество методов для извлечения данных из HTML-документов. Используя find_all(), вы можете извлекать все соответствующие элементы, что позволяет легко обрабатывать большие объемы данных. Изучите различные методы и подходы, чтобы выбрать наиболее подходящий для вашего конкретного случая. Теперь у вас есть все инструменты для эффективной работы с Beautiful Soup и извлечения нужной информации.

Оцените материал
Добавить комментарий

Капча загружается...