перейти к содержанию

Как использовать API Google Maps в Python: краткое руководство

API Карт Google открывает мир мощных геопространственных возможностей через простой интерфейс RESTful. Всего с помощью нескольких строк кода вы можете геокодировать адреса, рассчитывать расстояния, отображать пользовательские карты и многое другое.

Из этого подробного руководства вы узнаете, как начать работу с API Google Maps с использованием Python. Мы рассмотрим:

  • Получение API-ключа
  • Геокодирование адресов и получение координат
  • Расчет расстояний и времени в пути
  • Преодоление ограничений API с помощью веб-скрапинга
  • Очистка данных Google Maps с помощью Python

И многое другое! Давайте погрузимся.

Введение в API Карт Google

API Карт Google — это веб-служба, которая обеспечивает доступ к мощной картографической платформе Google через интерфейс JSON/XML. Он позволяет встраивать карты Google на веб-страницы, настраивать стили карт, маркеры, многоугольники и наложения.

Но API также предоставляет некоторые невероятно полезные геопространственные возможности, такие как:

  • Геокодирование – Преобразование адресов улиц в географические координаты
  • Обратное геокодирование – Преобразование географических координат в ближайший адрес
  • Матрица расстояний - Расчет расстояния и времени путешествия между местами
  • Навигация – Получение маршрутов и маршрутов из пункта в пункт.
  • Мест – Поиск и получение подробной информации о местных местах и ​​предприятиях.
  • Карты статические – Генерация статических изображений карты

Благодаря более чем 15 API и более чем 100 возможностям возможности просто невероятны. А цены на Google Maps API очень доступны: многие возможности бесплатны в пределах ограничений на использование.

Вот тут-то и пригодится интеграция с Python. Вы можете получить доступ ко всем этим API с помощью простого кода Python, автоматизировать рабочие процессы и создавать мощные геопространственные приложения.

Начнем с настройки.

Получение ключа API Карт Google

Чтобы использовать любой API Карт Google, вам сначала необходимо получить ключ API, который идентифицирует ваш проект. Вот как:

  1. Перейдите в Консоль Google Cloud и войдите в свою учетную запись Google.

  2. Нажмите меню навигации и выберите API и службы > Учетные данные.

  3. На странице «Учетные данные» нажмите «Создать учетные данные», затем выберите ключ API.

  4. Скопируйте этот новый ключ API и сохраните его в безопасном месте. Мы скоро им воспользуемся!

С помощью ключа вы можете начать активировать API, которые хотите использовать. В этом руководстве мы сосредоточимся на двух основных:

  • API геокодирования
  • API матрицы расстояний

На странице «Учетные данные» вверху нажмите «Включить API и службы». Найдите эти API и включите их для своего проекта.

Теперь мы готовы начать использовать API в Python.

Геокодирование адресов в Python

Одним из наиболее полезных приложений API Карт Google является преобразование адресов улиц в географические координаты (широта и долгота). Этот процесс называется геокодирования.

API геокодирования позволяет вам передать любой адрес и получить координаты его местоположения. Вот функция Python, которая делает именно это:

import requests

def geocode_address(api_key, address):

  url = ‘https://maps.googleapis.com/maps/api/geocode/json‘

  params = {
    ‘address‘: address,
    ‘key‘: api_key
  }

  response = requests.get(url, params=params)

  if response.status_code == 200:
    data = response.json()

    if data[‘status‘] == ‘OK‘:
      location = data[‘results‘][0][‘geometry‘][‘location‘]
      lat = location[‘lat‘]
      lng = location[‘lng‘]
      return lat, lng

    else:
      print(f"Error: {data[‘error_message‘]}")
      return None, None

  else:
    print(‘Request failed.‘)
    return None, None

При этом делается запрос к API геокодирования, передавая адрес в качестве параметра. В случае успеха он извлекает координаты широты и долготы из ответа.

Давайте проверим это:

api_key = ‘YOUR_API_KEY‘ 

address = ‘1600 Amphitheatre Parkway Mountain View, CA 94043‘

lat, lng = geocode_address(api_key, address)

print(lat, lng)

Это должно напечатать координаты 37.4224764, -122.0842499.

Теперь у нас есть простой способ конвертировать адреса в географические координаты на Python с помощью API геокодирования Google Maps!

Некоторые варианты использования геокодирования:

  • Отображение местоположений на карте из списка адресов
  • Анализ географического распределения клиентов.
  • Записи базы данных тегов с широтой и долготой для поиска по близости

Но что, если мы хотим пойти другим путем — преобразовать географические координаты в адреса?

Обратное геокодирование в Python

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

API геокодирования решает эту проблему с помощью latlng параметр вместо address:

import requests

def reverse_geocode(api_key, lat, lng):

  url = ‘https://maps.googleapis.com/maps/api/geocode/json‘

  params = {
    ‘latlng‘: f‘{lat},{lng}‘,
    ‘key‘: api_key  
  }

  response = requests.get(url, params=params)

  if response.status_code == 200:
    data = response.json()

    if data[‘status‘] == ‘OK‘:
      return data[‘results‘][0][‘formatted_address‘]

    else:
      print(f"Error: {data[‘error_message‘]}")
      return None

  else:
    print(‘Request failed.‘)  
    return None

Давайте проверим это:

lat = 37.4224764
lng = -122.0842499

address = reverse_geocode(api_key, lat, lng)

print(address) 

