Урок 9. Работа с таблицами и списками данных на сайте с Selenium

На многих сайтах информация представлена в виде таблиц или списков: товары, книги, пользователи, заказы. Для автоматизации сбора данных необходимо уметь находить все элементы таблицы или списка и извлекать текст и атрибуты.

Почему это важно

Таблицы и списки часто обновляются динамически или имеют пагинацию. Чтобы собрать все данные, нужно:

  • Понимать структуру HTML таблицы или списка
  • Использовать правильные селекторы CSS или XPath
  • Обрабатывать ошибки, если некоторые элементы отсутствуют

Пример: сбор данных из HTML-таблицы

Допустим, есть таблица с колонками: Компания, Имя, Страна. Мы можем собрать все строки и сохранить их в список 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()

Пример: сбор данных из списка карточек товаров

Если сайт отображает книги в виде карточек, можно собирать данные по каждому элементу списка:

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

# Запускаем браузер
driver = webdriver.Chrome()
driver.get("https://books.toscrape.com/")

# Находим все карточки товаров (книг)
cards = driver.find_elements(By.CSS_SELECTOR, "article.product_pod")

products = []

for card in cards:
    try:
        # Название книги
        name = card.find_element(By.CSS_SELECTOR, "h3 a").get_attribute("title").strip()
    except:
        name = "N/A"

    try:
        # Цена
        price = card.find_element(By.CSS_SELECTOR, "p.price_color").text.strip()
    except:
        price = "N/A"

    try:
        # Ссылка
        link = card.find_element(By.CSS_SELECTOR, "h3 a").get_attribute("href")
    except:
        link = "N/A"

    products.append([name, price, link])

# Выводим результат
for p in products:
    print(p)

driver.quit()

Советы при работе с таблицами и списками

  • Проверяйте наличие элементов с помощью try/except, чтобы избежать ошибок
  • Используйте find_elements, а не find_element, чтобы получать все элементы сразу
  • Если таблица или список динамический, комбинируйте с WebDriverWait
  • Для больших таблиц можно комбинировать с пагинацией и кнопкой «Показать ещё»

Умение собирать данные из таблиц и списков является ключевым навыком для любых задач парсинга на сайтах, включая книги, товары, новости и многое другое.

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