Перейти к содержимому

Scrape (извлечение данных)

Извлечение структурированного JSON из полностью отрендеренных веб-страниц через CSS-селекторы. Запросы выполняются с российских серверов (российские IP-адреса, российский DNS) — сайты отдают локализованный контент, корректные цены в рублях и российскую выдачу. 100% совместимость с Browserless.io Scrape API — drop-in замена для существующих интеграций.

МетодЭндпоинтОписание
POST/v1/browser/scrapeBrowserless-совместимый API

API принимает URL и массив CSS-селекторов, загружает страницу через headless Chromium, выполняет querySelectorAll для каждого селектора и возвращает структурированный JSON с текстом, HTML, атрибутами и координатами каждого найденного элемента.

Окно терминала
# Извлечение заголовков и параграфов
curl -X POST "https://proxy.unoapi.ru/v1/browser/scrape" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"elements": [
{"selector": "h1"},
{"selector": "p"}
]
}'
# С ожиданием загрузки контента
curl -X POST "https://proxy.unoapi.ru/v1/browser/scrape" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"elements": [{"selector": ".product-card"}],
"gotoOptions": {"waitUntil": "networkidle"},
"viewport": {"width": 1920, "height": 1080}
}'

API возвращает JSON с массивом data, где каждый элемент соответствует одному селектору из запроса:

{
"data": [
{
"selector": "h1",
"results": [
{
"html": "Добро пожаловать",
"text": "Добро пожаловать",
"attributes": [
{ "name": "class", "value": "title" }
],
"width": 800,
"height": 42,
"top": 10,
"left": 0
}
]
},
{
"selector": ".product-card",
"results": [
{
"html": "<img src=\"...\"><h3>Товар 1</h3><span>1 500 ₽</span>",
"text": "Товар 1 1 500 ₽",
"attributes": [
{ "name": "class", "value": "product-card" }
],
"width": 300,
"height": 200,
"top": 100,
"left": 0
}
]
}
]
}

Поля каждого результата:

ПолеТипОписание
htmlstringВнутренний HTML элемента (innerHTML)
textstringТекстовое содержимое (textContent)
attributesarrayМассив атрибутов: {name, value}
widthnumberШирина элемента в пикселях
heightnumberВысота элемента в пикселях
topnumberКоордината Y элемента на странице
leftnumberКоордината X элемента на странице

Массив elements — обязательный параметр. Каждый элемент содержит CSS-селектор:

{
"url": "https://example.com",
"elements": [
{ "selector": "h1" },
{ "selector": ".price" },
{ "selector": "table.specs td" },
{ "selector": "a[href^='/product']" }
]
}

Поддерживаются любые валидные CSS-селекторы — API использует document.querySelectorAll под капотом. Чем более специфичный селектор, тем точнее результат.

Основные параметры запроса:

  • url — URL страницы для извлечения данных
  • html — или HTML-контент для рендеринга (вместо URL)
  • elements — массив объектов {selector: string} (обязательный, минимум 1)
  • viewport.width / height — размер окна браузера (по умолчанию 1280×800)
  • waitForSelector — ожидание CSS-селектора перед извлечением
  • gotoOptions.waitUntilload, domcontentloaded, networkidle
  • waitForTimeout — дополнительная задержка в миллисекундах
  • waitForFunction — ожидание выполнения JavaScript-функции

API возвращает информацию о целевой странице через заголовки:

  • X-Response-Code — HTTP-код ответа целевой страницы
  • X-Response-Status — текстовый статус ответа
  • X-Response-URL — финальный URL после редиректов

Вместо URL можно передать HTML-контент напрямую для парсинга:

Окно терминала
# Извлечение данных из HTML-контента (без URL)
curl -X POST "https://proxy.unoapi.ru/v1/browser/scrape" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"html": "<div><h1>Тест</h1><p class=\"info\">Текст</p></div>",
"elements": [{"selector": "h1"}, {"selector": ".info"}]
}'

Это полезно для парсинга HTML-фрагментов, полученных из других источников.

Для динамических страниц (SPA, React, Vue) используйте waitForSelector или gotoOptions.waitUntil: "networkidle":

Окно терминала
# Ожидание загрузки товаров перед извлечением
curl -X POST "https://proxy.unoapi.ru/v1/browser/scrape" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://shop.example.com/catalog",
"elements": [{"selector": ".product-card"}],
"waitForSelector": {"selector": ".product-card", "timeout": 10000},
"gotoOptions": {"waitUntil": "networkidle"}
}'

Параметр bestAttempt: true позволяет продолжить даже если селектор не найден в заданное время.

  • Мониторинг цен — извлечение цен с карточек товаров по CSS-селекторам
  • Агрегация контента — сбор заголовков, описаний и метаданных со страниц
  • Мониторинг изменений — отслеживание конкретных элементов на страницах
  • SEO-аудит — извлечение <title>, <meta>, заголовков и ссылок
  • Парсинг таблиц — извлечение структурированных данных из HTML-таблиц
  • Тестирование — проверка наличия и содержимого элементов на странице

API поддерживает все параметры Browserless.io:

  • Cookies и авторизацияcookies, authenticate
  • Внедрение скриптовaddScriptTag, addStyleTag
  • Блокировка ресурсовrejectResourceTypes, rejectRequestPattern
  • ЭмуляцияemulateMediaType (screen/print)
  • JavaScriptsetJavaScriptEnabled: false
  • HTTP-заголовкиsetExtraHTTPHeaders
  • User-AgentuserAgent

API блокирует небезопасные URL: localhost, приватные IP, .local домены.

https://chrome.browserless.io/scrape
https://proxy.unoapi.ru/v1/browser/scrape

Формат запроса и ответа полностью совместим.