Здесь написано: «1600 Амфитеатр Пкви, Маунтин-Вью, Калифорния 94043, США».

Обратное геокодирование полезно для нанесения адресов на карту на основе данных о широте и долготе.

Далее давайте посмотрим, как вычислять расстояния между местами с помощью API Google Maps.

Расчет расстояния и времени в пути в Python

API матрицы расстояний предоставляет информацию о расстоянии и времени путешествия для матрицы пунктов отправления и назначения.

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

Вот пример запроса:

import requests 

origins = ‘Vancouver+BC|Seattle‘
destinations = ‘San+Francisco|Victoria+BC‘

url = ‘https://maps.googleapis.com/maps/api/distancematrix/json‘

params = {
  ‘origins‘: origins,
  ‘destinations‘: destinations,
  ‘key‘: api_key
}

response = requests.get(url, params=params)
data = response.json()

Это вычисляет расстояние и время от Ванкувера и Сиэтла до Сан-Франциско и Виктории.

Ассоциация rows содержать результаты для каждой исходной точки и elements имеет результаты для каждого пункта назначения.

Некоторые варианты использования Distance Matrix API:

  • Рассчитать радиус времени в пути до магазина
  • Оцените сроки доставки заказа
  • Оптимизация маршрутов для парка водителей

Это демонстрирует лишь малую часть того, что вы можете сделать с помощью API Google Maps. Далее давайте рассмотрим преодоление некоторых ограничений.

Преодоление ограничений API Карт Google с помощью веб-скрапинга

API Карт Google обеспечивает отличное соотношение цены и качества и щедрые бесплатные лимиты. Но они по-прежнему имеют ограничения по скорости и использованию.

Как только вы их превысите, ваши запросы начнут ограничиваться или блокироваться. Для приложений с высоким трафиком вам может потребоваться приобрести премиальные планы.

Альтернативой является очистить данные Google Maps непосредственно из браузеров с использованием библиотек Python, таких как Selenium, Beautiful Soup и т. д.

Это полностью позволяет избежать ограничений API, поскольку вы извлекаете данные из внешнего интерфейса, а не используете внутренние API.

Парсинг Google Maps дает вам возможность извлекать любые данные, которые вы хотите:

  • Названия мест, фотографии, отзывы, атрибуты и т. д.
  • Направления и маршруты
  • Оценка трафика и популярное время
  • Изображения Просмотра улиц

Давайте кратко рассмотрим сбор некоторых данных Google Maps с помощью Python.

Парсинг Google Maps с помощью Python и BeautifulSoup

Чтобы продемонстрировать парсинг веб-страниц Google Maps, мы извлечем названия и отзывы некоторых ресторанов.

Сначала мы поищем «рестораны в Ванкувере» на Картах Google. Затем найдите название места, рейтинг и образцы отзывов на первой странице.

Наш скрипт будет:

  1. Используйте Selenium для загрузки страницы
  2. Переключитесь на BeautifulSoup для анализа HTML.
  3. Найдите элементы места с помощью селекторов CSS
  4. Извлеките имя, рейтинг и отзывы

Вот полный код:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome()

url = ‘https://www.google.com/maps/search/restaurants+in+vancouver‘
driver.get(url)
time.sleep(3)

soup = BeautifulSoup(driver.page_source, ‘html.parser‘)

places = soup.select(‘div.section-result-content‘)

data = []
for place in places:

  name = place.select_one(‘h3.section-result-title‘).text

  rating = place.select_one(‘span.section-result-rating‘).text

  reviews = [review.text for review in place.select(‘span.section-review-text‘)]

  data.append({
    ‘name‘: name,
    ‘rating‘: rating, 
    ‘sample_reviews‘: reviews[:2]
  })

driver.quit()

print(data)

Это позволит извлечь такие данные, как:

[
  {
    ‘name‘: ‘The Flying Pig‘,
    ‘rating‘: ‘4.6‘,
    ‘sample_reviews‘: [‘Amazing food!‘, ‘Staff are so friendly.‘]
  },
  {  
    ‘name‘: ‘The Eatery‘,
    ‘rating‘: ‘4.5‘,
    ‘sample_reviews‘: [‘Delicious!‘, ‘Great prices.‘]
  }
]

Ключевое преимущество – отсутствие ограничений API! Вы можете извлекать любые данные в любом масштабе.

Несколько советов по ответственному парсингу веб-страниц:

  • Добавьте случайные задержки, чтобы избежать перегрузки серверов.
  • Идентифицируйте себя как обычный браузер, а не бот
  • Соблюдайте правила robots.txt
  • Используйте ротацию прокси, чтобы избежать блокировки IP-адресов.

Ознакомьтесь с нашим подробным руководством, чтобы получить еще больше советов по парсингу Google Maps!

Основные выводы

API Google Maps предоставляет мощные геопространственные возможности через простой интерфейс:

  • Адреса геокодирования и координаты обратного геокодирования
  • Рассчитать расстояние и время в пути
  • Ищите и детализируйте места, направления и многое другое.

Он легко интегрируется с Python с помощью модуля запросов. Однако ограничения на использование могут создавать проблемы при более крупных рабочих нагрузках.

Веб-скрапинг представляет собой масштабируемую альтернативу для извлечения геопространственных данных из Карт Google без ограничений.

Библиотеки Python, такие как Selenium и BeautifulSoup, упрощают сбор мест, обзоров, направлений, статистики трафика, просмотра улиц и многого другого.

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

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *