Как собирать данные Google Maps с помощью Python

Последнее обновление: April 30, 2026

Если вы когда-либо пытались собрать целевой список для продаж, изучить новые рынки или сравнить конкурентов, вы знаете, что Google Maps — это настоящая золотая жила. Но вот главный аргумент: более 1,5 миллиарда поисков «рядом со мной» каждый месяц и 76% пользователей локального поиска посещают бизнес в течение 24 часов () — спрос на актуальные данные о компаниях, привязанных к локации, никогда не был таким высоким.

Независимо от того, работаете ли вы в продажах, маркетинге или операционной деятельности, извлечение структурированных данных из Google Maps может решить, будет ли ваш звонок холодным или превратится в тёплый лид с высокой конверсией.

Я много лет работаю в SaaS и автоматизации и своими глазами видел, как команды используют Python (а теперь и инструменты на базе ИИ, такие как ), чтобы превратить Google Maps в стратегический актив.

В этом руководстве я пошагово разберу, как в 2026 году собирать данные Google Maps с помощью Python — с кодом, советами по соблюдению правил и сравнением с no-code-решениями. Если вы опытный Python-разработчик или просто хотите получить рабочие данные как можно быстрее, вы по адресу.

Что значит собирать данные Google Maps с помощью Python?

Начнём с основ: сбор данных Google Maps с помощью Python — это программное извлечение информации о компаниях, такой как названия, адреса, рейтинги, отзывы, номера телефонов и координаты, чтобы потом анализировать, фильтровать и выгружать её для бизнеса.

city-data-tablet-connection.webp

Сделать это можно двумя основными способами:

  1. Google Maps Places API: официальный и лицензированный способ. Вы используете API-ключ, отправляете запросы к серверам Google и получаете структурированные JSON-данные. Это стабильно, предсказуемо и в целом соответствует правилам, но есть квоты и стоимость.
  2. Веб-скрейпинг HTML: вы автоматизируете браузер с помощью инструментов вроде Playwright или Selenium, загружаете Google Maps, выполняете поиск и разбираете отрендеренную страницу. Это гибче, но хрупко: Google часто меняет структуру сайта, а сбор HTML может нарушать условия использования Google.

Типичные поля данных, которые можно извлечь:

  • Название компании
  • Категория/тип
  • Полный адрес (плюс город, штат, почтовый индекс, страна)
  • Широта и долгота
  • Номер телефона
  • URL сайта
  • Рейтинг и количество отзывов
  • Уровень цен
  • Статус компании (открыто/закрыто)
  • Часы работы
  • Place ID (уникальный идентификатор Google)
  • URL Google Maps

Почему это важно? Потому что эти поля лежат в основе всего: от лидогенерации и планирования территорий до анализа конкурентов и исследования рынка. Главное — извлекать именно те данные, которые нужны вашему бизнесу, а не собирать всё подряд.

Почему команды продаж и маркетинга извлекают данные из Google Maps с помощью Python

Перейдём к практике. Почему в 2026 году так много команд продаж и маркетинга одержимы данными Google Maps?

  • Лидогенерация: создавайте сверхточные списки локальных компаний с контактами и рейтингами для outreach-кампаний.
  • Планирование территорий: разбивайте зоны продаж, доставки или обслуживания на основе реальной плотности и типов бизнеса.
  • Мониторинг конкурентов: отслеживайте расположение, рейтинги и отзывы конкурентов во времени, чтобы находить тренды и возможности.
  • Исследование рынка: анализируйте категории бизнеса, часы работы и тональность отзывов, чтобы принимать решения по выходу на рынок.
  • Выбор локации: в недвижимости и ритейле оценивайте потенциальные точки по близлежащей инфраструктуре, пешеходному трафику и конкуренции.

Реальное влияние: согласно , 92% отделов продаж планируют увеличивать инвестиции в ИИ и данные, а команды, использующие таргетированные локальные данные, показывают конверсию до 8 раз выше, чем те, кто полагается на обычные холодные списки (). Одно исследование по лидогенерации для франшиз показало $15 новой выручки на каждый $1, потраченный на списки лидов на основе Google Maps.

Как связать бизнес-цели с полями Google Maps:

Бизнес-цельНужные поля Google Maps
Локальный список лидовname, address, phone, website, category
Планирование территорийname, lat/lng, business_status, opening_hours
Бенчмаркинг конкурентовname, rating, userRatingCount, priceLevel, reviews
Выбор локацииcategory, lat/lng, review density, openingDate
Анализ тональности/менюreviews, editorialSummary, photos, types
Outreach по email/телефонуnationalPhoneNumber, websiteUri (затем при необходимости обогащайте)

Настройка Python-скрейпера для Google Maps: инструменты и требования

Прежде чем начать сбор данных, нужно настроить Python-среду и подготовить нужные инструменты. Вот что потребуется в 2026 году:

1. Установите Python и нужные библиотеки

Рекомендуемая версия Python: 3.10 или новее.

Установите ключевые библиотеки:

1pip install \
2  requests==2.33.1 httpx==0.28.1 \
3  beautifulsoup4==4.14.3 lxml==6.0.3 \
4  pandas==2.3.3 \
5  selenium==4.43.0 playwright==1.58.0 \
6  googlemaps==4.10.0 google-maps-places==0.8.0 \
7  schedule==1.2.2 APScheduler==3.11.2 \
8  python-dotenv==1.2.2 tenacity==9.1.4
9playwright install chromium

Что они делают:

  • requests, httpx: HTTP-запросы (вызовы API)
  • beautifulsoup4, lxml: разбор HTML (для веб-скрейпинга)
  • pandas: очистка, анализ и экспорт данных
  • selenium, playwright: автоматизация браузера (для HTML-скрейпинга)
  • googlemaps, google-maps-places: клиенты Google Maps API
  • schedule, APScheduler: планирование задач
  • python-dotenv: безопасная загрузка API-ключей из файлов .env
  • tenacity: повторные попытки и обработка ошибок

2. Получите API-ключ Google Maps (для скрейпинга через API)

  • Перейдите в .
  • Создайте проект или выберите существующий.
  • Включите биллинг (это требуется даже для бесплатного уровня).
  • Включите “Places API (New)” в разделе APIs & Services > Library.
  • Перейдите в Credentials > Create Credentials > API Key.
  • Ограничьте ключ нужными API и IP-адресами для безопасности.
  • Сохраните API-ключ в файле .env (никогда не добавляйте его в код):
1GOOGLE_MAPS_API_KEY=your_actual_api_key_here

Примечание: по состоянию на март 2025 года Google больше не предоставляет универсальный кредит $200 в месяц. Вместо этого для каждого API-уровня действуют бесплатные ежемесячные пороги (см. ).

Как извлекать данные из Google Maps с помощью Python: пошаговое руководство

Разберём оба основных подхода — через API и через HTML-скрейпинг — чтобы вы могли выбрать подходящий вариант.

Подход 1: использование Google Maps Places API (рекомендуется)

Шаг 1: установите и импортируйте нужные библиотеки

1import os
2import httpx
3import pandas as pd
4from dotenv import load_dotenv

Шаг 2: безопасно загрузите API-ключ

1load_dotenv()
2API_KEY = os.environ["GOOGLE_MAPS_API_KEY"]

Шаг 3: сформируйте поисковый запрос

Для поиска компаний, подходящих под ваши критерии, вы будете использовать endpoint Text Search.

1URL = "https://places.googleapis.com/v1/places:searchText"
2FIELD_MASK = ",".join([
3    "places.id", "places.displayName", "places.formattedAddress",
4    "places.location", "places.rating", "places.userRatingCount",
5    "places.priceLevel", "places.types",
6    "places.nationalPhoneNumber", "places.websiteUri",
7    "nextPageToken",
8])

Шаг 4: отправьте API-запрос

1def text_search(query, lat, lng, radius=3000, min_rating=4.0):
2    body = {
3        "textQuery": query,
4        "minRating": min_rating,  # фильтр на стороне сервера
5        "includedType": "restaurant",
6        "openNow": False,
7        "pageSize": 20,
8        "locationBias": {
9            "circle": {
10                "center": {"latitude": lat, "longitude": lng},
11                "radius": radius,
12            }
13        },
14    }
15    headers = {
16        "Content-Type": "application/json",
17        "X-Goog-Api-Key": API_KEY,
18        "X-Goog-FieldMask": FIELD_MASK,  # Всегда указывайте это!
19    }
20    r = httpx.post(URL, json=body, headers=headers, timeout=30)
21    r.raise_for_status()
22    return r.json()

