Парсинг данных после нажатия кнопки: 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 и условия использования сайта.

    Часто задаваемые вопросы