Alibaba.com это одна из крупнейших B2B-площадок в мире, перечисляющая товары более чем в 40 категориях от поставщиков из десятков стран. Для всякого, кто занимается закупками, исследованием цен или анализом конкурентов, публичные результаты поиска это плотный сигнал: каждый запрос возвращает названия товаров, диапазоны цен, минимальные объёмы заказа, имена поставщиков и связывающие их ссылки. Перенос этого в структурированный датасет превращает ручной просмотр в нечто, что можно сортировать, сравнивать и отслеживать во времени.

Это руководство показывает, как парсить результаты поиска Alibaba на Node.js надёжным способом. Вы создадите небольшой работающий скрапер, который получает отрисованный SERP через Crawling API, разбирает каждую карточку товара с помощью Cheerio, обрабатывает пагинацию и экспортирует чистые JSON и CSV. Весь разбор ограничен публичными данными результатов поиска, которые любой может увидеть без учётной записи, а раздел о законности ближе к концу не для галочки, так что прочитайте его, прежде чем направлять этот скрипт на любой реальный объём.

Что вы построите

Node.js-скрипт, который принимает публичный URL поиска Alibaba, получает HTML через Crawling API и извлекает структурированную запись для каждой карточки товара на странице. В качестве сквозного примера мы используем образцовый запрос и вытащим из каждого результата следующие поля:

  • Название заголовок товара, как он показан в карточке списка.
  • Цена отображаемая цена или диапазон цен товара.
  • Минимальный заказ минимальный объём заказа или текст особенностей продажи, заданный поставщиком.
  • Поставщик название магазина или компании, стоящей за объявлением.
  • Ссылка URL страницы с подробной информацией о товаре.
  • Ссылка на магазин URL профиля компании поставщика.

Почему обычный запрос не срабатывает на Alibaba

Если выстрелить голым HTTP-запросом по URL поиска Alibaba из скрипта, вы редко получите ту чистую страницу, что видите в собственном браузере. Против вас работают две вещи. Во-первых, большая часть SERP собирается JavaScript после загрузки начального HTML, поэтому сырой запрос может вернуть оболочку с отсутствующими карточками товаров. Во-вторых, Alibaba отслеживает автоматизированный трафик: запросы, которые не выглядят как настоящий браузер, получают проверку, им подсовывают CAPTCHA или блокируют ещё до того, как они доберутся до списков.

Так что рабочему скраперу Alibaba нужны две вещи в одном запросе: IP-адрес, который платформа воспринимает как реального посетителя, и браузер, который отрисовывает страницу, когда та опирается на скрипты. Вы можете собрать это самостоятельно из headless-браузера и пула ротируемых резидентных прокси, но поддерживать их в рабочем состоянии и есть основная часть работы. Crawling API объединяет и то и другое в один вызов: вы отправляете ему URL, он загружает с доверенного IP и отрисовывает, когда нужно, и возвращает готовый HTML, который вы разбираете лёгкой библиотекой вроде Cheerio.

Почему ротация важна здесь

Alibaba входит в число более агрессивно защищённых площадок, поэтому один IP из дата-центра, выстреливающий повторные SERP-запросы, это мгновенная улика. Crawling API ротирует адреса дата-центров и резидентные адреса на стороне сервера и обрабатывает CAPTCHA за вас, так что вам не нужно самостоятельно искать и поддерживать этот пул. Вы получаете до 20 000 бесплатных запросов, без необходимости указывать кредитную карту.

Предварительные требования

Прежде чем писать код, вам нужно подготовить несколько вещей. Ни одна из них не займёт много времени.

Базовый Node.js. Вы должны уверенно писать и запускать Node-скрипт и устанавливать пакеты через npm. Если скрапинг в этом стеке для вас в новинку, наше руководство по тому, как построить веб-скрапер на Node.js, охватывает основы, которые этот туториал предполагает известными.

Node.js 14 или новее. Подтвердите свою версию командой node -v. Если его у вас нет, установите его с nodejs.org.

Учётная запись Crawlbase и токен. Зарегистрируйтесь, откройте дашборд и скопируйте свой токен запросов со страницы документации учётной записи. Вы получаете до 20 000 бесплатных запросов. Относитесь к токену как к паролю: он аутентифицирует ваши запросы, поэтому держите его вне системы контроля версий.

Настройте проект

Создайте каталог проекта и установите две библиотеки, которые нужны скраперу.

bash
mkdir alibaba-serp-scraper
cd alibaba-serp-scraper

npm init -y
npm install crawlbase cheerio

Две зависимости делают всю работу: crawlbase это официальный клиент, который отправляет запрос к Crawling API, а cheerio это быстрый, в стиле jQuery, HTML-парсер, который позволяет вытаскивать отдельные поля по CSS-селектору. Создайте файл с именем index.js в этом каталоге; именно туда идёт код скрапера.

Шаг 1: Получите страницу через Crawling API

Начните с получения HTML. Инициализируйте клиент Crawling API своим токеном, направьте его на публичный URL поиска Alibaba и подтвердите, что страница приходит, прежде чем написать хоть один селектор. Клиент CrawlingAPI возвращает ответ, чьё body содержит отрисованный HTML.

javascript
const { CrawlingAPI } = require('crawlbase');

// Replace with your token from the Crawlbase dashboard
const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' });

const alibabaSerpURL =
  'https://www.alibaba.com/trade/search?SearchText=samsung+s24+ultra';

api
  .get(alibabaSerpURL)
  .then((response) => {
    // original_status is the status Alibaba itself returned
    console.log('Status:', response.originalStatus);
    console.log(response.body.slice(0, 500));
  })
  .catch((error) => {
    console.error('Request failed:', error);
  });

Образцовый запрос это samsung+s24+ultra, передаваемый в параметре SearchText, именно так торговый поиск Alibaba передаёт поисковый термин. Запустите скрипт командой node index.js, и вы должны увидеть статус 200 и реальную разметку товаров в первых 500 символах. Это подтверждает, что получение работает, со страницей отрисованной и запросом принятым, прежде чем вы возьмётесь за логику разбора. Проверка originalStatus держит региональный шлюз или блокировку громкими, а не молча подаёт страницу ошибки в парсер.

Crawlbase Crawling API

Этот статус 200 приходит обратно только потому, что запрос вообще дошёл до Alibaba как реальный посетитель. Crawling API получает SERP с ротируемого IP, отрисовывает построенные на JavaScript карточки товаров и снимает CAPTCHA на стороне сервера, затем отдаёт вам готовый HTML, так что вы избегаете запуска флота headless-браузеров и самостоятельного поиска пула резидентных прокси. Сначала направьте его на публичный URL поиска на бесплатном тарифе.

Шаг 2: Разберите карточки товаров с помощью Cheerio

Имея на руках HTML, загрузите его в Cheerio и вытащите каждый товар по его селектору. Alibaba оборачивает каждое объявление в карточку под контейнером списка предложений, причём название, цена, минимальный заказ и поставщик каждый в своём собственном элементе внутри карточки. Осмотрите живую страницу в инструментах разработчика браузера (правый клик, затем «Просмотреть код»), чтобы подтвердить текущие имена классов; селекторы ниже соответствуют разметке на момент написания.

javascript
const cheerio = require('cheerio');

// Alibaba serves protocol-relative URLs (//...); normalise them to https
function toHttps(href) {
  if (!href) return null;
  return href.includes('http') ? href : `https:${href}`;
}

