Bỏ để qua phần nội dung

Cách sử dụng API Google Maps bằng Python: Hướng dẫn nhanh

API Google Maps mở ra một thế giới khả năng không gian địa lý mạnh mẽ thông qua giao diện RESTful đơn giản. Chỉ với một vài dòng mã, bạn có thể mã hóa địa chỉ, tính toán khoảng cách, hiển thị bản đồ tùy chỉnh và hơn thế nữa.

Trong hướng dẫn toàn diện này, bạn sẽ tìm hiểu cách bắt đầu với API Google Maps bằng Python. Chúng tôi sẽ bao gồm:

  • Lấy khóa API
  • Địa chỉ mã hóa địa lý và tìm nạp tọa độ
  • Tính quãng đường và thời gian đi
  • Vượt qua giới hạn API bằng cách quét web
  • Quét dữ liệu Google Maps bằng Python

Và nhiều hơn nữa! Hãy đi sâu vào.

Giới thiệu về API Google Maps

API Google Maps là một dịch vụ web cung cấp quyền truy cập vào nền tảng lập bản đồ mạnh mẽ của Google thông qua giao diện JSON/XML. Nó cho phép bạn nhúng Google Maps trên các trang web, tùy chỉnh kiểu bản đồ, điểm đánh dấu, đa giác và lớp phủ.

Nhưng API cũng cho phép một số khả năng không gian địa lý cực kỳ hữu ích như:

  • Mã hóa địa lý – Chuyển đổi địa chỉ đường phố sang tọa độ địa lý
  • Mã hóa ngược – Chuyển đổi tọa độ địa lý thành địa chỉ gần nhất
  • Ma trận khoảng cách – Tính khoảng cách và thời gian di chuyển giữa các địa điểm
  • Chỉ Dẫn – Nhận chỉ đường và tuyến đường từ điểm này đến điểm khác
  • Nơi – Tìm kiếm và nhận thông tin chi tiết về các địa điểm và doanh nghiệp địa phương
  • Bản đồ tĩnh – Tạo hình ảnh bản đồ tĩnh

Với hơn 15 API và hơn 100 khả năng, phạm vi của nó thật đáng kinh ngạc. Và giá API Google Maps rất phải chăng – nhiều khả năng được cung cấp miễn phí theo giới hạn sử dụng.

Đó là lúc việc tích hợp Python trở nên hữu ích. Bạn có thể truy cập tất cả các API này thông qua mã Python đơn giản, tự động hóa quy trình làm việc và xây dựng các ứng dụng không gian địa lý mạnh mẽ.

Hãy bắt đầu bằng cách thiết lập.

Nhận khóa API Google Maps

Để sử dụng bất kỳ API Google Maps nào, trước tiên bạn cần lấy khóa API xác định dự án của mình. Đây là cách thực hiện:

  1. Tới Bảng điều khiển đám mây của Google và đăng nhập bằng tài khoản Google của bạn.

  2. Nhấp vào Menu Điều hướng và chọn API & Dịch vụ > Thông tin xác thực.

  3. Trên trang Thông tin xác thực, nhấp vào Tạo thông tin xác thực, sau đó chọn khóa API.

  4. Sao chép khóa API mới này và lưu nó ở nơi an toàn. Chúng tôi sẽ sớm sử dụng nó!

Với khóa này, bạn có thể bắt đầu kích hoạt các API bạn muốn sử dụng. Đối với hướng dẫn này, chúng tôi sẽ tập trung vào hai điều quan trọng:

  • API mã hóa địa lý
  • API ma trận khoảng cách

Trên trang Thông tin xác thực, nhấp vào Bật API và dịch vụ ở trên cùng. Tìm kiếm các API đó và kích hoạt chúng cho dự án của bạn.

Bây giờ chúng ta đã sẵn sàng bắt đầu sử dụng API trong Python.

Địa chỉ mã hóa địa lý trong Python

Một trong những ứng dụng hữu ích nhất của API Google Maps là chuyển đổi địa chỉ đường phố thành tọa độ địa lý (vĩ độ và kinh độ). Quá trình này được gọi là mã hóa địa lý.

API mã hóa địa lý cho phép bạn chuyển bất kỳ địa chỉ nào và lấy lại tọa độ vị trí của nó. Đây là hàm Python để làm việc đó:

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

Điều này đưa ra yêu cầu tới API mã hóa địa lý, chuyển địa chỉ dưới dạng tham số. Nếu thành công, nó sẽ trích xuất vĩ độ và kinh độ từ phản hồi.

Hãy thử nghiệm nó:

api_key = ‘YOUR_API_KEY‘ 

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

lat, lng = geocode_address(api_key, address)

print(lat, lng)

Điều này sẽ in tọa độ 37.4224764, -122.0842499.

Giờ đây, chúng tôi có một cách đơn giản để chuyển đổi địa chỉ thành tọa độ địa lý bằng Python bằng API mã hóa địa lý của Google Maps!

Một số trường hợp sử dụng mã hóa địa lý:

  • Vẽ vị trí trên bản đồ từ danh sách địa chỉ
  • Phân tích sự phân bố địa lý của khách hàng
  • Gắn thẻ các bản ghi cơ sở dữ liệu với lat/lng để tìm kiếm vùng lân cận

Nhưng nếu chúng ta muốn làm theo cách khác – chuyển đổi tọa độ địa lý thành địa chỉ thì sao?

Mã hóa địa lý ngược trong Python

Mã hóa địa lý ngược cho phép bạn tìm nạp địa chỉ gần nhất với tọa độ vĩ độ/lng nhất định.

API mã hóa địa lý xử lý việc này bằng latlng tham số thay vì 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

Hãy kiểm tra nó:

lat = 37.4224764
lng = -122.0842499

address = reverse_geocode(api_key, lat, lng)

print(address) 

Bản in này "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA".

Mã hóa địa lý ngược rất hữu ích cho việc vẽ địa chỉ trên bản đồ từ dữ liệu vĩ độ/kinh độ.

Tiếp theo, hãy xem cách tính khoảng cách giữa các địa điểm bằng API Google Maps.

Tính khoảng cách và thời gian di chuyển bằng Python

API Ma trận Khoảng cách cung cấp khoảng cách và thời gian di chuyển cho ma trận điểm xuất phát và điểm đến.

Bạn có thể chuyển một tập hợp điểm gốc và điểm đến, đồng thời nó sẽ trả về khoảng cách và khoảng thời gian giữa mỗi cặp điểm xuất phát và điểm đến.

Đây là một yêu cầu mẫu:

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

Điều này tính toán khoảng cách và thời gian từ Vancouver và Seattle đến San Francisco và Victoria.

Sản phẩm rows chứa các kết quả cho từng điểm gốc và elements có kết quả cho mỗi điểm đến.

Một số cách sử dụng API ma trận khoảng cách:

  • Tính toán bán kính thời gian lái xe cho một vị trí cửa hàng
  • Ước tính thời gian giao hàng
  • Tối ưu hóa lộ trình cho đội ngũ tài xế

Điều này chỉ thể hiện một phần những gì bạn có thể làm với API Google Maps. Chúng ta hãy xem xét việc khắc phục một số hạn chế tiếp theo.

Vượt qua giới hạn API của Google Maps bằng tính năng Quét web

API Google Maps cung cấp giá trị tuyệt vời với giới hạn miễn phí hào phóng. Nhưng chúng vẫn có giới hạn về tỷ lệ và mức sử dụng.

Khi bạn vượt quá chúng, các yêu cầu của bạn sẽ bắt đầu bị hạn chế hoặc bị chặn. Đối với các ứng dụng có lưu lượng truy cập cao, bạn có thể cần phải mua gói cao cấp.

Một thay thế là cạo dữ liệu Google Maps trực tiếp từ các trình duyệt sử dụng thư viện Python như Selenium, Beautiful Soup, v.v.

Điều này tránh hoàn toàn các giới hạn API vì bạn đang trích xuất dữ liệu từ giao diện người dùng thay vì sử dụng API phía sau.

Quét Google Maps cho phép bạn linh hoạt trích xuất bất kỳ dữ liệu nào bạn muốn:

  • Tên địa điểm, hình ảnh, đánh giá, thuộc tính, v.v.
  • Chỉ đường và tuyến đường
  • Ước tính lưu lượng truy cập và thời gian phổ biến
  • Hình ảnh của Chế độ xem phố

Chúng ta hãy xem nhanh việc thu thập một số dữ liệu Google Maps bằng Python.

Quét Google Maps bằng Python và BeautifulSoup

Để chứng minh việc quét web trên Google Maps, chúng tôi sẽ trích xuất một số tên và bài đánh giá về nhà hàng.

Đầu tiên chúng ta sẽ tìm kiếm "nhà hàng ở Vancouver" trên Google Maps. Sau đó xóa tên địa điểm, xếp hạng và đánh giá mẫu trên trang đầu tiên.

Kịch bản của chúng tôi sẽ:

  1. Sử dụng Selenium để tải trang
  2. Chuyển sang BeautifulSoup để phân tích HTML
  3. Tìm các phần tử địa điểm bằng bộ chọn CSS
  4. Trích xuất tên, xếp hạng và đánh giá

Đây là mã đầy đủ:

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)

Điều này sẽ trích xuất dữ liệu như:

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

Ưu điểm chính – không giới hạn API! Bạn có thể trích xuất bất kỳ dữ liệu nào ở quy mô lớn.

Một số mẹo để quét web có trách nhiệm:

  • Thêm độ trễ ngẫu nhiên để tránh làm quá tải máy chủ
  • Nhận diện là trình duyệt bình thường, không phải bot
  • Tôn trọng các quy tắc của robots.txt
  • Sử dụng xoay vòng proxy để tránh chặn IP

Hãy xem hướng dẫn chi tiết của chúng tôi để biết thêm nhiều mẹo thu thập thông tin trên Google Maps!

Chìa khóa chính

API Google Maps cho phép khả năng không gian địa lý mạnh mẽ thông qua giao diện đơn giản:

  • Địa chỉ mã địa lý và tọa độ mã địa lý đảo ngược
  • Tính quãng đường và thời gian đi
  • Tìm kiếm và chi tiết địa điểm, chỉ đường và hơn thế nữa

Nó tích hợp dễ dàng với Python bằng mô-đun yêu cầu. Nhưng giới hạn sử dụng có thể đặt ra thách thức cho khối lượng công việc lớn hơn.

Quét web cung cấp giải pháp thay thế có thể mở rộng để trích xuất dữ liệu không gian địa lý từ Google Maps mà không có giới hạn.

Các thư viện Python như Selenium và BeautifulSoup giúp bạn dễ dàng thu thập thông tin về địa điểm, bài đánh giá, chỉ đường, thống kê giao thông, Chế độ xem phố, v.v.

Hy vọng rằng điều này mang lại cho bạn nền tảng vững chắc để khai thác toàn bộ tiềm năng của dữ liệu Google Maps bằng cách sử dụng API hoặc thu thập dữ liệu – khả năng là vô tận!

Tham gia vào cuộc đối thoại

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *