Парсинг таблиц с помощью BeautifulSoup

Парсинг табличных данных в BeautifulSoup

Парсинг табличных данных из веб-страниц является важной задачей в области веб-скрапинга. BeautifulSoup – одна из наиболее популярных библиотек Python для парсинга HTML и XML документов. Она позволяет эффективно извлекать данные из таблиц, расположенных на веб-страницах. В этой статье мы рассмотрим, как осуществлять поиск и извлечение данных из таблиц, а также их преобразование в структурированный формат данных.

Пример таблицы для парсинга

Для демонстрации создадим пример таблицы:

Html-код таблицы:

<table>
    <tr>
        <th>Имя</th>
        <th>Возраст</th>
        <th>Город</th>
    </tr>
    <tr>
        <td>Анна</td>
        <td>28</td>
        <td>Москва</td>
    </tr>
    <tr>
        <td>Борис</td>
        <td>34</td>
        <td>Петербург</td>
    </tr>
    <tr>
        <td>Виктор</td>
        <td>45</td>
        <td>Новосибирск</td>
    </tr>
</table>

Эта таблица будет имитировать структуру HTML-таблицы на веб-странице.

Поиск и извлечение данных из таблицы

Получение HTML-кода

Сначала необходимо получить HTML-код страницы. Т.к. у в нашем примере таблица у нас готова и парсить с сайта ее не нужно, то просто добавим ее:

from bs4 import BeautifulSoup

html = """
<table>
    <tr>
        <th>Имя</th>
        <th>Возраст</th>
        <th>Город</th>
    </tr>
    <tr>
        <td>Анна</td>
        <td>28</td>
        <td>Москва</td>
    </tr>
    <tr>
        <td>Борис</td>
        <td>34</td>
        <td>Петербург</td>
    </tr>
    <tr>
        <td>Виктор</td>
        <td>45</td>
        <td>Новосибирск</td>
    </tr>
</table>
"""

Парсинг HTML с помощью BeautifulSoup

Теперь применим BeautifulSoup для анализа HTML:

soup = BeautifulSoup(html, 'html.parser')

Поиск таблицы

table = soup.find('table')

Извлечение данных таблицы

data = []
for row in table.find_all('tr'):
    cols = row.find_all('td')
    cols = [ele.text.strip() for ele in cols]
    if cols:
        data.append(cols)

Выводим результат

print(data)

Код целиком:

from bs4 import BeautifulSoup

html = """
<table>
    <tr>
        <th>Имя</th>
        <th>Возраст</th>
        <th>Город</th>
    </tr>
    <tr>
        <td>Анна</td>
        <td>28</td>
        <td>Москва</td>
    </tr>
    <tr>
        <td>Борис</td>
        <td>34</td>
        <td>Петербург</td>
    </tr>
    <tr>
        <td>Виктор</td>
        <td>45</td>
        <td>Новосибирск</td>
    </tr>
</table>
"""

# Парсинг HTML
soup = BeautifulSoup(html, 'html.parser')

# Поиск таблицы
table = soup.find('table')

# Извлечение данных из таблицы
data = []
for row in table.find_all('tr'):
    cols = row.find_all('td')
    cols = [ele.text.strip() for ele in cols]
    if cols:
        data.append(cols)

print(data)

# [['Анна', '28', 'Москва'], ['Борис', '34', 'Петербург'], ['Виктор', '45', 'Новосибирск']]

Преобразование в структурированный формат данных

Часто данные из таблицы требуется преобразовать в формат JSON или CSV.

Преобразование в JSON

import json

# Преобразование данных в формат JSON
data_json = json.dumps(data, ensure_ascii=False)
print(data_json)

Преобразование данных в CSV

После извлечения данных из HTML-таблицы, вы можете преобразовать эти данные в формат CSV. Вот как это делается:

import csv

# Запись данных в CSV-файл
with open('table_data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    # Запись заголовков столбцов
    writer.writerow(['Имя', 'Возраст', 'Город'])
    # Запись строк данных
    writer.writerows(data)
  • Открытие файла для записи: Мы открываем файл table_data.csv для записи. Флаг w означает, что файл будет открыт для записи, а newline='' убирает лишние пробелы между строками в CSV-файле. Параметр encoding='utf-8' гарантирует правильное отображение кириллицы.
  • Создание объекта csv.writer(): Это позволяет нам писать в CSV-файл.
  • Запись заголовков и данных: Сначала мы записываем заголовки столбцов, а затем - строки данных.

Заключение

BeautifulSoup – мощный инструмент для парсинга HTML, который позволяет легко извлекать данные из таблиц на веб-страницах. Следуя приведенным примерам, вы сможете эффективно обрабатывать табличные данные для своих нужд.

Содержание: