Чтение HTML-таблиц — распространенная задача при очистке веб-страниц и извлечении данных. Python предоставляет несколько мощных библиотек и методов для анализа таблиц HTML и извлечения из них данных. В этой статье блога мы рассмотрим различные методы с примерами кода для чтения HTML-таблиц с использованием популярных библиотек Python, таких как BeautifulSoup, Pandas, regex, lxml и tabula-py.
Метод 1: BeautifulSoup
BeautifulSoup — это широко используемая библиотека для анализа документов HTML и XML. Он обеспечивает удобный способ извлечения данных из таблиц HTML.
from bs4 import BeautifulSoup
import requests
# Fetch HTML content
url = "https://example.com/table.html"
response = requests.get(url)
html_content = response.text
# Parse HTML using BeautifulSoup
soup = BeautifulSoup(html_content, "html.parser")
# Find the table element
table = soup.find("table")
# Extract data from table
data = []
for row in table.find_all("tr"):
row_data = []
for cell in row.find_all("td"):
row_data.append(cell.get_text())
data.append(row_data)
# Print the extracted data
for row in data:
print(row)
Метод 2: Pandas
Pandas — это мощная библиотека манипулирования данными на Python. Он предоставляет удобный метод чтения HTML-таблиц и преобразования их в DataFrame pandas.
import pandas as pd
# Read HTML table using Pandas
url = "https://example.com/table.html"
tables = pd.read_html(url)
# Extract the desired table
table = tables[0]
# Convert table to DataFrame
df = pd.DataFrame(table)
# Print the DataFrame
print(df)
Метод 3: регулярные выражения (регулярные выражения)
Регулярные выражения можно использовать для извлечения данных из таблиц HTML путем сопоставления определенных шаблонов.
import re
# Fetch HTML content
url = "https://example.com/table.html"
response = requests.get(url)
html_content = response.text
# Extract table using regex
pattern = r"<table.*?>(.*?)</table>"
table_match = re.search(pattern, html_content, re.DOTALL)
if table_match:
table_html = table_match.group(1)
# Extract rows using regex
row_pattern = r"<tr.*?>(.*?)</tr>"
rows = re.findall(row_pattern, table_html, re.DOTALL)
data = []
for row in rows:
# Extract cells using regex
cell_pattern = r"<td.*?>(.*?)</td>"
cells = re.findall(cell_pattern, row, re.DOTALL)
data.append(cells)
# Print the extracted data
for row in data:
print(row)
Метод 4: lxml
lxml — это высокопроизводительная библиотека для анализа документов XML и HTML. Он обеспечивает быстрый и эффективный способ извлечения данных из таблиц HTML.
from lxml import etree
# Fetch HTML content
url = "https://example.com/table.html"
response = requests.get(url)
html_content = response.text
# Parse HTML using lxml
tree = etree.HTML(html_content)
# Find the table element
table = tree.xpath("//table")[0]
# Extract data from table
data = []
for row in table.xpath(".//tr"):
row_data = []
for cell in row.xpath(".//td"):
row_data.append(cell.text)
data.append(row_data)
# Print the extracted data
for row in data:
print(row)
Метод 5: tabula-py
tabula-py — это оболочка Python для библиотеки tabula-java, которая может извлекать таблицы из PDF-файлов. Его также можно использовать для извлечения таблиц из файлов HTML.
import tabula
# Read HTML table using tabula-py
url = "https://example.com/table.html"
tables = tabula.read_html(url)
# Extract the desired table
table = tables[0]
# Print the table
print(table)
В этой статье мы рассмотрели несколько методов чтения HTML-таблиц с помощью Python. Мы рассмотрели методы использования BeautifulSoup, Pandas, регулярных выражений, lxml и tabula-py. Каждый метод имеет свои преимущества и варианты использования, поэтому выберите тот, который лучше всего соответствует вашим требованиям и предпочтениям. Имея в своем распоряжении эти методы, вы можете извлекать данные из таблиц HTML и при необходимости выполнять дальнейший анализ или обработку.