Ir para o conteúdo

Como usar a API do Google Maps em Python: um guia rápido

A API do Google Maps abre um mundo de recursos geoespaciais poderosos por meio de uma interface RESTful simples. Com apenas algumas linhas de código, você pode geocodificar endereços, calcular distâncias, exibir mapas personalizados e muito mais.

Neste guia abrangente, você aprenderá como começar a usar a API do Google Maps usando Python. Abordaremos:

  • Obtendo uma chave de API
  • Geocodificação de endereços e busca de coordenadas
  • Calculando distâncias e tempos de viagem
  • Superando os limites da API com web scraping
  • Extraindo dados do Google Maps com Python

E muito mais! Vamos mergulhar.

Introdução à API do Google Maps

A API do Google Maps é um serviço web que fornece acesso à poderosa plataforma de mapeamento do Google por meio de uma interface JSON/XML. Ele permite incorporar o Google Maps em páginas da web, personalizar estilos de mapas, marcadores, polígonos e sobreposições.

Mas a API também permite alguns recursos geoespaciais incrivelmente úteis, como:

  • Geocodificação – Conversão de endereços em coordenadas geográficas
  • Geocodificação reversa – Convertendo coordenadas geográficas para o endereço mais próximo
  • Matriz de Distância – Calculando distância e tempo de viagem entre lugares
  • Instruções – Obtendo direções e rotas ponto a ponto
  • Locais – Pesquisar e obter detalhes de locais e empresas locais
  • Mapas estáticos – Gerando imagens de mapas estáticos

Com mais de 15 APIs e mais de 100 recursos, o escopo é incrível. E o preço da API do Google Maps é altamente acessível – muitos recursos são gratuitos até limites de uso.

É aí que a integração com Python se torna útil. Você pode acessar todas essas APIs por meio de código Python simples, automatizar fluxos de trabalho e criar aplicativos geoespaciais poderosos.

Vamos começar com a configuração.

Obtendo uma chave de API do Google Maps

Para usar qualquer API do Google Maps, primeiro você precisa obter uma chave de API que identifique seu projeto. Veja como:

  1. Vou ao Console do Google Cloud e faça login com sua conta do Google.

  2. Clique no menu de navegação e selecione APIs e serviços > Credenciais.

  3. Na página Credenciais, clique em Criar credenciais e selecione Chave de API.

  4. Copie esta nova chave de API e salve-a em algum lugar seguro. Em breve usaremos!

Com a chave, você pode começar a habilitar as APIs que deseja usar. Para este guia, vamos nos concentrar em dois itens essenciais:

  • API de geocodificação
  • API da matriz de distância

Na página Credenciais, clique em Habilitar APIs e serviços na parte superior. Procure essas APIs e habilite-as para o seu projeto.

Agora estamos prontos para começar a usar APIs em Python.

Endereços de geocodificação em Python

Uma das aplicações mais úteis da API do Google Maps é a conversão de endereços em coordenadas geográficas (latitude e longitude). Este processo é chamado geocodificação.

A API de geocodificação permite passar qualquer endereço e recuperar suas coordenadas de localização. Aqui está uma função Python para fazer exatamente isso:

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

Isso faz uma solicitação à API Geocoding, passando o endereço como parâmetro. Se for bem-sucedido, ele extrai as coordenadas de latitude e longitude da resposta.

Vamos testar:

api_key = ‘YOUR_API_KEY‘ 

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

lat, lng = geocode_address(api_key, address)

print(lat, lng)

Isso deve imprimir as coordenadas 37.4224764, -122.0842499.

Agora temos uma maneira simples de converter endereços em coordenadas geográficas em Python usando a API de geocodificação do Google Maps!

Alguns casos de uso para geocodificação:

  • Trace locais em um mapa a partir de uma lista de endereços
  • Analise a distribuição geográfica dos clientes
  • Marcar registros de banco de dados com lat/lng para pesquisas de proximidade

Mas e se quisermos seguir o outro caminho – converter coordenadas geográficas em endereços?

Geocodificação reversa em Python

A geocodificação reversa permite buscar o endereço mais próximo de uma determinada coordenada lat/lng.

A API Geocoding lida com isso com o latlng parâmetro em vez de 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

Vamos testar:

lat = 37.4224764
lng = -122.0842499

address = reverse_geocode(api_key, lat, lng)

print(address) 

Isto imprime "1600 Amphitheatre Pkwy, Mountain View, CA 94043, EUA".

A geocodificação reversa é útil para traçar endereços em um mapa a partir de dados de latitude/longitude.

A seguir, vamos ver como calcular distâncias entre lugares com a API do Google Maps.

Calculando distância e tempo de viagem em Python

A API Distance Matrix fornece distância e tempo de viagem para uma matriz de origens e destinos.

Você pode passar um conjunto de origens e destinos, e ele retornará a distância e a duração entre cada par origem-destino.

Aqui está um exemplo de solicitação:

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()

Isso calcula a distância e o tempo de Vancouver e Seattle a São Francisco e Victoria.

A rows conter os resultados para cada ponto de origem, e elements tem os resultados para cada destino.

Alguns usos da API Distance Matrix:

  • Calcular o raio de tempo de percurso para um local de loja
  • Estimar prazos de entrega de pedidos
  • Otimize rotas para uma frota de motoristas

Isso demonstra apenas uma fração do que você pode fazer com a API do Google Maps. Vejamos a seguir como superar algumas limitações.

Superando os limites da API do Google Maps com Web Scraping

A API do Google Maps oferece excelente valor com limites gratuitos generosos. Mas ainda são limites de taxa e uso.

Depois de excedê-los, suas solicitações começam a ser limitadas ou bloqueadas. Para aplicativos de alto tráfego, pode ser necessário adquirir planos premium.

Uma alternativa é a raspar dados do Google Maps diretamente de navegadores usando bibliotecas Python como Selenium, Beautiful Soup etc.

Isso evita completamente os limites da API, pois você extrai dados do front-end em vez de usar as APIs de back-end.

A raspagem do Google Maps oferece flexibilidade para extrair quaisquer dados que você desejar:

  • Nomes de lugares, fotos, comentários, atributos etc.
  • Direções e rotas
  • Estimativas de tráfego e horários populares
  • Imagens do Street View

Vamos dar uma olhada rápida em como extrair alguns dados do Google Maps com Python.

Raspando o Google Maps com Python e BeautifulSoup

Para demonstrar a web scraping do Google Maps, extrairemos alguns nomes e avaliações de restaurantes.

Primeiro, pesquisaremos “restaurantes em Vancouver” no Google Maps. Em seguida, raspe o nome do local, a classificação e os exemplos de comentários na primeira página.

Nosso script irá:

  1. Use Selenium para carregar a página
  2. Mude para BeautifulSoup para analisar o HTML
  3. Encontre os elementos do local usando seletores CSS
  4. Extraia o nome, classificação e comentários

Aqui está o código completo:

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)

Isso extrairá dados como:

[
  {
    ‘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.‘]
  }
]

A principal vantagem – sem limites de API! Você pode extrair quaisquer dados em grande escala.

Algumas dicas para web scraping responsável:

  • Adicione atrasos aleatórios para evitar sobrecarregar os servidores
  • Identifique-se como um navegador normal, não como um bot
  • Respeite as regras do robots.txt
  • Use a rotação de proxy para evitar bloqueios de IP

Confira nosso guia detalhado para muito mais dicas de raspagem do Google Maps!

Principais lições

A API do Google Maps permite recursos geoespaciais poderosos por meio de uma interface simples:

  • Endereços de geocodificação e coordenadas de geocodificação reversa
  • Calcular distâncias e tempos de viagem
  • Pesquise e detalhe lugares, rotas e muito mais

Ele se integra facilmente ao Python usando o módulo requests. Mas os limites de utilização podem representar desafios para cargas de trabalho maiores.

Web scraping fornece uma alternativa escalonável para extrair dados geoespaciais do Google Maps sem limites.

Bibliotecas Python como Selenium e BeautifulSoup facilitam a coleta de lugares, avaliações, rotas, estatísticas de tráfego, Street View e muito mais.

Esperamos que isso lhe dê uma base sólida para desbloquear todo o potencial dos dados do Google Maps usando a API ou raspagem – as possibilidades são infinitas!

Junte-se à conversa

O seu endereço de e-mail não será publicado. Os campos obrigatórios são marcados com *