
Парсинг табличных данных из веб-страниц является важной задачей в области веб-скрапинга. 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-код страницы. Т.к. у в нашем примере таблица у нас готова и парсить с сайта ее не нужно, то просто добавим ее:
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>
"""Теперь применим 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.
import json
# Преобразование данных в формат JSON
data_json = json.dumps(data, ensure_ascii=False)
print(data_json)После извлечения данных из 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)w означает, что файл будет открыт для записи, а newline='' убирает лишние пробелы между строками в CSV-файле. Параметр encoding='utf-8' гарантирует правильное отображение кириллицы.csv.writer(): Это позволяет нам писать в CSV-файл.BeautifulSoup – мощный инструмент для парсинга HTML, который позволяет легко извлекать данные из таблиц на веб-страницах. Следуя приведенным примерам, вы сможете эффективно обрабатывать табличные данные для своих нужд.
Содержание: