跳到内容

如何在 Python 中使用 Google Maps API:快速指南

Google Maps API 通过简单的 RESTful 接口打开了一个强大的地理空间功能的世界。只需几行代码,您就可以对地址进行地理编码、计算距离、显示自定义地图等等。

在本综合指南中,您将了解如何使用 Python 开始使用 Google Maps API。我们将介绍:

  • 获取 API 密钥
  • 对地址进行地理编码并获取坐标
  • 计算距离和旅行时间
  • 通过网络抓取克服 API 限制
  • 使用 Python 抓取 Google 地图数据

还有更多!让我们深入了解一下。

Google 地图 API 简介

Google Maps API 是一项 Web 服务,可通过 JSON/XML 接口访问 Google 强大的地图平台。它允许您在网页上嵌入 Google 地图,自定义地图样式、标记、多边形和叠加层。

但该 API 还支持一些非常有用的地理空间功能,例如:

  • 地理编码 – 将街道地址转换为地理坐标
  • 反向地理编码 – 将地理坐标转换为最近的地址
  • 距离矩阵 – 计算地点之间的旅行距离和时间
  • 使用方法 – 获取点对点方向和路线
  • 地方 – 搜索并获取当地地点和企业的详细信息
  • 静态地图 – 生成静态地图图像

拥有超过 15 个 API 和 100 多种功能,范围令人难以置信。而且 Google Maps API 的定价非常实惠——许多功能在使用限制内都是免费的。

这就是 Python 集成派上用场的地方。您可以通过简单的 Python 代码访问所有这些 API、自动化工作流程并构建强大的地理空间应用程序。

让我们从设置开始。

获取 Google 地图 API 密钥

要使用任何 Google 地图 API,您首先需要获取可标识您的项目的 API 密钥。就是这样:

  1. Google云端控制台 并使用您的 Google 帐户登录。

  2. 单击导航菜单并选择 API 和服务 > 凭据。

  3. 在凭证页面上,单击创建凭证,然后选择 API 密钥。

  4. 复制这个新的 API 密钥并将其保存在安全的地方。我们很快就会用到它!

有了密钥,您就可以开始启用您想要使用的 API。对于本指南,我们将重点关注两个重要内容:

  • 地理编码API
  • 距离矩阵API

在“凭据”页面上,单击顶部的“启用 API 和服务”。搜索这些 API 并为您的项目启用它们。

现在我们准备开始在 Python 中使用 API。

Python 中的地址地理编码

Google Maps API 最有用的应用程序之一是将街道地址转换为地理坐标(纬度和经度)。这个过程称为 地理编码.

地理编码 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。

我们现在有一种简单的方法可以使用 Google Maps Geocoding API 将地址转换为 Python 中的地理坐标!

地理编码的一些用例:

  • 从地址列表中在地图上绘制位置
  • 分析客户的地理分布
  • 使用纬度/经度标记数据库记录以进行邻近搜索

但是,如果我们想采取另一种方式——将地理坐标转换为地址,该怎么办?

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 Amphitheatre Pkwy, Mountain View, CA 94043, USA”。

反向地理编码对于根据纬度/经度数据在地图上绘制地址非常有用。

接下来,让我们看看如何使用 Google Maps API 计算地点之间的距离。

用 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 有每个目的地的结果。

距离矩阵 API 的一些用法:

  • 计算商店位置的行驶时间半径
  • 估计订单交货时间
  • 优化车队的路线

这仅演示了您可以使用 Google Maps API 执行的一小部分操作。接下来让我们看看如何克服一些限制。

通过网页抓取克服 Google Maps API 限制

Google Maps API 提供卓越的价值和慷慨的免费限制。但它们仍然是速率和使用限制。

一旦超过它们,您的请求就会开始受到限制或阻止。对于高流量应用程序,您可能需要购买高级计划。

另一种方法是 抓取谷歌地图数据 直接从浏览器使用 Python 库(如 Selenium、Beautiful Soup 等)。

这完全避免了 API 限制,因为您是从前端提取数据而不是使用后端 API。

抓取 Google 地图可让您灵活地提取所需的任何数据:

  • 地点名称、照片、评论、属性等。
  • 方向和路线
  • 流量预估和热门时段
  • 街景图像

让我们快速浏览一下如何使用 Python 抓取一些 Google 地图数据。

使用 Python 和 BeautifulSoup 抓取 Google 地图

为了演示网络抓取 Google 地图,我们将提取一些餐厅名称和评论。

首先,我们将在 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 地图抓取技巧!

关键精华

Google Maps API 通过简单的界面实现强大的地理空间功能:

  • 地理编码地址和反向地理编码坐标
  • 计算距离和旅行时间
  • 搜索并详细说明地点、方向等

它使用 requests 模块轻松与 Python 集成。但使用限制可能会给更大的工作负载带来挑战。

网络抓取提供了一种可扩展的替代方案,可以无限制地从 Google 地图中提取地理空间数据。

Selenium 和 BeautifulSoup 等 Python 库可以轻松抓取地点、评论、路线、交通统计、街景等。

希望这能为您使用 API 或抓取来释放 Google 地图数据的全部潜力奠定坚实的基础 - 可能性是无限的!

加入谈话

您的电邮地址不会被公开。 必填带 *