Веб-парсинг с Selenium на Python: извлечение данных с сайтов

Веб-парсинг позволяет собирать данные с веб-сайтов для анализа, мониторинга или автоматизации. Пример кода в этой статье поможет вам начать парсинг с использованием Selenium на Python. Вы сможете извлекать заголовки страниц, цены, списки товаров или другие элементы с сайтов, включая те, где контент загружается динамически через JavaScript. Этот подход полезен для:

  • Мониторинга цен в интернет-магазинах.
  • Сбора данных для маркетинговых исследований.
  • Автоматизации заполнения форм или кликов по элементам.
  • Извлечения текстов, ссылок или таблиц с сайтов.

В статье рассмотрим установку библиотек и базовый пример парсинга заголовка страницы.

Установка библиотек

Для работы с Selenium установите следующие пакеты:

pip install selenium webdriver-manager

webdriver-manager упрощает управление драйверами браузера, автоматически загружая их для Chrome, Firefox или других браузеров.

Базовый пример парсинга

Этот код открывает сайт на 15 секунд и получает заголовок страницы:

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://parsertools.ru")
time.sleep(15)
print("Заголовок страницы:", driver.title)
driver.quit()

Код запускает Chrome, открывает parsertools.ru, выводит заголовок страницы и закрывает браузер.

Результат

Расширенный пример: парсинг элементов

Для извлечения конкретных данных, например, текста элемента, используйте методы find_element. Пример парсинга текста из элемента с классом:

Код с использованием WebDriverWait для ожидания загрузки элемента:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://parsertools.ru")
# ждём, пока элемент с классом "uagb-heading-text" станет видимым (макс. 10 секунд)
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.CLASS_NAME, "uagb-heading-text"))
)
print("Текст элемента:", element.text)
driver.quit()

Замените uagb-heading-text на реальный класс элемента на целевом сайте.

Результат

Советы по оптимизации парсинга

Чтобы парсинг был эффективным и надежным:

  • Используйте WebDriverWait для ожидания загрузки элементов.
  • Обрабатывайте исключения, такие как NoSuchElementException.
  • Закрывайте браузер (driver.quit()) после завершения работы.
  • Для больших объемов данных комбинируйте Selenium с BeautifulSoup для ускорения обработки HTML.

Импорты для Selenium

from selenium import webdriver

Подключает модуль webdriver из библиотеки Selenium. Он нужен для запуска браузеров (Chrome, Firefox, Edge и др.) и управления ими с помощью Python.

from selenium.webdriver.common.by import By

Импортирует класс By, который используется для поиска элементов на веб-странице. Можно указывать разные способы поиска:

  • By.ID — поиск по ID
  • By.CLASS_NAME — поиск по классу
  • By.XPATH — поиск по XPath
  • By.CSS_SELECTOR — поиск по CSS-селектору

from selenium.webdriver.support.ui import WebDriverWait

Импортирует класс WebDriverWait, позволяющий задавать время ожидания элементов. В отличие от time.sleep(), он ждет только до появления элемента, что делает скрипт быстрее и эффективнее.

from selenium.webdriver.support import expected_conditions as EC

Подключает expected_conditions (EC) — набор условий, которые можно использовать с WebDriverWait. Они помогают дождаться, пока элемент станет доступным:

  • EC.presence_of_element_located — элемент появился в DOM
  • EC.visibility_of_element_located — элемент стал видимым
  • EC.element_to_be_clickable — элемент готов к клику

Плюсы и минусы Selenium

Плюсы:

  • Работа с динамическими сайтами.
  • Эмуляция действий пользователя (клики, ввод текста).
  • Поддержка разных браузеров.

Минусы:

  • Медленнее, чем requests или BeautifulSoup.
  • Требует драйвер браузера.
  • Высокое потребление ресурсов.

Заключение

Selenium — мощный инструмент для парсинга сложных сайтов с динамическим контентом. Начните с простых скриптов, таких как приведенные выше, и постепенно переходите к более сложным задачам, например, парсингу таблиц, форм или многостраничных сайтов.

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