Парсинг данных после нажатия кнопки: requests или Selenium
При сборе информации с веб-страниц часто возникает ситуация, когда нужные данные появляются только после взаимодействия пользователя - например, нажатия на кнопку. В инструменте разработчика вы видите, что метод запроса меняется с GET на POST. В этой статье мы разберём, как решить задачу парсинга таких динамических элементов с помощью Python-библиотек requests и Selenium, и какой инструмент выбрать новичку.
Как работает загрузка данных по клику
Современные сайты всё чаще используют AJAX-запросы. При нажатии кнопки браузер отправляет асинхронный POST-запрос на сервер, получает JSON или HTML-фрагмент и обновляет часть страницы без перезагрузки. Чтобы спарсить такие данные, нужно либо эмулировать этот запрос, либо использовать инструмент, который умеет выполнять JavaScript.
Метод requests: когда он сработает
Библиотека requests в Python отлично подходит для отправки HTTP-запросов. Если вы нашли в инспекторе сети точный URL, метод (POST) и все заголовки (headers), включая Content-Type, Cookie и возможные параметры формы (form data), то вы можете повторить запрос в коде. Для этого:
- Откройте вкладку Network (Сеть) в инструментах разработчика браузера.
- Нажмите кнопку на сайте и найдите соответствующий POST-запрос.
- Скопируйте URL, метод, заголовки и тело запроса (Form Data или Payload).
- Используйте
requests.post(url, headers=headers, data=payload).
Если сервер не проверяет сложные токены и сессии, этого часто достаточно. Однако многие сайты защищены от прямых запросов: требуется CSRF-токен, сессионная cookie или User-Agent. В этом случае придётся сначала получить сессию через requests.Session() и подставить токен.
Когда без Selenium не обойтись
Selenium - это инструмент для автоматизации браузера. Он запускает настоящий браузер (Chrome, Firefox) и выполняет JavaScript, как это делает пользователь. Selenium незаменим, если:
- POST-запрос формируется динамически (например, с шифрованием или хешированием параметров).
- Сайт использует сложные проверки (капчу, WebSocket, Shadow DOM).
- Данные подгружаются в несколько этапов после клика с анимацией.
- Вам нужно взаимодействовать с элементами (скролл, hover, выбор из выпадающего списка).
Для новичка Selenium может показаться громоздким, но он более надёжен для сложных сценариев. Пример кода: driver.find_element(By.ID, 'button-id').click(), после чего ждёте появления нужного элемента и парсите его.
Практический алгоритм выбора
Попробуйте сначала воспроизвести запрос через requests. Если получаете ошибку 403, 401 или пустой ответ - переходите к Selenium. Также стоит учитывать: если данных мало и сайт не блокирует парсинг, requests быстрее и легче. Если же проект масштабный и сайт активно защищается - Selenium с headless-режимом станет вашим спасением.
Рекомендации для новичков
Не бойтесь экспериментировать с инструментами разработчика. Изучите, какие данные уходят на сервер при клике. Если используете Selenium, добавьте options.add_argument('--headless') для работы без графического интерфейса. И помните: всегда уважайте robots.txt и условия использования сайта.