Сбор данных из поисковой выдачи (SERP) без платных сервисов

Узнайте, как собрать данные из выдачи Google и Яндекса без платных сервисов. Бесплатные инструменты и открытый код для парсинга SERP в ваших руках!

Сбор данных из поисковой выдачи (SERP) – одна из ключевых задач SEO‑аналитика, маркетолога и владельца сайта. Часто платные сервисы (SE Ranking, Ahrefs, SerpApi и др.) позволяют получить готовые отчёты, но они могут быть дорогими, а иногда достаточно собрать небольшую выборку самостоятельно. В этой статье мы разберём, как собрать данные о выдаче Google и Яндекса без привлечения платных сервисов, используя только бесплатные инструменты и открытый код.

Содержание

  1. Зачем нужен сбор SERP‑данных?
  2. Юридические и технические ограничения
  3. Бесплатные способы получения данных из Google
  4. Бесплатные способы получения данных из Яндекса
  5. Инструменты и готовые скрипты
  6. Пошаговый пример: Python‑скрипт для Google
  7. Экспорт и дальнейший анализ
  8. Лучшие практики и типичные ошибки

Зачем нужен сбор SERP‑данных?

Анализ позиции сайта в поиске позволяет оценить эффективность SEO‑кампаний, понять, какие запросы приносят трафик, и сравнить себя с конкурентами. Кроме того, данные SERP помогают:

  • Отслеживать появление новых расширенных сниппетов (карточки, быстрые ответы, блоки «Похожие запросы»).
  • Проводить конкурентный анализ – увидеть, какие страницы занимают топ‑10 у соперников.
  • Определять тренды в поиске (смена запросов, появление новых функций).
  • Автоматизировать отчётность для клиентов и руководства.

Прежде чем начинать парсинг, следует помнить о нескольких важных моментах:

  • Robots.txt – указывает, какие части сайта разрешено сканировать автоматическими средствами. Нарушение может привести к блокировке IP.
  • Большинство поисковиков (Google, Яндекс) активно борются с автоматическим скрейпингом: CAPTCHA, ограничение количества запросов, временные блокировки.
  • Использование API (Custom Search API, Yandex XML) – легальный способ получения данных, но часто имеет бесплатный лимит (например, 100 запросов в день).
  • Соблюдайте политику использования сервисов, чтобы не нарушать условия предоставления услуг.

Бесплатные способы получения данных из Google

Google Custom Search JSON API

Google предоставляет Custom Search API с бесплатным лимитом 100 запросов в сутки. Для его использования необходимо:

  1. Создать проект в Google Cloud Console.
  2. Включить «Custom Search API» и получить API‑ключ.
  3. Создать поисковый движок (CSE) и указать searchengineid.
  4. Отправлять GET‑запросы вида https://www.googleapis.com/customsearch/v1?key=API_KEY&cx=SEARCH_ENGINE_ID&q=ключевое+слово.

Ответ приходит в формате JSON, где доступны URL страниц, позиция, сниппет и тип результатов (органический, рекламный, картинка).

Scraping через requests + BeautifulSoup

Для небольших выборок можно «обмануть» Google, используя:

  • Случайные User‑Agent строки.
  • Прокси‑серверы (могут быть бесплатными, но менее надёжными).
  • Паузы между запросами (от 2 до 10 секунд).
<div class="g">
 <div class="rc">
 <h3 class="LC20lb">Заголовок страницы</h3>
 <a href="https://example.com">https://example.com</a>
 <span class="st">Сниппет текста</span>
 </div>
</div>

С помощью BeautifulSoup можно извлечь нужные элементы и сформировать CSV‑файл.

Google Sheets + IMPORTXML

Если не хочется писать код, можно воспользоваться функцией IMPORTXML в Google Таблицах:

=IMPORTXML("https://www.google.com/search?q=ключевое+слово", "//div[@class='g']//h3")

Однако Google часто меняет структуру страниц, поэтому формула может «сломаться».

Бесплатные онлайн‑инструменты

Существуют сервисы с ограниченным бесплатным доступом (например, SerpApi – 100 запросов в месяц бесплатно). Их удобно использовать для тестов и небольших проектов.

Бесплатные способы получения данных из Яндекса

Yandex XML API

Яндекс предоставляет XML API с бесплатным лимитом 1 000 запросов в сутки. Требуется:

  1. Зарегистрировать приложение в Yandex.Webmaster и получить user‑key.
  2. Сформировать запрос: https://yandex.com/search/xml?user=USER_KEY&key=API_KEY&query=ключевое+слово&lr=213 (lr – код региона).
  3. Ответ приходит в XML, из которого легко вытаскивать URL, позицию, текст сниппета.

Scraping через Selenium

Если нужен доступ к мобильной выдаче или к «жёстким» блокировкам, используйте Selenium с драйвером Chrome/Firefox. Примерный алгоритм:

  • Запуск браузера в headless‑режиме.
  • Установка случайного user‑agent и cookies (можно предварительно зайти в Яндекс и сохранить их).
  • Ожидание загрузки элементов с помощью WebDriverWait.

Google Sheets + IMPORTXML для Яндекса

Аналогично Google, в таблицах можно попытаться импортировать данные из https://yandex.ru/search/?text=ключевое+слово, но Яндекс чаще блокирует запросы из Google Таблиц.

Бесплатные CLI‑утилиты

Существует несколько открытых проектов, которые позволяют получать SERP‑данные через командную строку:

  • Google Search Scraper (GitHub) – Python‑скрипт с поддержкой прокси.
  • Yandex Search Parser (GitHub) – парсер, возвращающий JSON.

Инструменты и готовые скрипты

Ниже перечислены самые популярные бесплатные решения, которые можно сразу использовать или модифицировать под свои нужды.

Инструмент Поддерживаемые поисковики Язык/платформа Бесплатный лимит Ссылка
Google Custom Search API Google REST/JSON 100 запросов/день docs
Yandex XML API Yandex REST/XML 1 000 запросов/сутки docs
SerpApi (Free tier) Google, Yandex, Bing REST/JSON 100 запросов/мес. serpapi.com
Selenium + ChromeDriver Оба Python/JS/Java — (зависит от вашего IP) selenium.dev
requests + BeautifulSoup Оба Python — (зависит от вашего IP) bs4

Пошаговый пример: Python‑скрипт для сбора Google SERP

Требования

  • Python ≥ 3.7
  • Библиотеки: requests, beautifulsoup4, csv

Код скрипта

#!/usr/bin/env python3
import requests, random, time, csv
from bs4 import BeautifulSoup

USER_AGENTS = [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Safari/605.1.15",]
HEADERS = {"Accept-Language": "ru-RU,ru;q=0.9"}
 """Получаем HTML страницы Google Search."""
 params = {
 "q": query,
 "hl": "ru",
 "start": start, # 0, 10, 20 … – пагинация
 "num": "10"
 }
 headers = HEADERS.copy
 headers["User-Agent"] = random.choice(USER_AGENTS)
 response = requests.get("https://www.google.com/search", params=params, headers=headers, timeout=10)
 response.raise_for_status
 return response.text
 """Извлекаем URL, заголовок и сниппет из HTML.""" results = []
 for idx, block in enumerate(soup.select('div.g'), start=1):
 title_tag = block.select_one('h3')
 if not title_tag:
 continue
 link_tag = block.find_parent('a')
 url = link_tag['href'] if link_tag else ''
 snippet = block.select_one('span.st')
 snippet_text = snippet.get_text(separator=" ") if snippet else ''
 results.append({
 "position": idx,
 "title": title_tag.get_text,
 "url": url,
 "snippet": snippet_text
 })
 return results

def save_to_csv(data, filename="google_serp.csv"):
 with open(filename, "w", newline="", encoding="utf-8") as f:
 writer = csv.DictWriter(f, fieldnames=["position", "title", "url", "snippet"])
 writer.writeheader
 for row in data:
 writer.writerow(row)

def main:
 queries = [
 "купить ноутбук",
 "как вырастить помидоры"
 ]
 all_results = []
 for q in queries:
 print(f"Обрабатываем запрос: {q}") results = parse_results(html)
 for r in results:
 r["query"] = q
 all_results.extend(results)
 time.sleep(random.uniform(2, 5)) # пауза, чтобы не спровоцировать блокировку
 save_to_csv(all_results)
 print("Готово! Данные сохранены в google_serp.csv")

if __name__ == "__main__":
 main

Как работает скрипт

  1. Формирует запрос к https://www.google.com/search с нужными параметрами (q, hl=ru, start).
  2. Меняет User‑Agent на случайный, чтобы имитировать обычный браузер.
  3. Сохраняет все результаты в CSV‑файл, пригодный для дальнейшего анализа в Excel, Google Sheets и т.д.

Экспорт и дальнейший анализ

После получения CSV‑файла вы можете:

  • Импортировать данные в Google Data Studio или Power BI для визуализации.
  • Сопоставить позиции с Google Analytics (источник/медиа) и понять, какие запросы приносят реальный трафик.
  • Сравнить результаты с Google Search Console (показывает реальные клики/импрессии).
  • Создать отчёт в Excel с условным форматированием: зелёный – топ‑3, жёлтый – топ‑10, красный – ниже 30.

Лучшие практики и типичные ошибки

Лучшие практики

  • Уважайте лимиты. Если используете официальные API, не превышайте бесплатные квоты – иначе ваш ключ будет заблокирован.
  • Ротация IP. При парсинге без API используйте прокси‑пулы (например, free-proxy-list) и меняйте IP каждые 50‑100 запросов.
  • Случайные задержки. Добавляйте time.sleep(random.uniform(2, 7)) между запросами.
  • Логируйте ошибки. Записывайте коды ответов (429 – Too Many Requests, 503 – Service Unavailable) и реагируйте соответственно.

Типичные ошибки

  • Попытка собрать > 500 запросов в день без прокси – почти наверняка закончится блокировкой.
  • Парсинг «lite‑версии» Яндекса без учёта регионального параметра lr – получите результаты из Москвы вместо нужного города.
  • Игнорирование CAPTCHA. При появлении формы ввода капчи скрипт должен приостановиться и запросить ручное решение.
  • Неправильный CSS‑селектор – Google часто меняет структуру, поэтому парсер перестаёт работать. Регулярно проверяйте актуальность селекторов.

Сбор данных о поисковой выдаче без платных сервисов полностью реализуем с помощью бесплатных API (Google Custom Search, Yandex XML) и открытых инструментов (Python, Selenium, импорт в Google Sheets). Главное – соблюдать правила использования, не перегружать сервера поисковиков и правильно обрабатывать полученные данные.

Если вам требуется лишь небольшая выборка (до 100 запросов в день) – Google Custom Search API и Yandex XML API станут отличным решением. Для более масштабных задач используйте скрипты с ротацией прокси и тайм‑аутами, а полученные CSV‑файлы легко интегрировать в любые BI‑инструменты.

Помните: качественная аналитика начинается с чистых и корректных данных. Инвестируйте время в правильную настройку парсера, и ваш SEO‑арсенал будет работать без лишних расходов.