Урок 13. Selenium работа с таблицами в Python

Таблицы на веб-страницах часто содержат структурированные данные, такие как списки товаров, рейтинги, расписания и многое другое. Selenium позволяет легко получать данные из таблиц, используя локаторы CSS, XPath или тег table.

Импорт и подготовка

Начнем с импорта необходимых модулей и открытия страницы с таблицей.

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://example.com/table")  # URL страницы с таблицей
time.sleep(2)  # Пауза для загрузки таблицы

Получение строк таблицы

Для начала находим саму таблицу и получаем все строки <tr>.

table = driver.find_element(By.TAG_NAME, "table")  # Находим таблицу
rows = table.find_elements(By.TAG_NAME, "tr")     # Получаем все строки

Извлечение данных из ячеек

Далее можно пройтись по каждой строке и получить текст из ячеек <td>:

for idx, row in enumerate(rows):
    cells = row.find_elements(By.TAG_NAME, "td")
    if cells:  # Пропускаем заголовок
        row_data = [cell.text for cell in cells]
        print(f"Строка {idx}: {row_data}")

Сохранение данных в список

Собранные данные можно сохранить в список Python для дальнейшей обработки:

data = []
for row in rows:
    cells = row.find_elements(By.TAG_NAME, "td")
    if cells:
        row_data = [cell.text for cell in cells]
        data.append(row_data)

print("Всего строк:", len(data))

Допустим, есть таблица с колонками: Компания, Имя, Страна. Мы можем собрать все строки и сохранить их в список Python.

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.w3schools.com/html/html_tables.asp")

# Находим все строки таблицы (tr), кроме заголовка
rows = driver.find_elements(By.CSS_SELECTOR, "#customers tr")

data = []

for row in rows[1:]:  # пропускаем заголовок
    cells = row.find_elements(By.TAG_NAME, "td")
    company = cells[0].text.strip()
    contact = cells[1].text.strip()
    country = cells[2].text.strip()
    data.append([company, contact, country])

for item in data:
    print(item)

driver.quit()

Дополнительные советы

  • Для таблиц с динамической подгрузкой используйте WebDriverWait перед получением строк.
  • Если таблица имеет заголовки <th>, их можно обработать отдельно для создания словаря.
  • Для больших таблиц полезно использовать пагинацию или прокрутку, чтобы получить все данные.

Использование Selenium для работы с таблицами позволяет автоматизировать сбор структурированных данных и ускоряет анализ информации с сайтов.

Больше уроков по парсингу на parsertools.ru/lessons.