Webparser — это инструмент, который позволяет ИИ по запросу загрузить и прочитать веб-страницу обычным HTTP-запросом, примерно как это сделал бы curl. Он подходит, когда нужная страница отдаётся сервером целиком и данные уже лежат в пришедшем HTML. Быстро (обычно 200–800 мс) и дёшево — не нужно поднимать браузер.
Webparser или Webscraper — что выбрать?
- Webparser (эта статья) — обычный HTTP-запрос. Берите, если данные видны в исходном коде страницы. Примеры: документация, страницы статуса, простые таблицы с ценами, посты в блоге.
- Webscraper — полноценный headless-Chromium с выполнением JavaScript. Берите, если страница — это JavaScript-приложение и данные появляются только после выполнения скриптов. См. Как создать интеграцию Webscraper.
Начинайте с парсера. Если в исходном коде нужной страницы видны нужные данные, парсера достаточно — и он в десять раз быстрее скрейпера.
Шаг 1 — Добавьте инструмент типа «скрейпинг»
Webparser и Webscraper — это один тип инструмента; отличает их только флаг рендеринга JavaScript. Откройте Проекты → ваш проект → Интеграции, выберите (или создайте) любую интеграцию, нажмите + Добавить инструмент и задайте:
- Тип инструмента — Скрейпинг веб-страницы.
- Название функции — например,
fetch_status_page. - Описание (показывается AI) — одна фраза о том, когда его вызывать. Именно по ней ИИ принимает решение.
- Рендерить JavaScript — оставьте выключенным.
- Разрешённые домены — список хостов через запятую, к которым инструменту можно обращаться, например
status.example.com, docs.example.com. Это проверяется жёстко — всё, чего нет в списке, отклоняется ещё до отправки запроса.
Шаг 2 — Сузьте выборку CSS-селектором (необязательно)
По умолчанию инструмент возвращает очищенный текст всей страницы (не больше 16 КБ). Для длинных страниц можно указать CSS-селектор, и тогда вернётся только текст подходящих элементов:
.status-summary, main article, #pricing-tableРаботает всё, что умеет CSS, а несколько селекторов через запятую обрабатываются независимо — их текст склеивается, так что .summary, .details вернёт оба блока. Если селектор не нашёл ничего, инструмент не откатывается на всю страницу — ИИ получает сообщение «No content found matching selector». (Одна поблажка есть: простое слово вроде order-status автоматически пробуется ещё раз как селектор класса .order-status.) После правки селектора всегда нажимайте Тест — в предпросмотре видно ровно то, что увидит ИИ, и сколько элементов совпало, так что промах селектора заметен сразу, ещё до выхода в бой.
Как исключить части страницы
Селектор выбирает, какие элементы читать, а не что пропустить внутри них. Поэтому если вы выбрали обёртку статьи, а внутри неё оказались меню, баннер про куки или блок «похожие записи», весь этот текст приедет вместе с ней. Такие блоки перечислите в поле Исключить, по одному селектору в строке:
.site-nav
.cookie-banner
.related-postsИсключённые элементы удаляются со страницы до того, как отработает основной селектор, поэтому выбранный блок сохраняет структуру и просто теряет лишнее. По одному в строке, а не через запятую, потому что в самом CSS-селекторе запятые тоже бывают.
Возникает соблазн сделать то же самое через :not() прямо в основном селекторе. Это поддерживается, но работает на уровне того, какие элементы попадут в выборку, а не какие потомки внутри них уцелеют, — блок распадается на куски, а вложенные элементы начинают дублировать свой текст. Поле «Исключить» делает именно то, что вы имеете в виду.
Одна тонкость: если правило исключения совпадёт с предком того, что вы выбирали, оно уберёт и вашу цель. Chatonio прямо об этом сообщает, а не просто возвращает пустой результат.
Шаг 3 — Проверьте
Нажмите Тест в строке инструмента. Вставьте реальный URL из списка разрешённых доменов. Кроме извлечённого текста вы увидите, сколько элементов совпало с селектором и сколько удалили правила исключения, — благодаря этому подбор селектора превращается из гадания в обычную итерацию.
Возвращает до 4 000 символов предпросмотра, чтобы вы могли убедиться, что именно увидит ИИ. Это более старый маршрут только для скрейпинга, он по-прежнему работает; кнопка Тест теперь использует общий эндпоинт /tools/{tool_id}/test/, который обслуживает и скрейпинг, и API-инструменты.
Запрос
{
"url": "https://status.example.com/incidents/latest"
}Ответы
{
"success": true,
"detail": "Fetched in 412 ms",
"preview": "All systems operational..."
}{
"success": false,
"detail": "Domain not in allowed list"
}Как это выглядит в диалогах
ИИ вызывает парсер сам, когда вопрос клиента совпадает с описанием инструмента, — подсказывать не нужно. Загруженный текст попадает прямо в контекст модели, поэтому ответ всегда опирается на то, что реально было на странице в момент обращения, а не на устаревшие знания модели.
Ограничения и советы
- Вывод ограничен 16 КБ. Очень длинные страницы обрезаются — CSS-селектор сильно помогает.
- Жёсткий таймаут — 15 секунд; воркер прервёт запрос и вернёт ИИ ошибку, а не зависнет.
- Только публичные хосты — принимаются адреса
http://иhttps://(любая другая схема отклоняется), а защита от SSRF блокирует loopback и адреса приватных сетей. - Свои HTTP-заголовки пока нельзя задать из панели. Скрейпер представляется собственным
User-Agent, и отдельного поля для заголовков у инструмента в интерфейсе нет. Если страница требует особый заголовок, напишите в поддержку — или заведите вместо этого полноценную API-интеграцию, где авторизация настраивается. - Если страница закрыта логином, инструмент её не увидит. Заводите такие данные за настоящей API-интеграцией.
- Запросы идут с фиксированного адреса
64.7.198.218. Если ваш сайт стоит за WAF или ограничителем, который проверяет незнакомые IP, добавьте его в список разрешённых.