Парсинг Shein в больших объемах 2026: API против HTML — что выбрать
Если ваша команда занимается ценовой аналитикой в fashion-ритейле, вам нужен стабильный Shein product scraper, способный ежедневно собирать десятки тысяч SKU с корректными ценами, валютой и остатками. В 2026 году Shein остаётся одним из самых сложных для скрапинга e-commerce-сайтов: многоуровневый антибот-стек Akamai, геолокализованные цены и динамические JSON-блоки делают простые HTTP-запросы практически нерабочими без продуманной инфраструктуры прокси.
Первое архитектурное решение — парсинг отрендеренного HTML против прямого обращения к внутренним API-эндпоинтам Shein. У каждого подхода свои компромиссы:
| Подход | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Парсинг HTML (Playwright/Selenium) | Работает даже когда API меняется; виден финальный DOM | Медленно (~3–8 сек на страницу); высокий расход RAM; Akamai блокирует headless Chrome | Разовый аудит, скриншоты, проверка отображения |
| Прямые API-эндпоинты (/api/productInfo, /api/category/list) | Быстро (~200–500 мс); чистый JSON; меньше данных для обработки | Эндпоинты меняются без уведомления; нужна валидация _abck cookie | Массовый сбор цен и остатков — основной сценарий |
| Гибрид: HTML для обнаружения + API для данных | Надёжность обнаружения новых товаров + скорость сбора | Сложнее поддерживать; два пути отказа | Production-системы ценовой аналитики |
Для скрапинга Shein в production мы рекомендуем гибридный подход, но основную массу данных тянуть через JSON-API. Это даёт 10–20-кратный прирост пропускной способности по сравнению с рендерингом страниц.
Антибот-стек Shein: Akamai Bot Manager и почему headless Chrome недостаточно
Shein использует Akamai Bot Manager — один из самых продвинутых коммерческих антибот-решений на рынке. Вот что происходит под капотом:
Куки _abck и bm_sz
При первом запросе к сайту Akamai устанавливает две ключевые куки:
- _abck — основной сессионный токен, который валидируется на стороне Akamai. Значение содержит зашифрованную сигнатуру окружения клиента. Если «сенсорные данные» (sensor_data) не проходят проверку, кука помечается как невалидная, и последующие запросы получают HTTP 403 или 412.
- bm_sz — вспомогательная кука, связывающая сессию с конкретным устройством и геолокацией.
sensor_data и телеметрия окружения
Akamai собирает JavaScript-телеметрию о браузере: отпечаток Canvas, WebGL-рендерер, тайминги событий мыши, характеристики touch-устройств и десятки других параметров. Эта телеметрия упаковывается в поле sensor_data и отправляется на эндпоинт /_bm/... для проверки. Headless Chrome «из коробки» проваливает эту проверку, потому что его отпечаток (например, navigator.webdriver = true, отсутствие реальных touch-событий, стандартный WebGL-рендерер) слишком легко классифицируется как автоматизированный.
smdeviceid — токен устройства
Помимо Akamai, Shein использует собственный токен smdeviceid — идентификатор устройства, который генерируется клиентским JavaScript и привязывается к сессии. Без этого токена API-эндпоинты могут возвращать неполные данные или перенаправлять на interstitial-страницу.
Вывод: Обычный headless Chrome с Playwright или Puppeteer НЕ проходит антибот-проверку Shein надёжно. Для массового сбора нужен подход, который имитирует TLS-отпечаток реального браузера и использует ротацию резидентных IP-адресов.
Где живут данные: JSON-блоки на странице и API-эндпоинты
Shein хранит товарные данные в нескольких местах. Понимание структуры критично для построения Shein price data-пайплайна.
on-page JSON: productIntroData и gbProductDetail
На странице товара (shein.com/[locale]/product-p[sku].html) внутри тега <script> находятся два крупных JSON-блоба:
- productIntroData — содержит базовую информацию: название, описание, изображения, варианты SKU, атрибуты товара.
- gbProductDetail — расширенные данные: цена (retailPrice, salePrice), валюта, информация о скидках, отзывы.
Извлечь их можно через XPath или CSS-селектор:
// CSS-селектор для извлечения JSON-блоба
// document.querySelector('script[id="productIntroData"]')?.textContent
// или XPath: //script[contains(text(), 'productIntroData')]/text()
API-эндпоинты: /api/productInfo и category-feed
Прямые API-эндпоинты Shein возвращают чистый JSON и работают быстрее. Ключевые параметры:
- goods_id — уникальный идентификатор товара (аналог SKU).
- cat_id — идентификатор категории для лент товаров.
- page и page_size — параметры пагинации (обычно page_size = 40–120).
Пример URL для списка товаров категории:
https://www.shein.com/api/category/list?cat_id=2020&page=1&page_size=40&language=en¤cy=USD
Пример URL для детальной информации о товаре:
https://www.shein.com/api/productInfo?goods_id=12345678&language=en¤cy=USD
Ключевые поля в ответе /api/productInfo:
retailPrice.amount— рекомендованная розничная ценаsalePrice.amount— фактическая цена продажиstockилиskuList[].stock— остатки по вариантамgoods_id— идентификатор товараgoods_sn— артикул
Rate limits и почему нужна ротация резидентных прокси с геотаргетингом
Shein применяет адаптивные rate limits на уровне IP. Точные пороги не публикуются, но по нашим наблюдениям и данным сообщества:
- Один IP-адрес — примерно 80–150 запросов к API за 10–15 минут до первого soft-block (HTTP 412 или пустой ответ).
- Hard-block — после ~300–400 запросов за час IP попадает в временный бан на 6–24 часа.
- CAPTCHA interstitial — может появиться раньше, если поведенческий профиль кажется автоматизированным.
Но есть ещё одна критическая причина для ротации прокси: Shein локализует цены, валюту и доступность по гео. Товар, показанный с IP в Германии, будет иметь цену в EUR и другой набор доступных SKU, чем тот же товар с IP в США. Если вы собираете Shein price data для нескольких рынков, вам нужно:
- Использовать резидентные прокси из целевой страны (например,
-country-USдля американского каталога). - Сохранять sticky-сессию для всей пагинации одной категории, чтобы валюта и ассортимент не «прыгали» между запросами.
- Параллельно запускать потоки для разных стран с разными гео-флагами.
Дата-центровые прокси здесь не работают — Akamai классифицирует их ASN как дата-центровый трафик и блокирует с вероятностью 70–90%. Резидентные IP-адреса от ProxyHat выглядят как реальные пользовательские подключения.
Практический пример: Python + curl_cffi + ProxyHat
Для обхода TLS-отпечатков Akamai мы используем curl_cffi — библиотеку, которая имитирует TLS-отпечаток реального Chrome через curl-impersonate. Это надёжнее, чем Playwright, и в 10–20 раз быстрее.
Установка
pip install curl_cffi
Базовый запрос к /api/productInfo через ProxyHat
from curl_cffi import requests
import json
# ProxyHat residential proxy с геотаргетингом США
proxy_url = "http://user-country-US-session-shein_cat_2020:yourpass@gate.proxyhat.com:8080"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "en-US,en;q=0.9",
"Referer": "https://www.shein.com/",
}
url = "https://www.shein.com/api/productInfo?goods_id=12345678&language=en¤cy=USD"
response = requests.get(
url,
headers=headers,
proxies={"http": proxy_url, "https": proxy_url},
impersonate="chrome131",
timeout=15,
)
if response.status_code == 200:
data = response.json()
# Извлекаем ключевые поля
product = {
"goods_id": data.get("goods_id"),
"retailPrice": data.get("retailPrice", {}).get("amount"),
"salePrice": data.get("salePrice", {}).get("amount"),
"currency": data.get("salePrice", {}).get("currency"),
"stock": data.get("stock"),
}
print(json.dumps(product, indent=2))
else:
print(f"HTTP {response.status_code} — возможен блок, ротация IP")
Пример усечённого ответа
{
"goods_id": "12345678",
"retailPrice": {"amount": "45.99", "currency": "USD"},
"salePrice": {"amount": "12.99", "currency": "USD"},
"stock": 1842,
"skuList": [
{"skuCode": "SKU-A001", "stock": 320, "salePrice": "12.99"},
{"skuCode": "SKU-A002", "stock": 0, "salePrice": "12.99"}
]
}
Обратите внимание: impersonate="chrome131" — это ключевой параметр curl_cffi, который делает TLS-handshake неотличимым от реального Chrome 131. Без него Akamai распознаёт нестандартный TLS-отпечаток Python-запроса.
Пример через curl в командной строке
curl -x "http://user-country-US-session-shein_001:yourpass@gate.proxyhat.com:8080" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
-H "Accept: application/json" \
-H "Referer: https://www.shein.com/" \
"https://www.shein.com/api/productInfo?goods_id=12345678&language=en¤cy=USD"
Пример на Node.js (через undici + ProxyHat SOCKS5)
import { fetch, ProxyAgent } from 'undici';
const proxyAgent = new ProxyAgent(
'socks5://user-country-DE-session-shein_de_01:yourpass@gate.proxyhat.com:1080'
);
const url = 'https://www.shein.com/api/productInfo?goods_id=12345678&language=de¤cy=EUR';
const res = await fetch(url, {
dispatcher: proxyAgent,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'application/json',
'Referer': 'https://www.shein.com/',
},
});
const data = await res.json();
console.log(data.salePrice);
Пагинация, sticky-сессии и логика backoff при 412
Пагинация category-feed
Для обхода категории используйте параметр page с инкрементом и page_size = 40. На каждой странице вы получаете список goods_id, которые затем можно обогатить через /api/productInfo.
import time
from curl_cffi import requests
def scrape_category(cat_id, max_pages=10, country="US"):
results = []
session_id = f"shein_cat_{cat_id}_{country}"
proxy = f"http://user-country-{country}-session-{session_id}:yourpass@gate.proxyhat.com:8080"
for page in range(1, max_pages + 1):
url = f"https://www.shein.com/api/category/list?cat_id={cat_id}&page={page}&page_size=40"
for attempt in range(3):
resp = requests.get(
url,
proxies={"http": proxy, "https": proxy},
impersonate="chrome131",
timeout=15,
)
if resp.status_code == 200:
items = resp.json().get("products", [])
results.extend(items)
print(f"Page {page}: {len(items)} items")
break
elif resp.status_code == 412:
# _abck cookie невалидна — нужна пауза и ротация
wait = 2 ** attempt * 5 # 5s, 10s, 20s
print(f"HTTP 412 на странице {page}, ожидание {wait}с")
time.sleep(wait)
elif resp.status_code == 403:
print("HTTP 403 — IP заблокирован, смена сессии")
# Новый session ID = новый IP в ProxyHat
session_id = f"shein_cat_{cat_id}_{country}_{page}_{int(time.time())}"
proxy = f"http://user-country-{country}-session-{session_id}:yourpass@gate.proxyhat.com:8080"
time.sleep(10)
else:
print(f"HTTP {resp.status_code}, повтор")
time.sleep(3)
time.sleep(1.5) # Базовая задержка между страницами
return results
Sticky-сессии для консистентности валюты
Параметр -session-{id} в имени пользователя ProxyHat закрепляет за вами конкретный IP-адрес на время сессии. Это критически важно для Shein product scraper: если в середине пагинации IP сменится на адрес из другой страны, валюта и ассортимент изменятся, и вы получите несогласованные данные.
Рекомендация: одна sticky-сессия на одну категорию для одного рынка. Для следующей категории — новый session ID.
Логика backoff при HTTP 412
HTTP 412 Precondition Failed — сигнал, что кука _abck помечена Akamai как подозрительная. Стратегия:
- Экспоненциальный backoff: 5с → 10с → 20с.
- После 3 неудач — смена session ID в ProxyHat (новый IP).
- После 5 неудач подряд — пауза 5 минут для данного country-потока.
- Логирование 412-кодов для мониторинга качества прокси-пула.
Типичные ошибки и edge-кейсы
1. Игнорирование геолокализации
Самая частая ошибка — сбор данных с одного гео и попытка экстраполировать на все рынки. Цена товара на Shein может отличаться на 15–40% между США и Германией из-за налогов, логистики и локальных промо. Всегда явно указывайте currency и language в API-запросах и используйте соответствующий гео-прокси.
2. Слишком высокая частота запросов
Даже с ротацией IP, 1500 запросов в секунду на один домен — это красный флаг для Akamai. Держите concurrency на уровне 20–50 параллельных сессий с задержкой 1–2 секунды между запросами в каждой.
3. Отсутствие валидации структуры ответа
Shein периодически меняет структуру JSON-ответов без уведомления. Всегда проверяйте наличие ключевых полей (salePrice, stock, goods_id) и логируйте аномалии. Используйте Pydantic-схемы для валидации.
4. Использование datacenter-прокси
Datacenter IP-адреса (AWS, DigitalOcean, OVH) блокируются Akamai практически мгновенно. Только резидентные или мобильные прокси дают приемлемый success rate (>85%).
5. Игнорирование robots.txt и ToS
Проверьте robots.txt Shein перед началом сбора. Даже если API-эндпоинты не закрыты в robots.txt, условия использования сервиса могут ограничивать автоматизированный доступ.
Этика, правовые аспекты и когда использовать официальный фид
Массовый скрапинг Shein находится в серой правовой зоне. Вот что нужно учитывать:
Что можно собирать
- Публичные данные о товарах: название, цена, остатки, изображения, описания.
- Категории и навигационную структуру.
- Цены для ценовой аналитики и конкурентного анализа.
Чего нельзя делать
- Доступ к личным аккаунтам пользователей или заказам.
- Попытки обхода платёжных систем или оформления заказов через скрипты.
- Сбор персональных данных пользователей (отзывы с именами могут попадать под GDPR).
- DDoS-подобные нагрузки на инфраструктуру сайта.
CFAA и GDPR
В США Computer Fraud and Abuse Act (CFAA) формально запрещает «несанкционированный доступ» к компьютерным системам. Хотя прецедентное право (например, дело hiQ v. LinkedIn) частично защищает сбор публичных данных, нарушение ToS может быть основанием для иска. В ЕС GDPR регулирует обработку любых персональных данных, включая те, что случайно попадают в собранный контент.
Когда официальный affiliate-фид лучше
Если ваша цель — только ценовая аналитика для партнёрской программы, у Shein есть официальный affiliate-API через их партнёрскую программу. Это легальный путь, который:
- Не требует обхода антибот-систем.
- Гарантирует актуальность данных.
- Не несёт юридических рисков.
Но affiliate-фид может не покрывать все SKU, не включать исторические цены и не давать доступ к остаткам в реальном времени. Для полноценного ценового интеллекта скрапинг остаётся единственным вариантом.
Настройка ProxyHat для скрапинга Shein
ProxyHat предоставляет резидентные, мобильные и дата-центровые прокси с геотаргетингом по странам и городам. Для Shein мы рекомендуем только резидентные прокси — у них наивысший success rate против Akamai.
Параметры подключения
| Параметр | Значение |
|---|---|
| Шлюз | gate.proxyhat.com |
| HTTP-порт | 8080 |
| SOCKS5-порт | 1080 |
| Геотаргетинг | user-country-US:pass (или DE, FR, GB и др.) |
| Город | user-country-US-city-newyork:pass |
| Sticky-сессия | user-session-my_id_123:pass |
| Комбинация | user-country-DE-session-shein_de_01:pass |
Изучите доступные локации на странице локаций ProxyHat и выберите подходящие тарифы на странице цен. Подробнее о применении прокси для веб-скрапинга — в разделе use cases и SERP-трекинга.
Ключевые выводы
- API-эндпоинты быстрее и надёжнее парсинга HTML для массового сбора данных Shein. Используйте
/api/productInfoи/api/category/list. - Akamai Bot Manager — серьёзный противник. Headless Chrome без модификаций не работает. Нужен curl_cffi для TLS-имперсонации + резидентные прокси.
- Геотаргетинг обязателен. Shein локализует цены и ассортимент. Используйте
-country-US,-country-DEи т.д. - Sticky-сессии для консистентности. Один session ID на одну категорию и один рынок.
- Rate limits: 80–150 запросов на IP за 10–15 минут. Держите concurrency 20–50 с задержкой 1–2 секунды.
- Backoff при 412: экспоненциальный 5с → 10с → 20с, затем смена session ID.
- Этика: только публичные товарные данные, без доступа к аккаунтам и заказам. Рассмотрите affiliate-фид, если он покрывает ваши потребности.
FAQ
Что такое парсинг Shein в больших объемах в 2026 году?
Это автоматизированный сбор каталога, цен и остатков товаров Shein через внутренние API-эндпоинты или парсинг HTML с использованием ротации резидентных прокси и TLS-имперсонации для обхода антибот-системы Akamai Bot Manager. В 2026 году ключевыми технологиями являются curl_cffi для имитации TLS-отпечатка Chrome и геотаргетированные резидентные прокси для доступа к локализованным ценам в разных странах.
Почему парсинг Shein важен для пользователей прокси?
Shein локализует цены, валюту и доступность товаров по геолокации пользователя. Без резидентных прокси с геотаргетингом невозможно получить корректные данные для конкретного рынка. Кроме того, антибот-стек Akamai блокирует дата-центровые IP и headless-браузеры, что делает качественные резидентные прокси обязательным компонентом любого production-пайплайна для сбора данных Shein. Success rate с резидентными прокси превышает 85%, тогда как с дата-центровыми — менее 30%.
Какой тип прокси лучше всего подходит для парсинга Shein?
Резидентные прокси — оптимальный выбор для Shein. Они имитируют реальные пользовательские подключения и не блокируются Akamai Bot Manager. Мобильные прокси также работают, но обычно дороже. Дата-центровые прокси практически бесполезны: Akamai классифицирует их ASN как автоматизированный трафик и блокирует в 70–90% случаев. Используйте ProxyHat residential proxies с геотаргетингом (gate.proxyhat.com:8080) и sticky-сессиями для консистентности данных.
Как избежать блокировок при парсинге Shein в 2026 году?
Используйте четыре стратегии: (1) curl_cffi с параметром impersonate="chrome131" для имитации TLS-отпечатка реального браузера; (2) ротацию резидентных IP через ProxyHat с геотаргетингом; (3) sticky-сессии для всей пагинации одной категории, чтобы валюта не менялась; (4) экспоненциальный backoff при HTTP 412 (5с → 10с → 20с) с последующей сменой session ID. Держите concurrency на уровне 20–50 параллельных сессий с задержкой 1–2 секунды между запросами.
Можно ли использовать официальный API Shein вместо скрапинга?
У Shein есть партнёрская (affiliate) программа с API-доступом к каталогу. Это легальный путь без необходимости обходить антибот-системы. Однако affiliate-фид может не покрывать все SKU, не предоставлять исторические цены и не давать доступ к остаткам в реальном времени. Для полноценного ценового интеллекта и конкурентного анализа скрапинг остаётся единственным способом получить полные данные.






