Парсер выдачи Яндекса: как собрать топ и позиции без бана
· Яндекс · парсинг
Яндекс-парсер нужен всем, кто работает с выдачей чаще пары раз в неделю: снять позиции по семантике, собрать топ-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 ₽. При регистрации начисляем 100 запросов для теста: хватает прогнать небольшой список и посмотреть на JSON вживую. Одна цена на Яндекс, Google и Bing, поиск регионов бесплатный.
Когда нужна не вся выдача, а лишь строчка вашего сайта, передайте его домен в break_domain:
парсер остановится на странице, где домен нашёлся, и спишется только за пройденные страницы, а не за все
десять. Механику с цифрами разбирает заметка про
параметр break_domain.
Частые вопросы
Законно ли парсить выдачу Яндекса?
Парсинг публичной выдачи для анализа позиций и конкурентов - обычная практика SEO, а не взлом: данные отдаёт сам поисковик, вы их не крадёте. Ограничения Яндекса касаются нагрузки и автоматизации на его стороне, поэтому съём через API, где нагрузку держит сервис, снимает и этот вопрос.
Нужны ли прокси для яндекс-парсера?
Для своего скрипта - да, причём резидентные и много. Для готового API - нет: защиту площадки сервис берёт на себя, вам приходит чистый результат по одному ключу.
Есть ли бесплатный лимит?
Да. При регистрации начисляем 100 запросов для теста, карта для этого не нужна.
Как задать город в парсере Яндекса?
Кодом региона lr. Например, Москва - 213, Санкт-Петербург - 2; полный список в
справочнике.
Проверить всё это можно без единой строки кода: вставьте список запросов на странице проверки позиций в Яндексе и посмотрите на результат, а к API вернётесь, когда захотите автоматизировать.