Написати в Телеграм Написати у Вайбер Зателефонувати

Часть нужных данных доступна только после входа в аккаунт: личный кабинет поставщика, оптовый прайс, закрытая база. Чтобы парсер попал на такие страницы, он должен пройти авторизацию так же, как это делает пользователь. Разбираем основные способы на Python.

Что важно знать до начала

  • Пользуйтесь только теми аккаунтами и данными, к которым у вас есть законный доступ.
  • Изучите условия использования сайта: некоторые прямо запрещают автоматические запросы.
  • Не храните логин и пароль в коде. Используйте переменные окружения или отдельный конфиг вне репозитория.

Способ 1. Сессия requests и форма входа

Самый простой вариант: отправить логин и пароль так же, как это делает форма на странице, и сохранить cookie в сессии.

import os
import requests
from bs4 import BeautifulSoup

LOGIN_URL = "https://example.com/login"
s = requests.Session()
s.headers["User-Agent"] = "Mozilla/5.0"

page = s.get(LOGIN_URL, timeout=20)
soup = BeautifulSoup(page.text, "lxml")
token = soup.select_one("input[name=csrf_token]")["value"]

resp = s.post(LOGIN_URL, data={
    "email": os.environ["SITE_LOGIN"],
    "password": os.environ["SITE_PASSWORD"],
    "csrf_token": token,
}, timeout=20)
resp.raise_for_status()

orders = s.get("https://example.com/account/orders", timeout=20)
print(orders.status_code)

Многие формы содержат скрытое поле с CSRF-токеном: его нужно сначала извлечь со страницы и передать вместе с данными.

Как посмотреть, что именно отправляет форма

В DevTools (F12) откройте вкладку Network, включите «Preserve log» и войдите на сайт вручную. Найдите запрос входа (обычно POST) и посмотрите его адрес, поля и заголовки: их нужно воспроизвести в скрипте.

Способ 2. Токен или API-ключ

Если у сайта есть API, авторизация часто происходит через токен в заголовке:

headers = {"Authorization": "Bearer ВАШ_ТОКЕН"}
r = requests.get("https://example.com/api/prices", headers=headers, timeout=20)

Такой вариант надёжнее имитации формы: токен живёт дольше, а ответ приходит в удобном JSON.

Способ 3. Браузер (Selenium или Playwright)

Когда вход зависит от скриптов, перенаправлений или сложной формы, проще пройти его в браузере, а затем передать cookie в requests или продолжить работу там же. О работе с браузером читайте в статье парсинг динамических страниц на Python.

Сохранение сессии

Чтобы не входить каждый раз, сохраните cookie в файл и загружайте их при следующем запуске. Помните, что сессия имеет срок действия: при получении ошибки 401/403 или перенаправлении на страницу входа выполните авторизацию повторно.

Типичные препятствия

  • Капча. Автоматически обходить её не стоит: это часто нарушает правила сайта. Лучше договориться о доступе к данным другим путём.
  • Двухфакторная аутентификация. Нужны коды с устройства; обычно решается через API или отдельный сервисный аккаунт.
  • Блокировка по частоте. Делайте паузы и не отправляйте много запросов подряд.

Основы работы с разметкой описаны в статье парсинг на Python с BeautifulSoup.

Нужен парсер для закрытого прайса или кабинета поставщика? Закажите разработку парсера на Python или парсинг сайтов как услугу.