Парсинг табличных данных из веб-страниц является важной задачей в области веб-скрапинга. 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, который позволяет легко извлекать данные из таблиц на веб-страницах. Следуя приведенным примерам, вы сможете эффективно обрабатывать табличные данные для своих нужд.
Содержание: