Техники Python для чтения HTML-таблиц: подробное руководство

Чтение 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 и при необходимости выполнять дальнейший анализ или обработку.