К содержимому

Документация

Первый сценарий сбора на JavaScript

Этот пример собирает карточки каталога и сохраняет артикул, название, цену и ссылку. Его можно использовать как основу: замените URL и CSS-селекторы на те, которые соответствуют вашему сайту.

Подготовка

Создайте сайт, затем сценарий на JavaScript. В настройках сайта задайте поля sku, name, price и url. Если адрес каталога меняется, добавьте параметр catalog_url. Метод ctx.param() получит его во время запуска.

Код

async function run(ctx) {
  const url = ctx.param('catalog_url', '');
  if (!url) ctx.abort('Укажите адрес каталога');
  ctx.log('Загружаем каталог');

  const response = await ctx.http().get(url);
  if (!response.ok()) ctx.fail(`Каталог ответил HTTP ${response.status}`);
  const cards = response.dom().qa('.product-card');
  if (!cards.length) ctx.fail('Карточки товаров не найдены');

  let saved = 0;
  for (const card of cards) {
    if (await ctx.cancelled()) ctx.abort('Сбор остановлен');
    const sku = card.attr('data-sku');
    const link = card.q('a')?.abs('href');
    if (!sku || !link) continue;
    ctx.emit({
      sku,
      name: card.q('.title')?.text() ?? '',
      price: ctx.text().money(card.q('.price')?.text() ?? null),
      url: link,
    }, sku);
    saved++;
  }

  ctx.metric('products_saved', saved);
  ctx.progress(1, 1, 'Каталог обработан');
  ctx.log('Готово', { saved });
}

ctx.http().get() асинхронен, поэтому перед ним стоит await. Разбор HTML и очистка цены происходят локально. ctx.emit() записывает обычный объект, а sku служит стабильным ключом. Если у сайта разные товары с одним артикулом, выберите ключ, который действительно уникален для вашей задачи.

Проверка и развитие

Сначала выполните пробный прогон. Сравните несколько записей с сайтом: название, цену, ссылку и пропущенные карточки. Если каталог разбит на страницы, добавьте обход страниц. Если товары появляются только после клика, используйте браузерные действия. После проверки опубликуйте версию и отдельно запустите рабочий сбор.

Жизненный цикл сценария · Справочник Context