Аналог XMLRiver и XMLStock для парсинга выдачи

· Яндекс XML · миграция

Если вы снимаете выдачу через XMLRiver, XMLStock, XMLProxy или XMLSeo, переезд к нам занимает примерно столько времени, сколько нужно, чтобы поменять адрес в настройках программы. Формат ответа тот же самый, параметры почти совпадают, а страница выдачи стоит 0.01 ₽. Ниже разберём, что именно менять в запросах и где сервисы всё-таки расходятся.

Почему вообще XML, а не JSON

Исторически всё выросло из Яндекс XML: официального сервиса, который отдавал выдачу в XML и раздавал лимиты по расписанию. Под этот формат написаны Key Collector, TopSite, SiteAnalyzer, KeyAssort и половина самописных парсеров рунета. Никто не станет переписывать рабочий софт ради красивого JSON, поэтому все сервисы-посредники отдают ровно ту же XML-структуру: yandexsearch → response → results → grouping → group → doc.

Мы отдаём и то, и другое. Есть /api/yandex с обычным JSON, если вы пишете свой скрипт, и /api/yandex/xml в формате Яндекс XML, если у вас уже настроен Key Collector. Ссылку с ключом для второго случая можно скопировать прямо в личном кабинете.

Что менять в запросе

Берёте свой рабочий URL и меняете адрес сервиса на наш. Дальше сверяетесь с таблицей: большинство параметров называются одинаково, потому что все они родом из того же Яндекс XML.

Что нужно XMLRiver / XMLStock JSON SEO
Авторизация user + key только key (или заголовок Authorization: Bearer)
Запрос query query, text или q
Регион Яндекса lr lr или region
Регион Google lr (XMLStock), loc (XMLRiver) region, а также loc и числовой lr
Сколько позиций groupby groupby, кратно 10, до 200
Страница page (с нуля) page (с нуля)
Доменная зона domain domain или zone (ru, com, kz, by, uz, tr)

Выглядит это так:

https://jsonseo.ru/api/yandex/xml?key=ВАШ_КЛЮЧ&query=купить+ноутбук&lr=213&groupby=50

Где мы расходимся с ними

Три момента, на которых можно споткнуться.

Параметр lr в Google. Тут единого стандарта нет вообще: у XMLStock это ID региона, а у XMLRiver код языка результатов. Мы принимаем lr как регион, только если он числовой, а язык интерфейса задаётся отдельным hl. Так работают оба сценария и ничего не ломается молча.

Глубина. У нас потолок 200 позиций за запрос: groupby=200 при page=0. Дальше двухсотой строки не уйти, но честно говоря, дальше сотой уже мало кому нужно.

Оплата пагинации. Поиск живой, воркер всегда начинает с первой страницы. Значит при page=1 он проходит и первую сотню тоже, и она тарифицируется. Вывод простой: увеличивайте groupby и держите page=0, тогда заплатите ровно за то, что забрали.

Про деньги

У нас 10 ₽ за 1000 страниц выдачи, то есть 0.01 ₽ за страницу, одна цена на Яндекс, Google, Bing и Вордстат. Пополнили баланс и тратите, пока не кончится. При регистрации на счёт падают 10 ₽, так что первую тысячу запросов можно сделать, вообще ничего не платя, и спокойно сравнить нашу выдачу со своей текущей.

Отдельно стоит знать про break_domain. Если вы снимаете не всю выдачу, а позицию конкретного сайта, передайте его домен, и парсер остановится, как только его встретит. Сайт нашёлся на второй странице? Заплатите за две, а не за десять.

Что делать прямо сейчас

  1. Зарегистрируйтесь и заберите ключ в кабинете. Там же лежит готовая XML-ссылка, её можно сразу вставить в Key Collector.
  2. Прогоните десяток своих обычных запросов и сравните выдачу с текущим сервисом. Тратятся копейки, а картина станет понятной сразу.
  3. Если что-то не сходится, посмотрите документацию: там расписаны все параметры и примеры ответов.

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