Параметр page: смещение выдачи и почему pages надёжнее

· парсинг · пагинация

Вопрос от пользователей повторяется: «а можно начать не с первой страницы?» Можно - параметр page для этого и есть. Но почти всегда это не та задача, которую человек на самом деле решает, и почти всегда её лучше решить параметром pages. Разберём, чем они отличаются, когда смещение действительно нужно и почему за глубиной ходить одним запросом надёжнее.

Два разных параметра

Их легко перепутать - имена отличаются одной буквой.

Вместе они задают окно выдачи. page=3&pages=5 - это страницы 3, 4, 5, 6 и 7. Без page окно всегда начинается с начала выдачи, и в подавляющем большинстве задач так и нужно.

Почему одним запросом надёжнее

Соблазн понятный: раз есть смещение, можно ходить постранично - сначала страница 0, потом 1, потом 2 - и складывать результат у себя. Так делают, когда переносят логику из интерфейса, где пагинация именно так и устроена. Но у API поисковой выдачи есть особенность, которой нет у обычного списка в базе.

Выдача динамическая. Между двумя вашими запросами поисковая система успевает пересчитать результаты: что-то поднимется, что-то опустится, что-то появится или исчезнет. Документ, стоявший десятым в первом запросе, во втором окажется одиннадцатым - и попадёт к вам дважды. Или наоборот, сдвинется вверх и не попадёт вовсе. Чем больше запросов вы склеиваете, тем заметнее расхождение.

Один запрос - один проход по выдаче. Когда вы просите pages=10, страницы собираются подряд: одна сессия сбора, одно соединение, один исходящий адрес, одни и те же параметры. Это ближе всего к тому, что увидел бы человек, листающий результаты подряд. Полной неизменности выдачи не обещает никто - поисковая система вправе пересчитать её и внутри одной сессии, - но окно между страницами тут секунды, а не столько, сколько занимает отдельный запрос с вашей стороны.

Пагинация сама по себе тоже не бесплатна. Каждый отдельный запрос - это новый заход в поисковую систему: своё соединение, своё ожидание ответа. Десять запросов по одной странице обычно идут дольше, чем один запрос на десять страниц, и сильнее нагружают ваш лимит одновременных обращений.

Цена при этом одинаковая. Тарификация постраничная: 0.01 ₽ за страницу независимо от того, забрали вы десять страниц одним запросом или десятью. Так что выигрыша в деньгах у постраничного обхода нет - только проигрыш в качестве данных и во времени.

Когда смещение действительно нужно

Случаи есть, их немного.

Общее у этих случаев одно: нужен конкретный кусок выдачи, а не сплошная глубина. Если нужна именно сплошная - берите её через pages.

Максимальная глубина: 20 страниц

Предел один на все методы - 20 страниц, то есть 200 результатов. Считается он по сумме: смещение плюс ширина окна. page=18&pages=5 просит страницы с 18-й по 22-ю, то есть глубже двадцатой, и вернёт ошибку 422 - до списания денег, а не после.

Обойти предел сменой параметра не выйдет: он одинаково считается и для page, и для параметров самих поисковых систем, о которых ниже. Двухсотый результат - последний доступный в любом сочетании.

В XML-методах глубина считается так же, просто страница там своего размера. Смещение равно page × groupby, а глубина - (page + 1) × groupby: смещение плюс сама запрошенная страница. При groupby=100 доступны страницы 0 и 1 - те же 200 результатов.

Параметры поисковых систем: p, start и first

То же смещение принимается под именами, которыми его называют сами поисковые системы. Это удобно, если вы переносите готовый код, написанный под поисковую систему напрямую.

Параметр Метод Что означает Эквивалент page=2 Максимум
p /yandex Номер страницы с нуля p=2 19
start /google Номер результата с нуля, кратный 10 start=20 190
first /bing Номер результата с единицы first=21 191

Если передать и page, и параметр поисковой системы, используется второй. Значение уходит в поисковую систему без изменений - и это единственный способ задать смещение, которое не попадает на границу страницы.

Отдельный случай: Bing

У Яндекса и Google границы страниц стоят на своих местах, и page попадает куда просили. У Bing они плавают: где закончить страницу, он решает сам.

page просит круглые границы: page=1 уходит в Bing как first=11, page=2 - как first=21, и так далее. Обычно страницы там и начинаются, так что запрос попадает примерно куда просили. Но если на странице оказалось меньше результатов, следующая начнётся, скажем, с 19-го - и page на неё уже не наведёшь, круглого числа для неё нет. Ровно на такую границу ставит только first, а само число нужно взять из ссылки «Следующая страница» в выдаче Bing.

Поэтому смещение в Bing мы не рекомендуем: точное попадание не гарантируется. Для сплошной глубины используйте pages - там пагинация идёт по ссылкам самого Bing и остаётся точной на любой глубине.

Смещение и AI-ответ несовместимы

Параметр ai=1 вместе со смещением вернёт ошибку 422. Причина простая: AI-блок поисковые системы рисуют над выдачей, на первой странице, и больше нигде. Со смещением его там нет и быть не может.

Ошибка приходит до списания денег, так что запрос с такой парой параметров ничего не стоит. Подробнее про AI-блок - в статье про парсинг AI-выдачи.

Как это выглядит в запросах

# сплошная глубина: топ-100 одним запросом, 0.1 ₽
curl "https://jsonseo.ru/api/yandex?text=купить+ноутбук&pages=10&key=ВАШ_КЛЮЧ"

# точечная проверка: только 15-я страница, 0.01 ₽
curl "https://jsonseo.ru/api/yandex?text=купить+ноутбук&page=15&pages=1&key=ВАШ_КЛЮЧ"

# то же параметром Google
curl "https://jsonseo.ru/api/google?q=купить+ноутбук&start=150&pages=1&key=ВАШ_КЛЮЧ"

Коротко

Полное описание параметров - в документации. Ключ и баланс - в личном кабинете, при регистрации на счёт падают 10 ₽, этого хватает на тысячу страниц выдачи.


Читайте дальше