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

Scrape: извлечение элементов по CSS-селекторам

POST /v1/browser/scrape открывает страницу в headless Chromium, выполняет document.querySelectorAll для каждого селектора и возвращает найденные элементы в JSON. Формат совместим с Browserless /scrape.

Окно терминала
curl -X POST "https://proxy.seyka.ru/v1/browser/scrape" \
-H "Authorization: Bearer $SEYKA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"elements": [{"selector": "h1"}, {"selector": "a[href]"}],
"gotoOptions": {"waitUntil": "networkidle"}
}'
Параметр Тип Описание
elements array обязательный, минимум один объект {"selector": "…"}; подходит любой CSS-селектор
url или html string адрес страницы или разметка — ровно одно из двух
остальные — общие параметры страницы: viewport, gotoOptions, waitForSelector, cookies и т. д.

Для динамических каталогов дождитесь появления элементов, иначе выборка может оказаться пустой:

{
"url": "https://shop.example.com/catalog",
"elements": [{"selector": ".product-card .price"}],
"waitForSelector": {"selector": ".product-card", "timeout": 10000},
"bestAttempt": true
}
{
"data": [
{
"selector": "h1",
"results": [
{
"html": "Example Domain",
"text": "Example Domain",
"attributes": [],
"width": 600,
"height": 38,
"top": 133,
"left": 340
}
]
},
{
"selector": "a[href]",
"results": [
{
"html": "More information...",
"text": "More information...",
"attributes": [{ "name": "href", "value": "https://www.iana.org/domains/example" }],
"width": 135,
"height": 18,
"top": 265,
"left": 340
}
]
}
],
"meta": {
"requestedUrl": "https://example.com/",
"finalUrl": "https://example.com/",
"status": 200,
"redirected": false,
"redirectChain": []
}
}

data идёт в порядке селекторов запроса. Поля каждого совпадения:

Поле Описание
html внутренний HTML элемента (innerHTML)
text текстовое содержимое (textContent)
attributes все атрибуты, массив {name, value}
width, height, top, left размер и положение элемента в пикселях (getBoundingClientRect) относительно видимой области

Селектор без совпадений даёт пустой results, а не ошибку.

Блок meta есть, когда запрос шёл по url (для html его нет):

Поле Описание
requestedUrl, finalUrl исходный и конечный адрес
status HTTP-код сайта
redirected, redirectChain были ли редиректы и их цепочка: from, to, status
botProtection {"kind": "redirect_challenge"}, если по пути встретилась и была пройдена антибот-проверка с куки — страница загрузилась, но краулеры поисковиков могут её не пройти

Те же код и адрес приходят в заголовках X-Response-Code, X-Response-Status и X-Response-URL. Ошибки загрузки — JSON с error, errorKind и code, см. ошибки Browser API.

Каждый вызов оплачивается по цене Scrape; кэша ответов нет (X-Cache: DISABLED). Цены — в таблице цен.