Частина потрібних даних доступна лише після входу в акаунт: особистий кабінет постачальника, оптовий прайс, закрита база. Щоб парсер потрапив на такі сторінки, він має пройти авторизацію так само, як це робить користувач. Розбираємо основні способи на 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 або парсинг сайтів як послугу.