
Привет! Если вы пытались спарсить данные с современного сайта через BeautifulSoup и видели в ответе пустые теги, значит, вы столкнулись с динамическим контентом. Сайт не отдает данные сразу в HTML — он подгружает их «тихо» через фоновые запросы.
В прошлых статьях мы уже научились делать извлечение паролей Chrome на Python и настраивать бэкап профилей Chrome и Firefox. Сегодня мы перейдем к «высшей лиге» скрапинга. Я покажу, как делать парсинг скрытого API сайта, используя реальный живой пример, чтобы вы могли применять это в своих проектах.
Оглавление
Реальный пример: Исследуем CoinMarketCap
Возьмем популярный сайт CoinMarketCap. Если мы просто отправим запрос на главную страницу, мы получим огромный кусок HTML-кода, в котором очень сложно искать актуальные цены валют. Но если мы заглянем «под капот», то увидим, что список криптовалют подгружается отдельным JSON-файлом.
Инструкция по поиску:
- Открываем сайт.
- Нажимаем
F12-> вкладка Network. - Ставим фильтр Fetch/XHR.
- Листаем список валют.
- Видим запрос к эндпоинту
v3/cryptocurrency/listing. Это и есть наше скрытое API.
Кликнув на этот запрос, во вкладке Preview мы увидим чистый список объектов с ценами, рыночной капитализацией и изменениями за 24 часа. Нам не нужен BeautifulSoup, нам нужен этот URL.
📚 Документация: Chrome DevTools — Network Activity «Вкладка Network позволяет отслеживать каждый HTTP-запрос, который совершает страница. Это основной инструмент для анализа того, как сайт получает данные в фоновом режиме».
Пишем продвинутый парсер на Python
Чтобы сервер не отклонил наш запрос, нам нужно имитировать поведение браузера. Мы будем использовать сессию, так как иногда API требует предварительного получения кук. Если сайт требует авторизации, вам поможет наш гайд про извлечение cookies Chrome на Python, чтобы добавить их в заголовки.
import requests
import time
def parse_coin_market_api():
# Реальный URL скрытого API (найден через Network)
api_url = "https://api.coinmarketcap.com/data-api/v3/cryptocurrency/listing"
# Заголовки — копируем их полностью из браузера
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept": "application/json, text/plain, */*",
"Referer": "https://coinmarketcap.com/",
"Origin": "https://coinmarketcap.com"
}
# Параметры запроса (фильтры, лимиты, валюта)
params = {
"start": 1,
"limit": 100,
"sortBy": "market_cap",
"sortType": "desc",
"convert": "USD",
"cryptoType": "all",
"tagType": "all"
}
session = requests.Session()
try:
# Делаем запрос к скрытому эндпоинту
response = session.get(api_url, headers=headers, params=params, timeout=10)
# Если получаем 403, значит нужно проверить TLS Fingerprint или Cookies
response.raise_for_status()
data = response.json()
# Разбираем JSON структуру
crypto_list = data.get("data", {}).get("cryptoCurrencyList", [])
print(f"{'Название':<20} | {'Цена (USD)':<12} | {'Изменение 24h':<10}")
print("-" * 50)
for coin in crypto_list:
name = coin.get("name")
# Глубокая вложенность в JSON — обычное дело для API
price = coin.get("quotes", [{}])[0].get("price", 0)
change = coin.get("quotes", [{}])[0].get("percentChange24h", 0)
print(f"{name:<20} | {price:<12.2f} | {change:<10.2f}%")
except Exception as e:
print(f"Ошибка при парсинге: {e}")
if __name__ == "__main__":
parse_coin_market_api()
Почему этот код лучше обычного скрапинга?
Точность: Мы получаем цену до 10 знаков после запятой, которую в HTML часто округляют.
Пагинация: Чтобы получить следующие 100 монет, нам достаточно поменять params["start"] = 101.
Минимум кода: Нам не нужно искать классы id="price-block" или class="sc-16891c-0", которые меняются каждую неделю.
Проблемы: Защита и обход блокировок
Не все сайты так открыты. Многие используют защиту от «умного» парсинга. Если вы получаете ошибку доступа, обратите внимание на следующие моменты:
- Cookies: Некоторые API проверяют наличие сессионных кук. Как их достать, мы писали здесь: извлечение cookies Chrome на Python.
- Динамические токены: Иногда в заголовках есть поле вроде
X-CSRF-Token. Его нужно сначала «выцепить» из основного HTML страницы, а потом подставить в API-запрос. - Скорость: Делайте паузы между запросами, используя
time.sleep().
Чтобы ваш проект был профессиональным, управляйте зависимостями через uv — менеджер пакетов, это стандарт для быстрой разработки в 2026 году. Также старайтесь писать чистый код на Python, разделяя логику получения данных и их обработки.
Заключение
Парсинг скрытого API сайта — это инструмент, который отделяет новичка от профессионала. Научившись анализировать сетевой трафик сайта, вы сможете добывать данные даже с самых защищенных ресурсов. Это эффективнее, быстрее и надежнее любого парсинга HTML-верстки. Всегда начинайте исследование сайта с вкладки Network — в 90% случаев там найдется «черный ход» к данным в формате JSON.
• Извлечение cookies Chrome на Python — как использовать сессии в своих запросах
• Создание API на FastAPI — научитесь отдавать данные в формате JSON самостоятельно
• Как писать чистый код на Python — советы по архитектуре ваших инструментов
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и разные трюки на Python.
👉 Ваш интерес — лучшая мотивация для новых статей!