/v1/crawl — это Fetch, которому не нужно диктовать каждый адрес. Fetch знает ровно одну страницу: вы её назвали, он её принёс. Crawler получает начальный адрес и правило, куда идти дальше, и дальше ходит сам, пока не наберёт заказанное число страниц. Внутри обхода работает тот же браузер, что и в Fetch: настоящий Chrome, та же эмуляция устройства и страны, то же ожидание догрузки. И результат каждой страницы — ровно ответ Fetch, поле в поле:
Ничего нового разбирать не придётся: код, который уже читает ответ Fetch, читает и страницу обхода.

Два способа двигаться

Сайт со списком товаров устроен в два измерения, и обход повторяет ровно их.

next — вдоль

Селектор кнопки «следующая страница». Даёт цепочку листингов: второй, третий, четвёртый. Остаётся на своём уровне глубины — сколько бы страниц пагинации ни прошли, глубже вы не стали.

follow — вглубь

Селектор ссылок на карточки. Каждая найденная ссылка уводит на уровень глубже, и потолок этих уровней задаёт depth.
Обычная задача — «пройти каталог и забрать карточки» — это оба сразу: next листает страницы каталога, follow с каждой из них уходит в товары. Хотя бы одно из двух указать обязательно: без правила движения обход выродится в один Fetch, а за такое нечестно брать надбавку.

Когда брать Crawler, а когда Fetch

Правило простое: если адреса вы уже знаете — знать их браузеру незачем. Обход нужен ровно тогда, когда список страниц живёт внутри сайта, а не в вашем коде.

Порядок работы

1

Описать правило

POST /v1/crawl — начальный адрес, сколько страниц брать и по каким ссылкам идти. Подробно — на странице Правило обхода.
2

Получить результат или идентификатор

Маленький обход возвращает всё сразу, ответом 200. Большой отвечает 202 и идентификатором задания: держать соединение полчаса незачем.
3

Дождаться и забрать

GET /v1/crawl/{job_id} показывает ход и отдаёт страницы срезами, GET /v1/crawl/{job_id}/pages — только страницы. См. Задания.

Первый обход

Возьмём витрину, на которой всё проверяемо: books.toscrape.com. Кнопка пагинации у неё — li.next a, ссылки на карточки — .product_pod h3 a.
Восемь страниц — это меньше десяти, и ответ придёт целиком, синхронно. Где проходит граница и что делать с большим обходом — на странице Задания.

Что обход делает сам

Адреса дедуплицируются: карточка, на которую ведут ссылки с трёх страниц каталога, будет пройдена один раз и оплачена один раз. Считать это самому не нужно.
Каждая найденная ссылка проверяется на принадлежность внутренней сети. Ведущая внутрь — молча пропускается: это не ваша ошибка и не повод ронять задание, но и ходить туда браузеру нечего.
Страницы обхода забираются через прокси-выходы сервиса, по кругу, из профилей Fetch. На каждом выходе держится живой браузер, поэтому первая страница задания не ждёт старта Chrome — ни после паузы, ни после перезапуска сервиса. Подробнее — в Fetch.
Обход — работа фоновая, и очередь у неё последняя. Если в пуле браузеров нет запаса вкладок, задание ждёт, а не отнимает вкладку у синхронного запроса, за которым стоит живое соединение.
Задание живёт в хранилище, а не в памяти процесса: перезапуск сервиса его не теряет. Брошенное задание — то, чей исполнитель не вернулся, — возвращается в очередь автоматически и продолжается с того места, где остановилось.
Режим ответа — синхронный или с идентификатором — на поведение обхода не влияет. Исполнитель один и тот же, правила те же, счёт тот же. Разница только в том, ждёте вы результат в соединении или забираете позже.

Страницы раздела

Правило обхода

follow, next, depth, pages, same_site, allow и deny — что каждое значит и как их сочетать.

Задания

Два режима, статусы, опрос, постраничная выдача и отмена.

Обход с разбором

extract на каждой странице: обход возвращает готовые объекты, а не разметку.

Цена обхода

Надбавка за страницу, арифметика с примерами и почему это один запрос в лимитах.

Ошибки

Коды отказов и что делать с каждым.

Справочник

Все параметры /v1/crawl и коды ответов.