fetch и
работают ровно так же, как в обычном Fetch.
Разбор настоящего каталога
books.toscrape.com — витрина, устроенная как обычный магазин: категория,
пагинация внизу, карточки товаров. Селекторы у неё честные и проверяемые,
поэтому пример дальше можно запустить как есть.
Категория «Mystery» — 32 книги по 20 на страницу, то есть два листинга.
Кнопка пагинации — li.next a, ссылка на карточку — .product_pod h3 a.
next на второй странице
кнопки уже не найдёт, и обход закончится сам, со статусом done и
pages_done: 34.
next: вдоль пагинации
next — селектор одной ссылки: той, что ведёт на следующую страницу
списка. Обход нажимает её раз за разом, получая цепочку листингов, и
останавливается, когда селектор перестал совпадать — то есть когда кнопки
больше нет.
Важное свойство: пагинация не считается углублением. Двадцатая страница
каталога находится на том же уровне, что и первая, и depth её не
ограничивает. Ограничивает только pages.
Селектор должен указывать на ссылку — элемент с
href. Кнопка, которая
листает скриптом и адрес не меняет, обходу не годится: следующей страницы
как адреса просто не существует. Такое место — работа для
Browser API.follow: вглубь по карточкам
follow — селектор ссылок, которых на странице обычно много. Все совпавшие
адреса становятся кандидатами, каждый — на уровень глубже текущего.
depth: 0 означает «не углубляться вовсе»: follow не сработает ни разу, и
обход сведётся к пагинации. depth: 1 — значение по умолчанию и обычный
случай: листинги и карточки с них. Потолок — 5; глубже начинается обход
сайта целиком, а это другая задача и другие деньги.
pages: где остановиться
pages — не «сколько страниц найти», а потолок: сколько страниц обход
имеет право пройти. Меньше — бывает: ссылки кончились раньше. Больше — нет
никогда.
Потолок обязателен именно потому, что чужой сайт неизвестной величины: без
него ошибка в селекторе означала бы обход, который идёт, пока не кончатся
деньги. Верхняя граница — 200 страниц за задание (PARREQ_CRAWL_MAX_PAGES).
same_site: не уходить с сайта
По умолчанию true: обход остаётся на домене начального адреса. Поддомены
считаются своими — catalog.example.com и www.example.com для
example.com не чужие, потому что на живых магазинах карточки и листинги
регулярно разъезжаются по поддоменам.
same_site: false снимает ограничение целиком. Осмысленно это ровно тогда,
когда вы идёте по ссылкам наружу — например, собираете, куда ведёт
партнёрская выдача, — и обязательно вместе с allow: без него обход уйдёт в
рекламу, в соцсети и в счётчики.
allow и deny: сузить маршрут
Списки регулярных выражений, до 20 в каждом и до 200 символов каждое,
проверяются по адресу ссылки. Неразбираемое выражение отклоняется сразу,
400, а не молча не срабатывает:
allowзадан — годится только адрес, совпавший хотя бы с одним из выражений;denyзадан — адрес, совпавший хотя бы с одним выражением, отбрасывается.
same_site и с селекторами, а не вместо них:
адрес должен пройти все проверки, а не любую одну.
follow намеренно грубый — просто a, все ссылки подряд, — а отбор
делают выражения: берём только карточки товара и выбрасываем разделы и
адреса с параметрами. Так удобнее там, где у карточек нет своего класса, но
есть узнаваемый вид адреса.
В работу идут первые 20 выражений каждого списка, остальные отбрасываются. А
выражение, которое не удалось разобрать, просто не срабатывает: оно ничего не
разрешает и ничего не запрещает. Проверяйте свои выражения у себя — молча
пропущенное выражение выглядит как «фильтр не работает», и понять это по
ответу нельзя.
fetch: как брать каждую страницу
Всё, что вы обычно передаёте в /v1/fetch, живёт во вложенном объекте
fetch и применяется к каждой странице обхода: device, gl, hl,
include, wait_ms, wait_for, network_ms, scroll, start_at,
select, select_all, exclude, strip.
include тоже работают — и тоже на каждой странице.
Скриншот на обходе из ста страниц стоит четыреста кредитов сверх обхода, и
это стоит посчитать заранее: Цена обхода.
Эхо правила в ответе
Всё, с чем задание вправду пошло — с подставленными умолчаниями, — приходит обратно вcrawl_parameters:
Дальше
Задания
Что приходит в ответ, как опрашивать и как отменять.
Обход с разбором
Готовые объекты вместо разметки на каждой странице.
Тонкая настройка разметки
Что умеют
select, start_at, exclude и strip.Справочник
Все параметры
POST /v1/crawl.