function parseSerp(html) {
  const $ = cheerio.load(html);
  const results = [];

  const numberOfResults = $('.seb-refine-result_all').text().trim();

  $('.offer-list-wrapper .J-search-card-wrapper').each((index, element) => {
    const card = $(element);

    const title = card.find("[data-spm='d_title']").text().trim();
    const url = card.find("[data-spm='d_title']").attr('href');
    const price = card.find('.search-card-e-price-main').text().trim();
    const minItem = card.find('.search-card-m-sale-features__item').text().trim();
    const storeName = card.find('.search-card-e-company').text().trim();
    const storeLink = card.find('.search-card-e-company').attr('href');
    const image = card.find('.search-card-e-slider__img').attr('src');
    const reviews = card.find('.search-card-e-review').text().trim();

    if (!title) return;

    results.push({
      position: index + 1,
      title,
      price,
      minItem,
      storeName,
      reviews,
      url: toHttps(url),
      storeLink: toHttps(storeLink),
      image: toHttps(image),
    });
  });

  return { numberOfResults, results };
}

module.exports = { parseSerp };

Обёртка .offer-list-wrapper .J-search-card-wrapper выбирает каждую карточку товара. Внутри каждой карточки название и его URL товара берутся из якоря [data-spm='d_title'], цена из .search-card-e-price-main, текст минимального заказа из .search-card-m-sale-features__item, а имя поставщика и ссылка на профиль из .search-card-e-company. Alibaba возвращает многие свои ссылки протокол-относительными (начинающимися с //), поэтому небольшой помощник toHttps добавляет https: в начало, когда значение ещё не абсолютное. Защита if (!title) return; пропускает пустые или не товарные карточки, так что промо-плитки не загрязняют вывод. Элемент .seb-refine-result_all содержит общее число результатов, показанное в верхней части страницы.

Селекторы дрейфуют

Имена классов Alibaba, вроде J-search-card-wrapper и search-card-e-price-main, меняются при повторном развёртывании фронтенда. Считайте селекторы выше отправным шаблоном, а не контрактом. Когда поле возвращается пустым для каждой карточки, заново осмотрите живую страницу в инструментах разработчика браузера и обновите селектор. Периодическое обслуживание селекторов это норма для любого продакшен-скрапера, а не признак того, что что-то сломалось.

Шаг 3: Соберите всё вместе и экспортируйте

Теперь свяжите получение и разбор в один работающий скрипт. Обойдите отрисованный SERP, передайте HTML парсеру, затем запишите структурированный вывод и в JSON, и в CSV, чтобы данные были готовы для таблицы или базы данных.

javascript
const { CrawlingAPI } = require('crawlbase');
const cheerio = require('cheerio');
const fs = require('fs');

const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' });

function toHttps(href) {
  if (!href) return null;
  return href.includes('http') ? href : `https:${href}`;
}

function parseSerp(html) {
  const $ = cheerio.load(html);
  const results = [];
  const numberOfResults = $('.seb-refine-result_all').text().trim();

  $('.offer-list-wrapper .J-search-card-wrapper').each((index, element) => {
    const card = $(element);
    const title = card.find("[data-spm='d_title']").text().trim();
    if (!title) return;

    results.push({
      position: index + 1,
      title,
      price: card.find('.search-card-e-price-main').text().trim(),
      minItem: card.find('.search-card-m-sale-features__item').text().trim(),
      storeName: card.find('.search-card-e-company').text().trim(),
      reviews: card.find('.search-card-e-review').text().trim(),
      url: toHttps(card.find("[data-spm='d_title']").attr('href')),
      storeLink: toHttps(card.find('.search-card-e-company').attr('href')),
      image: toHttps(card.find('.search-card-e-slider__img').attr('src')),
    });
  });

  return { numberOfResults, results };
}

function toCsv(results) {
  const headers = ['position', 'title', 'price', 'minItem', 'storeName', 'url'];
  const escape = (v) => `"${(v || '').toString().replace(/"/g, '""')}"`;
  const rows = results.map((r) =>
    headers.map((h) => escape(r[h])).join(',')
  );
  return [headers.join(','), ...rows].join('\n');
}

async function main() {
  const url =
    'https://www.alibaba.com/trade/search?SearchText=samsung+s24+ultra';
  const response = await api.get(url);

  if (response.originalStatus !== 200) {
    throw new Error(`Unable to crawl, status ${response.originalStatus}`);
  }

  const data = parseSerp(response.body);
  fs.writeFileSync('alibaba-serp.json', JSON.stringify(data, null, 2));
  fs.writeFileSync('alibaba-serp.csv', toCsv(data.results));
  console.log(`Saved ${data.results.length} products`);
}

main().catch((error) => console.error(error));

Запустите полный скрипт командой node index.js. Он получает SERP по запросу «samsung s24 ultra», извлекает запись для каждой карточки товара и записывает всё в alibaba-serp.json и alibaba-serp.csv. JSON сохраняет вложенную структуру со счётчиком результатов, тогда как CSV уплощает основные поля для закупок в строки, которые можно сразу бросить в таблицу. Замените запрос в URL, и те же две функции обработают всё, что придёт обратно.

Как выглядит вывод

Вы получаете чистый объект с общим числом результатов и упорядоченным списком товаров, каждый из которых несёт название, цену, минимальный заказ, поставщика, ссылки и изображение.

json
{
  "numberOfResults": "3,000+ products found",
  "results": [
    {
      "position": 1,
      "title": "Mobile Phone Case For Samsung Galaxy S24 Ultra Plus Tpu Pc Shockproof Covers",
      "price": "US$1.29 - US$1.69",
      "minItem": "Min. order: 50 pieces",
      "storeName": "Guangzhou Junbo Electronic Co., Ltd.",
      "reviews": "4.9/5.0 (68)",
      "url": "https://www.alibaba.com/product-detail/Mobile-Phone-Case_1600969904884.html",
      "storeLink": "https://gzjunbo.en.alibaba.com/company_profile.html",
      "image": "https://s.alicdn.com/@sc04/kf/Hcdcc7db446e9420f9378c0ec3482037bk.png_300x300.png"
    },
    {
      "position": 2,
      "title": "Cellphone Original S24 Ultra 16GB+512GB Smartphone 7inch Unlocked 5G",
      "price": "US$43.42 - US$54.47",
      "minItem": "Min. order: 1 piece",
      "storeName": "Dongguan Zhongfu Electronic Technology Co., Ltd.",
      "reviews": "3.3/5.0 (197)",
      "url": "https://www.alibaba.com/product-detail/Hot-selling-S24-Ultra_1600969407142.html",
      "storeLink": "https://fukadi.en.alibaba.com/company_profile.html",
      "image": "https://s.alicdn.com/@sc04/kf/H771126c0475c4a3d9ee7842740b0cf4an.jpg_300x300.jpg"
    }
  ]
}

Именно эта структура делает данные Alibaba полезными для B2B-работы: диапазоны цен и минимальные объёмы заказа питают сравнения для закупок, имена поставщиков и ссылки на магазины позволяют составить шорт-лист продавцов, а строки отзывов дают вам грубый сигнал качества по каждому объявлению. Подробнее о превращении данных площадки в ценовые решения смотрите в нашем руководстве по веб-скрапингу для ценовой аналитики.

Масштабирование по страницам и запросам

Один запрос на одной странице это демо; реальная задача по закупкам проходит по нескольким поискам и глубже в результаты. Торговый поиск Alibaba пагинируется параметром запроса page, так что page=2 это вторая страница, page=3 третья и так далее. Форма остаётся той же: постройте каждый URL, получите его через Crawling API и разберите той же функцией. Единственная привычка, которая поддерживает долгий прогон в здоровом состоянии, это размеренный темп, так что делайте паузу между запросами, а не выстреливайте их в плотном цикле.

javascript
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

async function scrapeQuery(searchText, pages = 3) {
  const encoded = encodeURIComponent(searchText).replace(/%20/g, '+');
  const allResults = [];

  for (let page = 1; page <= pages; page++) {
    const url =
      `https://www.alibaba.com/trade/search?SearchText=${encoded}&page=${page}`;
    const response = await api.get(url);
    if (response.originalStatus === 200) {
      allResults.push(...parseSerp(response.body).results);
    }
    await sleep(3000);
  }

  console.log(`Collected ${allResults.length} products across ${pages} pages`);
  return allResults;
}

Crawlbase отдаёт до 20 запросов в секунду по умолчанию, чего с запасом хватает для скрапера, который сам себя размеряет; если вам действительно нужно больше, поддержка может это поднять. Любой ответ 5XX от API бесплатен, так что повтор заблокированного или недоступного URL не стоит вам ничего. Если вы предпочитаете направлять собственный трафик через ротируемый пул, вместо того чтобы использовать управляемый API, Smart AI Proxy даёт вам ту же ротацию IP в виде drop-in прокси-эндпоинта. Более широкий план действий по площадкам смотрите в нашем руководстве по веб-скрапингу для электронной коммерции, который охватывает паттерны, переносимые между сайтами.

Как оставаться разблокированным

Даже когда доверенный IP уже обработан, Alibaba отслеживает трафик в форме скрапера, а её страницы площадки отрисовываются тяжело, поэтому несколько привычек поддерживают прогон в здоровом состоянии.

  • Размеряйте свои запросы. Долбление страниц поиска в плотном цикле это самый быстрый способ получить проверку. Распределяйте запросы и варьируйте свои запросы, вместо того чтобы листать один термин на полной скорости.
  • Опирайтесь на ротацию. Пул ротируемых IP распределяет запросы по множеству адресов, так что ни один из них не упирается в лимит. Crawling API делает это за вас; если вы собираете свой собственный стек, это та часть, которую нужно сделать правильно.
  • Отрисовывайте, когда карточки отсутствуют. Если карточки товаров приходят пустыми, странице понадобился JavaScript, чтобы их построить. Включите опцию отрисовки Crawling API, чтобы SERP получался так, как его загрузил бы настоящий браузер. Наше руководство по обходу JavaScript-сайтов объясняет, когда это имеет значение.
  • Переосматривайте, когда поля пустеют. Alibaba периодически меняет свою разметку. Если карточки перестают разбираться, откройте живую страницу в инструментах разработчика и обновите селекторы.

Более широкий план действий смотрите в том, как скрапить сайты, не попадая в блокировку.

Законно ли скрапить Alibaba?

Разрешён ли скрапинг Alibaba, зависит от условий обслуживания Alibaba, вашей юрисдикции и того, что вы делаете с данными. Условия Alibaba налагают ограничения на автоматизированный доступ, поэтому скрапинг может вступать в противоречие с этими условиями, как бы аккуратен ни был ваш инструментарий. Ничего из кода здесь этого не меняет; он лишь заставляет техническую часть работать. Прочитайте условия Alibaba и его robots.txt и относитесь к обоим как к границе того, что вы собираете.

Несколько правил, которых стоит держаться. Собирайте только публичные данные результатов поиска: названия товаров, цены, минимальные объёмы заказа, имена поставщиков и ссылки, которые любой может увидеть на SERP без учётной записи. Держите объём запросов достаточно низким, чтобы не нагружать серверы Alibaba, и размеряйте свой обход, а не гоните его на полную. Не скрапьте контактные данные покупателей или поставщиков, сообщения или что-либо за логином и не перераспределяйте изображения или описания товаров как свои собственные.

Это руководство намеренно ограничено публичными страницами результатов поиска, потому что именно эта черта удерживает работу в защитимых рамках. Alibaba управляет Open Platform с официальными API для партнёров, которым нужен санкционированный доступ к данным о товарах и поставщиках более высокого объёма, и это правильный путь, когда проект перерастает скрапинг публичных страниц. Для всего, что связано с персональными данными, контентом за учётной записью или защищённым авторским правом медиа, которое вы планируете переопубликовать, правильный маршрут это официальное соглашение по данным, а не более хитрый скрапер.

Итоги

Ключевые выводы

  • Обычных запросов не хватает. Alibaba строит свой SERP на JavaScript и устраивает проверки трафику в форме бота, поэтому вам нужна отрисовка плюс доверенный, ротируемый IP, чтобы получить реальные карточки товаров.
  • Crawling API получает данные за реальным IP. Отправьте ему URL, он ротирует IP на стороне сервера, отрисовывает карточки и снимает CAPTCHA, затем возвращает готовый HTML, который вам останется разобрать.
  • Cheerio выполняет извлечение. Выберите каждый .J-search-card-wrapper, затем прочитайте из него название, цену, минимальный заказ, поставщика и ссылки, и ожидайте, что имена классов будут дрейфовать.
  • Пагинируйте по параметру page и экспортируйте оба формата. Увеличивайте page, чтобы идти глубже, размеряйте паузой и пишите JSON для структуры и CSV для таблиц.
  • Оставайтесь на публичных данных. Уважайте ToS и robots.txt Alibaba, держите объём низким, никогда не трогайте контактные данные или данные учётной записи и используйте официальный Open Platform API, когда перерастёте скрапинг публичных страниц.

Часто задаваемые вопросы

Почему обычный запрос не срабатывает или возвращает пустую страницу на Alibaba?

Alibaba собирает большую часть своей страницы результатов поиска на JavaScript после загрузки начального HTML, поэтому сырой запрос может вернуть оболочку с отсутствующими карточками товаров. Он также помечает трафик, который не выглядит как настоящий браузер, и может выдать CAPTCHA или заблокировать. Получение через Crawling API, который отрисовывает страницу и использует ротируемые IP, делает запрос похожим на обычного посетителя, так что вы получаете реальные списки товаров.

Могу ли я парсить результаты поиска Alibaba на Node.js?

Да. С клиентом Crawlbase и Cheerio вы можете получить SERP и вытащить названия, цены, минимальные объёмы заказа, поставщиков и ссылки. Crawling API выступает мостом, который доводит ваш запрос до Alibaba с доверенного IP и отрисовывает страницу, так что запросы обрабатываются гладко, а не блокируются. Для более широкого введения смотрите наше руководство по тому, как построить веб-скрапер на Node.js.

Какие поля я могу извлечь из SERP Alibaba?

Этот туториал вытягивает из каждой карточки название товара, цену, минимальный объём заказа, имя поставщика, ссылку на товар, ссылку на магазин, изображение и строку отзыва, плюс общее число результатов по запросу. Оставайтесь в рамках публичных данных результатов поиска и избегайте всего, что за логином, включая контактные данные поставщиков и контент за учётной записью.

Нужна ли мне отрисовка JavaScript, чтобы скрапить Alibaba?

Часто да, потому что карточки товаров строятся скриптами после загрузки страницы. Если базовый запрос возвращает пустой список предложений, включите опцию отрисовки JavaScript у Crawling API, чтобы страница получалась так, как её загрузил бы настоящий браузер. Наше руководство по обходу JavaScript-сайтов охватывает, когда это необходимо.

Как мне пагинировать по большему числу результатов Alibaba?

Используйте параметр запроса page: page=2 это вторая страница, page=3 третья и так далее. Постройте каждый URL страницы, получите его через Crawling API, разберите той же функцией и делайте паузу в несколько секунд между запросами, чтобы вы размеряли обход, а не долбили его.

Мои селекторы ничего не возвращают. Что изменилось?

Почти наверняка разметка Alibaba. Имена классов вроде J-search-card-wrapper и search-card-e-price-main меняются, когда Alibaba повторно развёртывает свой фронтенд, поэтому селекторы, работавшие в прошлом месяце, могут сломаться. Заново осмотрите живой SERP в инструментах разработчика браузера и обновите селекторы. Периодическое обслуживание селекторов это норма для любого продакшен-скрапера.

Начать создавать

Обходите любой сайт в масштабе, без борьбы с инфраструктурой.

Crawlbase берёт на себя прокси, отпечатки и CAPTCHA, чтобы ваша команда выпускала конвейеры данных вместо поддержки обвязки краулинга. 1 000 запросов бесплатно, без карты.

Самообслуживание · Звонок отдела продаж не требуется · Доступны корпоративные объёмы краулинга