Cara Scraping Google Maps dengan Python: Selenium, API, dan Alternatif Terbaik

Cara Scraping Google Maps dengan Python: Selenium, API, dan Alternatif Terbaik

danis

Kalau kamu seorang developer atau sudah familiar dengan Python, scraping Google Maps menggunakan script sendiri memberikan fleksibilitas yang tidak bisa ditawarkan tools no-code manapun: kamu bisa atur sepenuhnya logika filtering, format output, dan integrasi ke sistem yang sudah ada.

Tapi ada tantangan teknis yang perlu dipahami dulu. Kalau tujuannya hanya mengumpulkan leads bisnis untuk outreach, cara scraping Google Maps tanpa coding hampir selalu lebih efisien untuk non-developer. Panduan ini untuk yang memang butuh pendekatan programatik.

Mengapa Scraping Google Maps dengan Python Lebih Kompleks dari yang Terlihat

  • JavaScript rendering. Konten Maps di-render secara dinamis β€” requests biasa hanya mendapat HTML kosong. Butuh browser automation seperti Selenium atau Playwright.
  • Anti-bot detection. Google mendeteksi pola akses tidak natural dan memblokir IP atau menampilkan CAPTCHA setelah beberapa request berturut-turut.
  • Lazy loading. Hasil Maps di-load bertahap saat di-scroll β€” butuh logika scroll otomatis untuk dapat lebih dari 20 hasil pertama.
  • Struktur yang berubah. Google update interface Maps berkala, selector CSS di script kamu bisa break kapan saja tanpa peringatan.

Opsi 1: Selenium + Python (Browser Automation)

Selenium mengotomasi browser Chrome untuk berinteraksi dengan Maps seperti yang dilakukan manusia.

Install Dependencies

pip install selenium webdriver-manager

Contoh Script Dasar

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time, csv

def scrape_maps(query, max_scroll=10):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)')

    driver = webdriver.Chrome(
        service=Service(ChromeDriverManager().install()),
        options=options
    )

    url = f"https://www.google.com/maps/search/{query.replace(' ', '+')}"
    driver.get(url)
    time.sleep(3)

    results = []
    try:
        feed = driver.find_element(By.CSS_SELECTOR, 'div[role="feed"]')
        for _ in range(max_scroll):
            cards = driver.find_elements(By.CSS_SELECTOR, 'div.Nv2PK')
            for card in cards:
                try:
                    name = card.find_element(By.CSS_SELECTOR, '.qBF1Pd').text
                    results.append({'name': name})
                except:
                    pass
            driver.execute_script(
                "arguments[0].scrollTop = arguments[0].scrollHeight", feed
            )
            time.sleep(2)
    finally:
        driver.quit()

    return results

# Contoh penggunaan
data = scrape_maps("klinik gigi Surabaya", max_scroll=15)
print(f"Terkumpul: {len(data)} listing")

Catatan: CSS selector seperti .qBF1Pd dan .Nv2PK akan berubah saat Google update Maps. Ini adalah maintenance overhead utama metode ini.

Opsi 2: Playwright (Lebih Modern dari Selenium)

Playwright adalah alternatif yang lebih stabil dengan async support yang lebih baik.

pip install playwright
playwright install chromium
from playwright.sync_api import sync_playwright
import time

def scrape_playwright(query):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()

        page.goto(f"https://www.google.com/maps/search/{query.replace(' ', '+')}")
        page.wait_for_load_state('networkidle')

        results = []
        # Scroll dan extract listing...
        # Logika serupa dengan Selenium

        browser.close()
        return results

Opsi 3: Google Places API (Resmi, Paling Reliable)

Cara paling reliable: menggunakan API resmi Google. Data terstruktur, tidak akan break, tapi ada biaya per request.

pip install googlemaps
import googlemaps, time

gmaps = googlemaps.Client(key='YOUR_API_KEY')

def search_places(kw, loc, max_results=60):
    geo = gmaps.geocode(loc)
    if not geo:
        return []

    lat = geo[0]['geometry']['location']['lat']
    lng = geo[0]['geometry']['location']['lng']

    resp = gmaps.places_nearby(
        location=(lat, lng),
        keyword=kw,
        radius=10000
    )
    results = list(resp.get('results', []))

    while 'next_page_token' in resp and len(results) < max_results:
        time.sleep(2)  # Wajib delay sebelum pakai page token
        resp = gmaps.places_nearby(page_token=resp['next_page_token'])
        results.extend(resp.get('results', []))

    return results

data = search_places("dokter gigi", "Bandung")
print(f"Total: {len(data)} hasil")

Biaya: Nearby Search $0.032/request, maks 20 hasil per request. Untuk 1.000 data estimasi $1.6–5 USD.

Opsi 4: SerpAPI (Paling Mudah, Berbayar)

SerpAPI menangani semua kompleksitas di server mereka dan mengembalikan data terstruktur.

pip install google-search-results
from serpapi import GoogleSearch

params = {
    "engine": "google_maps",
    "q": "klinik gigi",
    "location": "Surabaya, Indonesia",
    "api_key": "YOUR_KEY"
}

search = GoogleSearch(params)
results = search.get_dict().get('local_results', [])
print(f"Hasil: {len(results)}")

Harga: mulai $50/bulan untuk 5.000 pencarian.

Perbandingan Semua Metode

Metode Biaya Reliability Maintenance Setup Time
Selenium / Playwright Gratis Rendah (sering break) Tinggi 1–2 hari
Google Places API Per request Sangat tinggi Hampir nol Beberapa jam
SerpAPI $50+/bulan Tinggi Nol 1 jam
Alanova (no-code) Free plan tersedia Tinggi Nol 15 menit

Python vs No-Code: Kapan Pilih Mana?

Pilih Python kalau:

  • Butuh integrasi langsung ke database atau pipeline internal
  • Ada transformasi data custom yang sangat spesifik
  • Volume sangat besar dengan kebutuhan real-time
  • Tim ada developer yang bisa handle maintenance

Pilih Alanova (no-code) kalau:

  • Tidak punya background teknis atau tidak mau urusan coding
  • Butuh hasil cepat β€” setup 15 menit langsung jalan
  • Tujuan utamanya leads untuk outreach sales
  • Butuh ekstraksi email dari website bisnis (Alanova lakukan ini otomatis)
  • Tidak mau maintenance saat Google update interface Maps

Pro tip: Sebelum investasi waktu untuk setup script Python, hitung total cost of ownership: waktu setup awal, waktu maintenance setiap kali script break, waktu debugging. Untuk sebagian besar kebutuhan sales leads, angka ini hampir selalu lebih besar dari biaya berlangganan tools yang sudah production-ready.

Butuh jasa scraping data Google Maps? Lihat perbandingan semua opsi di panduan jasa scraping data Google Maps Indonesia.

Baca Juga

One response to “Cara Scraping Google Maps dengan Python: Selenium, API, dan Alternatif Terbaik”

Leave a Reply

Your email address will not be published. Required fields are marked *