Шаг 5: обработайте пагинацию и соберите результаты

1def collect_all_results(query, lat, lng, radius=3000, min_rating=4.0):
2    results = []
3    next_page_token = None
4    while True:
5        data = text_search(query, lat, lng, radius, min_rating)
6        places = data.get('places', [])
7        results.extend(places)
8        next_page_token = data.get('nextPageToken')
9        if not next_page_token:
10            break
11    return results

Шаг 6: экспортируйте данные с помощью Pandas

1df = pd.DataFrame(collect_all_results("coffee shops in Brooklyn", 40.6782, -73.9442))
2df.to_csv("brooklyn_coffee_shops.csv", index=False)

Полезные советы:

  • Всегда задавайте заголовок X-Goog-FieldMask, чтобы контролировать расходы. Если запрашивать отзывы или фотографии, цена за 1 000 запросов может вырасти с $5 до $25 ().
  • Используйте фильтры на стороне сервера, например minRating, includedType, locationBias, чтобы не тратить кредиты на нерелевантные результаты.
  • Кэшируйте значения place_id для дедупликации и будущих обновлений.

Подход 2: веб-скрейпинг HTML Google Maps (для учебных целей или разовых задач)

Предупреждение: Google Maps — это одностраничное приложение. Вам понадобится автоматизация браузера (Playwright или Selenium), а сбор HTML может нарушать условия Google. Используйте этот способ для исследований, а не для продакшена.

Шаг 1: установите Playwright и запустите браузер

1from playwright.sync_api import sync_playwright
2import time, re
3def scrape_maps(query, max_results=100):
4    with sync_playwright() as pw:
5        browser = pw.chromium.launch(headless=True)
6        ctx = browser.new_context(
7            user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
8            locale="en-US",
9        )
10        page = ctx.new_page()
11        page.goto("https://www.google.com/maps", timeout=60_000)
12        page.fill("#searchboxinput", query)
13        page.click('button[aria-label="Search"]')
14        page.wait_for_selector('div[role="feed"]')
15        feed = page.locator('div[role="feed"]')
16        prev = 0
17        while True:
18            feed.evaluate("el => el.scrollBy(0, el.scrollHeight)")
19            time.sleep(2)
20            count = page.locator('div[role="feed"] > div > div[jsaction]').count()
21            if count == prev or count >= max_results:
22                break
23            prev = count
24            if page.locator("text=You've reached the end of the list").count():
25                break
26        rows = []
27        cards = page.locator('div[role="feed"] > div > div[jsaction]')
28        for i in range(cards.count()):
29            c = cards.nth(i)
30            name = c.locator("div.fontHeadlineSmall").inner_text() if c.locator("div.fontHeadlineSmall").count() else ""
31            rating_el = c.locator('span[role="img"]').first
32            raw = rating_el.get_attribute("aria-label") if rating_el.count() else ""
33            m = re.search(r"([\d.]+)\s+stars?\s+([\d,]+)\s+Reviews", raw or "")
34            rating  = float(m.group(1)) if m else None
35            reviews = int(m.group(2).replace(",", "")) if m else None
36            rows.append({"name": name, "rating": rating, "reviews": reviews})
37        browser.close()
38        return rows

Советы:

  • Google случайным образом меняет CSS-классы каждые несколько недель, поэтому этот код может требовать регулярного обновления.
  • Используйте человеческие задержки и не скрейпьте слишком быстро, чтобы снизить риск блокировки.
  • Никогда не пытайтесь обходить CAPTCHA или систему SearchGuard Google — это может привести к юридическим рискам.

Не скрейпите вслепую: как точно нацелиться на нужные данные

Собирать всё подряд — верный способ потратить время и получить раздутый датасет. Вот как извлекать только действительно важные данные:

  • Генерируйте целевые списки URL: используйте собственные фильтры поиска Google Maps (категория, локация, рейтинг, открыто сейчас), чтобы сузить результаты до скрейпинга.
  • Используйте поиск по фразе: ищите точные типы бизнеса или ключевые слова, например “vegan bakery in Austin”.
  • Фильтры по локации: указывайте город, район или даже координаты и радиус для точности.
  • Фильтрация на стороне сервера (API): используйте minRating, includedType и locationBias в теле запроса к API.
  • Фильтрация на стороне клиента (Python): после сбора данных используйте pandas, чтобы оставить компании с рейтингом выше 4.0, более чем 50 отзывами или определёнными категориями.

Пример: оставить только рестораны на Манхэттене с рейтингом выше 4.0

1df = pd.DataFrame(results)
2filtered = df[(df['rating'] >= 4.0) & (df['types'].apply(lambda x: 'restaurant' in x))]
3filtered.to_csv("manhattan_top_restaurants.csv", index=False)

Как с помощью библиотек Python организовать и экспортировать данные Google Maps

Когда данные собраны, пора очистить их, проанализировать и передать команде.

Очистка и структурирование данных с помощью Pandas

1import pandas as pd
2df = pd.read_json("brooklyn_restaurants.json")
3df = (
4    df.dropna(subset=["name", "address"])
5      .drop_duplicates(subset=["place_id"])
6      .assign(
7          name=lambda d: d["name"].str.strip(),
8          phone=lambda d: d["phone"].astype(str)
9              .str.replace(r"\D", "", regex=True)
10              .str.replace(r"^1?(\d{10})$", r"+1\1", regex=True),
11          rating=lambda d: pd.to_numeric(d["rating"], errors="coerce"),
12          user_ratings_total=lambda d: pd.to_numeric(
13              d["user_ratings_total"], errors="coerce"
14          ).fillna(0).astype("int32"),
15      )
16)

Анализ и сводка данных

Пример: средний рейтинг по районам

1by_neighborhood = (
2    df.groupby("neighborhood", as_index=False)
3      .agg(avg_rating=("rating", "mean"),
4           n_places=("place_id", "nunique"),
5           median_reviews=("user_ratings_total", "median"))
6      .sort_values("avg_rating", ascending=False)
7)

Экспорт в Excel или CSV

1df.to_csv("brooklyn_top.csv", index=False)
2df.to_excel("brooklyn_top.xlsx", index=False, sheet_name="Top Rated")

Большой датасет? Используйте формат Parquet для скорости и экономии места:

1df.to_parquet("brooklyn_top.parquet", compression="zstd")

Thunderbit: альтернатива Python-скрейперу Google Maps на базе ИИ

Если вы думаете: «Для простого списка лидов это слишком много настройки», вы не одиноки. Именно поэтому мы создали — no-code веб-скрейпер на базе ИИ, который позволяет извлекать данные из Google Maps (и не только) буквально за пару кликов.

Почему Thunderbit?

  • Не нужен код и API-ключи: просто откройте , перейдите в Google Maps и нажмите “AI Suggest Fields”.
  • Определение полей с помощью ИИ: ИИ Thunderbit читает страницу и предлагает нужные столбцы — название, адрес, рейтинг, телефон, сайт и многое другое.
  • Сбор со вложенных страниц: хотите обогатить таблицу данными с сайта каждой компании? Thunderbit может автоматически заходить на вложенные страницы и подтягивать дополнительные сведения.
  • Экспорт в Excel, Google Sheets, Airtable или Notion: больше не нужно возиться с pandas — просто нажмите “Export”, и данные готовы для команды.
  • Планируемый сбор: настройте повторяющиеся задачи, чтобы отслеживать конкурентов или автоматически обновлять список лидов.
  • Никакого обслуживания: ИИ Thunderbit адаптируется к изменениям сайта, так что вам не придётся постоянно чинить сломанные скрипты.

google-maps-restaurant-scraper.webp

Сравнение рабочего процесса Thunderbit и Python:

ШагPython-скрейперThunderbit
Установка инструментов30–60 мин (Python, pip, библиотеки)2 мин (расширение Chrome)
Настройка API-ключа10–30 мин (Cloud Console)Не требуется
Выбор полейРучной код, field masksAI Suggest Fields (1 клик)
Извлечение данныхНаписать/запустить скрипт, обработать ошибкиНажать “Scrape”
Экспортpandas в CSV/ExcelЭкспорт в Excel/Sheets/Notion
ПоддержкаРучные обновления при изменениях сайтаИИ автоматически адаптируется

Бонус: Thunderbit доверяют более , а бесплатный тариф позволяет без оплаты собирать до 6 страниц (или 10 с пробным бустом).

Соблюдение правил: условия использования Google Maps и этика скрейпинга

Вот где большинство Python-руководств уже опасно устарели. Что нужно знать в 2026 году:

  • Google Maps Platform ToS §3.2.3 строго запрещает скрейпинг, кэширование или экспорт данных вне официальных API (). Единственное исключение: координаты широты/долготы можно кэшировать до 30 дней; Place IDs можно хранить бессрочно.
  • Пользователи API связаны договором: если вы используете API-ключ, значит согласились с условиями Google — даже если собираете только публичные данные.
  • Обход технических барьеров (CAPTCHA, SearchGuard) теперь может считаться нарушением DMCA §1201, что влечёт уголовную ответственность ().
  • GDPR и законы о конфиденциальности: если вы собираете персональные данные (emails, телефоны, имена авторов отзывов) из Google Maps, у вас должно быть законное основание, и вы обязаны выполнять запросы на удаление. Французский CNIL оштрафовал KASPR на €200 000 в 2024 году за сбор контактов LinkedIn ().
  • Лучшие практики:
    • По возможности по умолчанию используйте Places API.
    • Ограничивайте частоту запросов (≤10 QPS для API, 1–2 запроса/с для HTML-скрейпинга).
    • Никогда не обходите CAPTCHA или технические блокировки.
    • Не распространяйте собранные персональные данные.
    • Соблюдайте запросы на отказ и удаление данных.
    • Всегда проверяйте местные законы — GDPR, CCPA и другие реально применяются.

Итог: если для вас важна комплаенс-безопасность, оставайтесь на API и минимизируйте объём собираемых данных. Для большинства бизнес-пользователей no-code-инструмент вроде Thunderbit снижает риски (не нужен API-ключ, нет перепубликации данных).

Планирование и автоматизация сбора данных Google Maps с помощью Python

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

Простое планирование с schedule

1import schedule, time
2from my_scraper import run_job
3schedule.every().day.at("03:00").do(run_job, query="restaurants in Brooklyn")
4schedule.every(6).hours.do(run_job, query="coffee shops in Manhattan")
5while True:
6    schedule.run_pending()
7    time.sleep(30)

Планирование уровня production с APScheduler

1from apscheduler.schedulers.background import BackgroundScheduler
2from apscheduler.triggers.cron import CronTrigger
3sched = BackgroundScheduler(timezone="America/New_York")
4sched.add_job(
5    run_job,
6    CronTrigger(hour=3, minute=15, jitter=600),  # 3:15 утра ± 10 мин
7    kwargs={"query": "restaurants in Brooklyn"},
8    id="brooklyn_daily",
9    max_instances=1,
10    coalesce=True,
11    misfire_grace_time=3600,
12)
13sched.start()

Советы по безопасной автоматизации

  • Добавляйте случайный jitter в расписание, чтобы не создавать предсказуемый шаблон.
  • Для HTML-скрейпинга не превышайте 1–2 запроса в секунду.
  • При использовании API следите за квотой и настройте оповещения по биллингу.
  • Всегда логируйте ошибки и ведите файл «dead-letter» для неудачных запросов.

Бонус Thunderbit: с Thunderbit можно настраивать повторяющиеся сборы прямо в интерфейсе — без кода, cron-задач и настройки сервера.

Главные выводы: эффективный, точный и соответствующий правилам сбор данных Google Maps

Подведём итоги:

  • Google Maps — источник №1 для данных о бизнес-локациях, который питает всё: от лидогенерации до исследования рынка.
  • Сбор через Python даёт гибкость и контроль, но требует настройки, поддержки и соблюдения правил — особенно по мере усиления антибот-защиты Google и правоприменения.
  • Извлечение через API — самый безопасный и масштабируемый путь для большинства команд. Всегда используйте field masks и фильтры на стороне сервера, чтобы контролировать расходы.
  • HTML-скрейпинг хрупок и рискован — используйте его только для разовых исследований и никогда не обходите технические ограничения.
  • Нацеливайте сбор данных: используйте поиск по фразе, фильтры по локации и рабочие процессы на pandas, чтобы извлекать только необходимое.
  • Thunderbit — самый быстрый путь для тех, кто не пишет код: ИИ, без настройки, мгновенный экспорт и встроенное планирование.
  • Комплаенс важен: соблюдайте условия Google, законы о конфиденциальности и лимиты запросов, чтобы избежать юридических проблем.

Больше руководств и советов ищите в и на нашем .

FAQ

1. Законно ли в 2026 году собирать данные Google Maps с помощью Python?

Сбор данных Google Maps через официальный API разрешён в рамках условий Google, если вы соблюдаете квоты и не распространяете ограниченные данные. HTML-скрейпинг Google Maps прямо запрещён условиями Google и несёт юридические риски, особенно если вы обходите технические ограничения или собираете персональные данные без согласия. Всегда проверяйте местные законы (GDPR, CCPA и т. д.) и придерживайтесь лучших практик комплаенса.

2. В чём разница между использованием Google Maps API и веб-скрейпингом HTML?

API стабилен, лицензирован и предназначен для извлечения данных, но требует API-ключа и подчиняется квотам и оплате. HTML-скрейпинг использует автоматизацию браузера для извлечения данных с отрендеренной страницы, но он хрупкий (сайт часто меняется), может нарушать условия и несёт более высокий юридический риск. Для большинства бизнес-задач рекомендован именно API.

3. Сколько стоит извлечение данных из Google Maps с помощью Python в 2026 году?

Цены Google Places API рассчитываются за 1 000 запросов и зависят от запрашиваемых полей: от $5 (Essentials) до $25 (Enterprise+Atmosphere). Есть бесплатные ежемесячные пороги (10 000 для Essentials, 5 000 для Pro, 1 000 для Enterprise), но при больших объёмах затраты быстро растут. Всегда используйте field masks и фильтры на стороне сервера, чтобы контролировать расходы.

4. Чем Thunderbit отличается от Python-скрейперов для Google Maps?

Thunderbit — это no-code веб-скрейпер на базе ИИ, который позволяет извлекать данные Google Maps (и не только) без программирования, API-ключей и постоянной поддержки. Он идеально подходит для отделов продаж и маркетинга, которым нужен быстрый и надёжный экспорт в Excel, Google Sheets, Airtable или Notion. Для технических пользователей, которым нужна кастомная логика, Python даёт больше гибкости, но требует больше настройки и управления комплаенсом.

5. Как автоматизировать регулярное извлечение данных Google Maps?

В Python используйте библиотеки планирования вроде schedule или APScheduler, чтобы запускать скрейпер по расписанию — ежедневно, еженедельно и т. д. Добавляйте случайный jitter, чтобы избежать обнаружения, и следите за квотой API. С Thunderbit можно настраивать повторяющиеся сборы прямо в интерфейсе — без кода и без настройки сервера.

Готовы превратить Google Maps в суперсилу для продаж и маркетинга? Независимо от того, любите ли вы Python или хотите самое быстрое no-code-решение, все инструменты уже доступны в 2026 году. Попробуйте для мгновенного ИИ-скрейпинга — или засучите рукава и погрузитесь в API. В любом случае пусть ваши списки лидов будут свежими, выгрузки — чистыми, а кампании — полными локальных клиентов с высокой вероятностью конверсии. Удачного скрейпинга!

Подробнее

Ke
Ke
Технический директор Thunderbit. Ке — тот человек, которому пишут все, когда данные превращаются в хаос. Он всю карьеру превращает скучную, рутинную работу в незаметные автоматизации, которые просто работают. Если вы когда-нибудь мечтали, чтобы таблица заполнялась сама, Ке, скорее всего, уже создал для этого решение.
Topics
Сбор данных Google Maps с помощью PythonСкрейпер Google Maps на PythonИзвлечение данных из Google Maps с помощью Python
Содержание

Попробуй Thunderbit

Собирай лиды и другие данные всего в 2 клика. На базе AI.

Получить Thunderbit Это бесплатно
Извлекай данные с помощью AI
Легко передавай данные в Google Sheets, Airtable или Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week