Скрапинг цен, лестниц скидок и наличия в магазинах Kohl's
Обычная цена, цена со скидкой, действующая акция, право на Kohl's Cash и доступность самовывоза по ZIP с kohls.com. Без браузера.
Измерено на Crawlbase
99.0% успеха за August 2026. Kohl's относится к сложному уровню: сайт ставит проверку перед простыми запросами, и Crawlbase проходит её за вас, поэтому страница стоит два кредита и всё равно не требует браузера с вашей стороны. 1.3% успешных вызовов использовали JavaScript-токен.
Вызов
# Product page, rendered HTML curl "https://api.crawlbase.com/?token=YOUR_TOKEN&country=US&url=https%3A%2F%2Fwww.kohls.com%2Fproduct%2Fprd-6248533%2Fsonoma-goods-for-life-mens-supersoft-crewneck-tee.jsp" # Same page, stock for the store nearest a ZIP curl "https://api.crawlbase.com/?token=YOUR_TOKEN&country=US&cookies=zipCode%3D60601&url=https%3A%2F%2Fwww.kohls.com%2Fproduct%2Fprd-6248533%2Fsonoma-goods-for-life-mens-supersoft-crewneck-tee.jsp"
from crawlbase import CrawlingAPI api = CrawlingAPI({'token': 'YOUR_TOKEN'}) r = api.get('https://www.kohls.com/product/prd-6248533/sonoma-goods-for-life-mens-supersoft-crewneck-tee.jsp', {'country': 'US', 'cookies': 'zipCode=60601'}) html = r['body'] # prices live in the productV2JsonData script tag
const { CrawlingAPI } = require('crawlbase'); const api = new CrawlingAPI({ token: 'YOUR_TOKEN' }); const r = await api.get('https://www.kohls.com/product/prd-6248533/sonoma-goods-for-life-mens-supersoft-crewneck-tee.jsp', { country: 'US', cookies: 'zipCode=60601' }); const state = JSON.parse(r.body.match(/productV2JsonData\s*=\s*(\{.*?\});/s)[1]);
Важные параметры
| Параметр | Значение | Зачем |
|---|---|---|
country | US | Kohl's отдаёт страницу блокировки при выходе не из США. Задавайте его в каждом вызове. |
javascript | не задавать | Цены, лестница скидок и текст акции лежат в JSON-блоке внутри HTML. Почти каждый успешный вызов за измеренный месяц выполнялся без браузера. |
cookies | zipCode=<zip> | Задаёт магазин, по которому считается доступность самовывоза. Без него вы получаете национальное значение по умолчанию, которое не является ответом о наличии. |
autoparse | пока нет | Отдельного скрапера нет. Встроенный JSON стабилен, и поля ниже берутся прямо из него. |
Поля, которые вы получаете, из встроенного JSON
stringstringnumbernumber | nullstringbooleanstringstringobjectnumberЧто ломается и как починить
WS=, а не по номеру страницы. Смещение равно числу уже просмотренных товаров с шагом 48. Неверный шаг снова возвращает первую страницу, и вы решите, что в категории всего 48 товаров.Запуск по расписанию
Ежедневное наблюдение за ценами 50 000 товаров стоит 100 000 кредитов в день при двух кредитах за страницу. Используйте Crawler, чтобы сгладить всплески, и передавайте ZIP как cookie в каждой задаче, когда отслеживаете наличие по магазинам.
Вопросы
Почему страница Kohl's стоит два кредита?
Kohl's относится к сложному уровню. Crawlbase проходит его защиту от ботов за вас; цена отражает эту работу, и браузер всё равно не нужен.
Могу ли я получить наличие в магазине?
Да. Передайте cookies=zipCode=<zip> и читайте storeAvailability из встроенного JSON.