Как парсить Золотое Яблоко и обойти блокировки
Парсинг интернет-магазина «Золотое Яблоко» - сложная задача из-за агрессивной антибот-защиты. Сервер блокирует запросы к API и страницам товаров, даже при использовании Selenium и прокси. В этой статье разберём основные причины блокировок и эффективные способы их обхода.
Почему сервер блокирует запросы?
Сайт использует многоуровневую защиту: анализ User-Agent, проверку заголовков (Referer, Origin), ограничение по IP и детект автоматизированных браузеров. Даже при корректных заголовках запросы могут отклоняться из-за несоответствия «цифрового отпечатка» (fingerprinting).
Обход блокировок API Золотого Яблока
Прямой вызов скрытого API (https://goldapple.ru/front/api/catalog/product-card/base/v2) часто приводит к ошибке 403. Чтобы успешно получать JSON с данными о товаре, необходимо:
- Использовать реальные cookies и сессии, полученные через браузер. Без них сервер считает запрос ботом.
- Эмулировать заголовки в точности как у браузера:
Accept,Accept-Language,Referer,Origin. - Добавить задержки между запросами (1-3 секунды) и случайные паузы.
- Применять ротацию прокси высокого качества (резидентные или мобильные IP).
Настройка Selenium для парсинга
Selenium с headless-режимом легко детектится. Для обхода используйте:
- undetected-chromedriver - библиотека, скрывающая признаки автоматизации.
- Случайный User-Agent и разрешение экрана.
- Эмуляцию действий мыши (движения, клики) через ActionChains.
- Отключение WebDriver-флагов (navigator.webdriver).
Работа с прокси
Простые HTTP/HTTPS прокси часто уже заблокированы. Лучшие варианты:
- Резидентные прокси - IP реальных пользователей, минимальный риск блокировки.
- Мобильные прокси - сложнее детектятся.
- Прокси-ротаторы с автоматической сменой IP после каждого запроса.
Перед использованием обязательно тестируйте прокси через httpbin.org/ip или аналогичные сервисы.
Пример рабочего кода
Ниже - улучшенная версия скрипта с undetected-chromedriver и ротацией User-Agent:
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import time
import random
driver = uc.Chrome()
driver.get('https://goldapple.ru/88800900003-pinup-liquid-eyeliner')
time.sleep(random.uniform(5, 8))
try:
button = driver.find_element(By.CSS_SELECTOR, 'button[data-testid="addToCart"]')
print('Товар в наличии')
except:
print('Товара нет в наличии')
driver.quit()Для API используйте requests с сессией и cookies, полученными после первого визита на сайт.
Альтернативные методы
Если обход блокировок слишком сложен, рассмотрите:
- Покупку данных через официальные партнёрские API - если доступно.
- Использование сервисов-парсеров (ScrapingBee, ScraperAPI) - они решают проблемы с прокси и капчей.
- Ручной сбор данных для малого объёма.
Парсинг «Золотого Яблока» требует комплексного подхода: качественные прокси, эмуляция реального пользователя и современные инструменты антидетекта. Начните с undetected-chromedriver и ротации заголовков.