Шаблоны
Переиспользуемые сценарии скрейпинга, обхода и поиска с переменными и своей логикой.
Введение
Шаблоны — это переиспользуемые настройки для скрейпинга, обхода или поиска. Вместо повторения одних и тех же опций в каждом вызове API вы один раз задаёте их в шаблоне (или берёте шаблон из AnyCrawl Template Store) и ссылаетесь на него через template_id.
Преимущества:
- Простота: вызовы API только с
template_idи минимальными полями - Единообразие: одинаковое поведение в команде и проектах
- Безопасность: шаблоны могут ограничивать домены и открывать только нужные переменные
- Гибкость: опциональные обработчики для сложных преобразований
Поддерживаемые типы:
scrape: одна страница через/v1/scrapecrawl: многостраничный обход через/v1/crawlsearch: результаты поиска через/v1/search
Витрина шаблонов
Готовые шаблоны: anycrawl.dev/template.
Как пользоваться:
- Найдите подходящий шаблон на витрине
- Скопируйте
template_idсо страницы шаблона - Вызывайте API с этим
template_idи нужными полями
Пример:
curl -X POST "https://api.anycrawl.dev/v1/scrape" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"template_id": "content-extractor",
"url": "https://example.com"
}'Шаблоны в вызовах API
Параметры запроса
При использовании template_id разрешены только минимальные поля:
| Endpoint | Required Field | Optional Fields |
|---|---|---|
/v1/scrape | template_id | url, variables |
/v1/crawl | template_id | url, variables |
/v1/search | template_id | query, variables |
Важно:
urlилиqueryмогут быть необязательны, если заданы в шаблоне. Смотрите описание шаблона.variablesпередаёт динамические входы, которые ожидает шаблон (см. раздел Variables).- Остальные поля (
engine,formats,timeoutи т.д.) берутся из шаблона и переопределить их нельзя. - Лишние поля дают ошибку валидации 400.
Scrape с шаблоном
curl -X POST "https://api.anycrawl.dev/v1/scrape" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"template_id": "my-scrape-template",
"url": "https://example.com",
"variables": { "category": "tech" }
}'Crawl с шаблоном
curl -X POST "https://api.anycrawl.dev/v1/crawl" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"template_id": "my-crawl-template",
"url": "https://docs.example.com",
"variables": { "maxPages": 50 }
}'Search с шаблоном
curl -X POST "https://api.anycrawl.dev/v1/search" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"template_id": "my-search-template",
"query": "machine learning tutorials",
"variables": { "lang": "en" }
}'Variables
Шаблоны могут объявлять variables для динамических входов при вызове.
- У каждой переменной есть
type:string,number,booleanилиurl - Переменные могут быть
requiredили необязательными сdefaultValue - Список переменных смотрите в описании шаблона
Пример запроса с variables:
{
"template_id": "blog-scraper",
"url": "https://example.com/blog/post-123",
"variables": {
"author": "john-doe",
"includeComments": true,
"maxComments": 50
}
}Если пропустить обязательную переменную или передать неверный тип — будет ошибка валидации 400.
Формат ответа
Ответы с шаблонами совпадают с обычными вызовами API:
{
"success": true,
"data": {
"url": "https://example.com",
"markdown": "# Page Title\n\nContent...",
"metadata": { ... },
// Additional fields from custom handlers (if any)
"extractedData": { ... }
}
}Шаблоны с custom handlers могут добавлять дополнительные поля.
Обработка ошибок
Типичные ошибки при шаблонах:
| Error | HTTP Status | Описание |
|---|---|---|
| Template not found | 404 | template_id отсутствует или нет доступа |
| Validation error | 400 | Нет обязательных переменных или неверные типы |
| Domain restriction violation | 403 | URL не разрешён политикой домена шаблона |
| Invalid fields | 400 | Лишние поля верхнего уровня при использовании шаблонов |
Пример ответа с ошибкой:
{
"success": false,
"error": "Validation error",
"message": "When using template_id, only template_id, url, variables are allowed. Invalid fields: engine, formats",
"data": {
"type": "validation_error",
"issues": [
{
"field": "engine",
"message": "Field 'engine' is not allowed when using template_id",
"code": "invalid_field"
}
],
"status": "failed"
}
}Рекомендации
Для вызывающих API
- Проверяйте описание шаблона: обязательные переменные, домены и ключевые слова
- По возможности используйте шаблоны с витрины
- Обрабатывайте 404 (шаблон удалён или архивирован)
- Не пытайтесь переопределять настройки шаблона (
engine,formatsи т.д.) — запрос не пройдёт
Для авторов шаблонов
- Один шаблон — один сценарий
- Документируйте все variables
- Ограничивайте домены от злоупотреблений
- Выставляйте цену в кредитах по сложности
- Тестируйте перед публикацией
Создание шаблонов (продвинутый уровень)
При создании своих шаблонов можно настроить:
Ограничения по доменам
Где разрешено использовать шаблон:
{
"allowedDomains": {
"type": "glob",
"patterns": ["*.example.com", "docs.mysite.com"]
}
}type:"exact"или"glob"patterns: массив доменов или шаблонов
Ограничения по ключевым словам (поисковые шаблоны)
Какие запросы разрешены:
{
"allowedKeywords": {
"type": "glob",
"patterns": ["*tutorial*", "*documentation*"]
}
}allowedKeywordsпроверяется до выполнения запросаtype:"exact"или"glob"patterns: допустимые значения/шаблоны- Проверка запроса выполняется до
queryTransform
Ценообразование
Стоимость в кредитах за вызов:
{
"pricing": {
"perCall": 10,
"currency": "credits"
}
}Custom Handlers
Код на JavaScript/TypeScript:
requestHandler: постобработка результата скрейпа и свои поляfailedRequestHandler: своя логика при ошибках и повторахqueryTransform(только search): преобразование запроса перед поискомurlTransform(scrape/crawl): преобразование URL перед обработкой
Оба transform поддерживают:
- Режим с плейсхолдерами (query:
{{query}}, url:{{url}}) - Режим append с
prefixиsuffix - Опционально
regexExtractдля выделения подстроки до применения режима
Пример regex для профилей TikTok:
{
"customHandlers": {
"urlTransform": {
"enabled": true,
"mode": "append",
"prefix": "",
"suffix": "",
"regexExtract": {
"pattern": "^(https?:\\/\\/www\\.tiktok\\.com\\/@[^\\/?#]+)",
"flags": "i",
"group": 1
}
}
}
}Из таких входов извлекается https://www.tiktok.com/@piperrockelle:
https://www.tiktok.com/@piperrockelle?abb=ccchttps://www.tiktok.com/@piperrockelle
Пример requestHandler:
// Extract structured data from page context
const title = context.data.title;
const content = context.data.markdown;
return {
extractedTitle: title,
wordCount: content.split(/\s+/).length,
customMetric: calculateMetric(content),
};Модель безопасности
- Недоверенные шаблоны: изолированная песочница VM с жёсткими ограничениями
- Доверенные шаблоны: async-функции с контролируемым доступом к странице браузера
Пометку trusted получают только шаблоны, проверенные AnyCrawl.
FAQ
Можно ли переопределить engine или formats?
Нет. Шаблон — неизменяемая конфигурация. Разрешены только url/query и variables.
Что с шаблоном с витрины?
Они публичные; вы платите кредиты по тарифу автора.
Видят ли шаблоны мой API-ключ?
Нет. Шаблоны выполняются в изоляции без доступа к учётным данным.
Как создать свой шаблон?
Используйте песочницу AnyCrawl для создания и тестов. После публикации шаблон доступен через API.