Веб-парсинг с 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— поиск по IDBy.CLASS_NAME— поиск по классуBy.XPATH— поиск по XPathBy.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— элемент появился в DOMEC.visibility_of_element_located— элемент стал видимымEC.element_to_be_clickable— элемент готов к клику
Плюсы и минусы Selenium
Плюсы:
- Работа с динамическими сайтами.
- Эмуляция действий пользователя (клики, ввод текста).
- Поддержка разных браузеров.
Минусы:
- Медленнее, чем
requestsилиBeautifulSoup. - Требует драйвер браузера.
- Высокое потребление ресурсов.
Заключение
Selenium — мощный инструмент для парсинга сложных сайтов с динамическим контентом. Начните с простых скриптов, таких как приведенные выше, и постепенно переходите к более сложным задачам, например, парсингу таблиц, форм или многостраничных сайтов.
Больше примеров по парсингу на parsertools.ru/primers.
