Парсер выдачи Яндекса: как собрать топ и позиции без бана
· Яндекс · парсинг
Яндекс-парсер нужен всем, кто работает с выдачей чаще пары раз в неделю: снять позиции по семантике, собрать топ-10 конкурентов под кластеризацию, проверить, кто вылез по коммерческому запросу в нужном городе. Общая механика парсинга выдачи (капча, прокси, JSON вместо HTML) разобрана в статье что такое SERP API - повторяться не буду. Здесь только про яндексовую специфику, из-за которой свой парсер под Яндекс отдельно капризничает.
Антибот Яндекса срабатывает раньше, чем у других
Яндекс защищает выдачу агрессивнее Google. Вместо старой капчи-картинки давно стоит SmartCaptcha, а подозрительный трафик режется не по одному IP, а сразу подсетями: попал в немилость один адрес из дата-центра - придержут соседние. Поэтому дешёвые серверные прокси выгорают пачками, а не по одному, и под Яндекс приходится брать резидентные, которые дороже в разы.
Второй нюанс - поведенческие сигналы. Яндекс смотрит не только на частоту запросов, но и на то, как
«пользователь» себя ведёт: есть ли куки, был ли переход, дёргает ли скрипт страницы ровными интервалами.
Голый цикл по &p=0,1,2 палится за десяток запросов. Обойти это можно, но это уже проект
с прогретыми профилями и рандомизацией, а не скрипт на вечер.
В выдаче Яндекса не только органика
Главная ловушка самописного парсера - считать позицию по всем блокам подряд. Выдача Яндекса напичкана не-органикой: спецразмещение Директа сверху и снизу, колдунщики (быстрые ответы, картинки, карты), карточки Яндекс Услуг и Яндекс Бизнеса, товарная галерея. Если наивно нумеровать все ссылки сверху вниз, ваш сайт на «третьем месте» окажется на самом деле первым в органике - под ним просто два рекламных блока.
Из-за этого позиции «плавают»: сегодня Директ выкупил спецразмещение, завтра нет, и номер вашей строки меняется, хотя в органике ничего не двигалось. Готовый парсер отделяет органику от рекламы и колдунщиков заранее, и вы сравниваете сопоставимые числа. Наш ответ по Яндексу отдаёт органическую выдачу отдельным массивом, так что позиция считается по ней, а не по рекламе.
Регион lr - половина точности
Выдача Яндекса зависит от города сильнее, чем кажется. По коммерческому запросу Москва и Екатеринбург
покажут почти не пересекающиеся топы. Регион задаётся кодом lr (Ленинград-регион, историческое
название параметра), и это тот же самый код, что использует Яндекс XML. Нужный номер города берётся из
справочника регионов. Работаете не по yandex.ru,
а по Беларуси, Казахстану или Турции - доменная зона (by, kz,
com.tr) задаётся отдельным параметром. Почему без фиксированного региона график позиций
превращается в шум, подробно в заметке про
проверку позиций по регионам.
Если стоит Key Collector или софт под Яндекс XML
Многие инструменты (Key Collector, TopSite, SiteAnalyzer) умеют забирать выдачу только в формате Яндекс XML и упираются в его суточные лимиты. Переписывать их не нужно: та же выдача Яндекса отдаётся и в XML-формате, совместимом с этими программами. Вставляете ссылку из кабинета в настройки XML - и софт парсит Яндекс как привыкли, но без лимитов и капч аккаунта. Как переехать с XMLRiver, XMLStock и подобных без переделки, расписано в статье про аналог XMLRiver и XMLStock.
Сколько это стоит и как не переплатить
Страница выдачи стоит 0.01 ₽, тысяча страниц - 10 ₽. При регистрации на баланс падает 10 ₽, то есть первая тысяча страниц бесплатная: хватает прогнать свою семантику и посмотреть на JSON вживую. Одна цена на Яндекс, Google и Bing, поиск регионов бесплатный.
Когда нужна не вся выдача, а лишь строчка вашего сайта, передайте его домен в break_domain:
парсер остановится на странице, где домен нашёлся, и спишется только за пройденные страницы, а не за все
десять. Механику с цифрами разбирает заметка про
параметр break_domain.
Частые вопросы
Законно ли парсить выдачу Яндекса?
Парсинг публичной выдачи для анализа позиций и конкурентов - обычная практика SEO, а не взлом: данные отдаёт сам поисковик, вы их не крадёте. Ограничения Яндекса касаются нагрузки и автоматизации на его стороне, поэтому съём через API, где нагрузку держит сервис, снимает и этот вопрос.
Нужны ли прокси для яндекс-парсера?
Для своего скрипта - да, причём резидентные и много. Для готового API - нет: прокси, капча и ротация уже на стороне сервиса, вам приходит чистый результат по одному ключу.
Есть ли бесплатный лимит?
Да. Стартовые 10 ₽ на балансе - это 1000 страниц выдачи бесплатно, карта для регистрации не нужна.
Как задать город в парсере Яндекса?
Кодом региона lr. Например, Москва - 213, Санкт-Петербург - 2; полный список в
справочнике.
Проверить всё это можно без единой строки кода: вставьте список запросов на странице проверки позиций в Яндексе и посмотрите на результат, а к API вернётесь, когда захотите автоматизировать.