Salta al contenuto

Come utilizzare l'API di Google Maps in Python: una guida rapida

L'API di Google Maps apre un mondo di potenti funzionalità geospaziali attraverso una semplice interfaccia RESTful. Con poche righe di codice puoi geocodificare indirizzi, calcolare distanze, visualizzare mappe personalizzate e molto altro ancora.

In questa guida completa imparerai come iniziare a utilizzare l'API di Google Maps utilizzando Python. Tratteremo:

  • Ottenere una chiave API
  • Indirizzi di geocodifica e recupero delle coordinate
  • Calcolo delle distanze e dei tempi di percorrenza
  • Superare i limiti dell'API con il web scraping
  • Scraping dei dati di Google Maps con Python

E molto altro ancora! Immergiamoci.

Introduzione all'API di Google Maps

L'API di Google Maps è un servizio web che fornisce l'accesso alla potente piattaforma di mappatura di Google tramite un'interfaccia JSON/XML. Ti consente di incorporare Google Maps nelle pagine web, personalizzare stili di mappa, indicatori, poligoni e sovrapposizioni.

Ma l'API abilita anche alcune funzionalità geospaziali incredibilmente utili come:

  • geocoding – Conversione degli indirizzi stradali in coordinate geografiche
  • Geocodifica inversa – Conversione delle coordinate geografiche nell'indirizzo più vicino
  • Matrice delle distanze – Calcolo della distanza e del tempo di viaggio tra i luoghi
  • Istruzioni – Ottenere indicazioni stradali e percorsi da punto a punto
  • Partner – Ricerca e acquisizione di dettagli su luoghi e attività commerciali locali
  • Mappe statiche – Generazione di immagini di mappe statiche

Con oltre 15 API e oltre 100 funzionalità, la portata è incredibile. Inoltre, i prezzi dell'API di Google Maps sono molto convenienti: molte funzionalità sono gratuite fino a limiti di utilizzo.

È qui che l'integrazione di Python torna utile. Puoi accedere a tutte queste API tramite un semplice codice Python, automatizzare i flussi di lavoro e creare potenti applicazioni geospaziali.

Iniziamo con la configurazione.

Ottenere una chiave API di Google Maps

Per utilizzare qualsiasi API di Google Maps, devi prima ottenere una chiave API che identifichi il tuo progetto. Ecco come:

  1. Vai Console Google Cloud e accedi con il tuo account Google.

  2. Fai clic sul menu di navigazione e seleziona API e servizi > Credenziali.

  3. Nella pagina Credenziali, fai clic su Crea credenziali, quindi seleziona Chiave API.

  4. Copia questa nuova chiave API e salvala in un posto sicuro. Lo useremo presto!

Con la chiave puoi iniziare ad abilitare le API che desideri utilizzare. Per questa guida, ci concentreremo su due aspetti essenziali:

  • API di geocodifica
  • API della matrice delle distanze

Nella pagina Credenziali, fai clic su Abilita API e servizi in alto. Cerca quelle API e abilitale per il tuo progetto.

Ora siamo pronti per iniziare a utilizzare le API in Python.

Indirizzi di geocodifica in Python

Una delle applicazioni più utili dell'API di Google Maps è la conversione degli indirizzi stradali in coordinate geografiche (latitudine e longitudine). Questo processo si chiama geocoding.

L'API di geocodifica ti consente di trasmettere qualsiasi indirizzo e recuperare le coordinate della sua posizione. Ecco una funzione Python per fare proprio questo:

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

Questo effettua una richiesta all'API di geocodificazione, passando l'indirizzo come parametro. In caso di successo, estrae le coordinate di latitudine e longitudine dalla risposta.

Proviamolo:

api_key = ‘YOUR_API_KEY‘ 

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

lat, lng = geocode_address(api_key, address)

print(lat, lng)

Questo dovrebbe stampare le coordinate 37.4224764, -122.0842499.

Ora abbiamo un modo semplice per convertire gli indirizzi in coordinate geografiche in Python utilizzando l'API di geocodifica di Google Maps!

Alcuni casi d'uso per la geocodificazione:

  • Traccia posizioni su una mappa da un elenco di indirizzi
  • Analizzare la distribuzione geografica dei clienti
  • Tagga i record del database con lat/lng per ricerche di prossimità

Ma cosa succederebbe se volessimo andare nella direzione opposta – convertire le coordinate geografiche in indirizzi?

Geocodifica inversa in Python

La geocodifica inversa ti consente di recuperare l'indirizzo più vicino a una determinata coordinata lat/lng.

L'API di geocodificazione gestisce questa operazione con il file latlng parametro invece di 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

Proviamolo:

lat = 37.4224764
lng = -122.0842499

address = reverse_geocode(api_key, lat, lng)

print(address) 

Questo stampa "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA".

La geocodificazione inversa è utile per tracciare indirizzi su una mappa a partire dai dati di latitudine/longitudine.

Successivamente, vediamo come calcolare le distanze tra i luoghi con l'API di Google Maps.

Calcolo della distanza e del tempo di viaggio in Python

L'API Distance Matrix fornisce la distanza e il tempo di viaggio per una matrice di origini e destinazioni.

Puoi passare una serie di origini e destinazioni e restituirà la distanza e la durata tra ciascuna coppia origine-destinazione.

Ecco una richiesta di esempio:

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

Questo calcola la distanza e il tempo da Vancouver e Seattle a San Francisco e Victoria.

I rows contenere i risultati per ciascun punto di origine e elements contiene i risultati per ciascuna destinazione.

Alcuni utilizzi dell'API Distance Matrix:

  • Calcola il raggio del tempo di guida per l'ubicazione di un negozio
  • Stima dei tempi di consegna dell'ordine
  • Ottimizza i percorsi per una flotta di conducenti

Ciò dimostra solo una minima parte di ciò che puoi fare con l'API di Google Maps. Di seguito esamineremo il superamento di alcune limitazioni.

Superare i limiti dell'API di Google Maps con il Web Scraping

L'API di Google Maps offre un valore eccellente con generosi limiti gratuiti. Ma sono ancora limiti di tariffa e di utilizzo.

Una volta superati, le tue richieste iniziano a essere limitate o bloccate. Per le app ad alto traffico, potrebbe essere necessario acquistare piani premium.

Un'alternativa è quella recuperare i dati di Google Maps direttamente dai browser che utilizzano librerie Python come Selenium, Beautiful Soup ecc.

Ciò evita completamente i limiti dell'API poiché stai estraendo i dati dal front-end anziché utilizzare le API back-end.

Lo scraping di Google Maps ti offre la flessibilità di estrarre tutti i dati che desideri:

  • Nomi di luoghi, foto, recensioni, attributi, ecc.
  • Indicazioni e percorsi
  • Stime di traffico e orari di punta
  • Immagini di Street View

Diamo una rapida occhiata all'estrazione di alcuni dati di Google Maps con Python.

Scraping di Google Maps con Python e BeautifulSoup

Per dimostrare il web scraping di Google Maps, estrarremo i nomi e le recensioni di alcuni ristoranti.

Per prima cosa cercheremo "ristoranti a Vancouver" su Google Maps. Quindi inserisci il nome del luogo, la valutazione e le recensioni di esempio sulla prima pagina.

Il nostro script:

  1. Usa Selenium per caricare la pagina
  2. Passa a BeautifulSoup per analizzare l'HTML
  3. Trova gli elementi del luogo utilizzando i selettori CSS
  4. Estrai il nome, la valutazione e le recensioni

Ecco il codice 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)

Questo estrarrà dati come:

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

Il vantaggio principale: nessun limite API! Puoi estrarre qualsiasi dato su larga scala.

Alcuni suggerimenti per un web scraping responsabile:

  • Aggiungi ritardi casuali per evitare di sovraccaricare i server
  • Identificati come un normale browser, non come un bot
  • Rispetta le regole del file robots.txt
  • Utilizza la rotazione proxy per evitare blocchi IP

Consulta la nostra guida dettagliata per molti altri suggerimenti sullo scraping di Google Maps!

Punti chiave

L'API di Google Maps abilita potenti funzionalità geospaziali attraverso una semplice interfaccia:

  • Indirizzi di geocodifica e coordinate di geocodifica inversa
  • Calcola distanze e tempi di percorrenza
  • Cerca e dettaglia luoghi, indicazioni stradali e altro ancora

Si integra facilmente con Python utilizzando il modulo request. Ma i limiti di utilizzo possono rappresentare una sfida per carichi di lavoro più grandi.

Il web scraping fornisce un'alternativa scalabile per estrarre dati geospaziali da Google Maps senza limiti.

Le librerie Python come Selenium e BeautifulSoup semplificano la raccolta di luoghi, recensioni, indicazioni stradali, statistiche sul traffico, Street View e altro ancora.

Ci auguriamo che questo ti fornisca una solida base per sbloccare tutto il potenziale dei dati di Google Maps utilizzando l'API o lo scraping: le possibilità sono infinite!

Partecipa alla conversazione

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *