google-maps-scraper
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese🗺️ Google Maps Scraper
🗺️ Google Maps 数据抓取工具
Scrape data lokasi dari Google Maps tanpa API key. Pakai Playwright untuk bypass bot detection.
无需API密钥即可从Google Maps抓取地点数据。使用Playwright绕过机器人检测。
Dependencies
依赖项
bash
pip install playwright
python -m playwright install chromiumKalau headless server/VPS, butuh extra deps:
bash
sudo apt install -y libnss3 libatk-bridge2.0-0 libdrm2 libxkbcommon0 libgbm1 libasound2bash
pip install playwright
python -m playwright install chromium如果是无头服务器/VPS,需要额外依赖:
bash
sudo apt install -y libnss3 libatk-bridge2.0-0 libdrm2 libxkbcommon0 libgbm1 libasound2Cara Pakai
使用方法
CLI (direct)
CLI(直接调用)
bash
python gmaps_scraper.py "coffee shop" "Yogyakarta" --max 20
python gmaps_scraper.py "restoran" "Jakarta Selatan" --max 10 -o hasil.csv
python gmaps_scraper.py "tempat wisata" "Bali" --max 15bash
python gmaps_scraper.py "coffee shop" "Yogyakarta" --max 20
python gmaps_scraper.py "restoran" "Jakarta Selatan" --max 10 -o hasil.csv
python gmaps_scraper.py "tempat wisata" "Bali" --max 15Via AI Agent
通过AI Agent调用
"Cari coffee shop di Jogja dari Google Maps"
"Scrape restoran di Jakarta Selatan rating >4.5"
"Tempat wisata di Bali yang buka 24 jam""在日惹寻找Google Maps上的咖啡店"
"抓取雅加达南部评分>4.5的餐厅"
"巴厘岛24小时营业的旅游景点"Arguments
参数说明
| Arg | Default | Description |
|---|---|---|
| required | Search query (e.g. "coffee shop") |
| required | Location (e.g. "Yogyakarta") |
| 50 | Max results |
| auto | Output CSV path |
| True | Run without browser UI |
| - | Show browser (debug) |
| 1.5 | Scroll delay (seconds) |
| 参数 | 默认值 | 描述 |
|---|---|---|
| 必填 | 搜索关键词(例如:"coffee shop") |
| 必填 | 地点(例如:"Yogyakarta") |
| 50 | 最大结果数量 |
| 自动生成 | 输出CSV文件路径 |
| True | 无浏览器界面运行 |
| - | 显示浏览器界面(调试用) |
| 1.5 | 滚动延迟(秒) |
Output Format
输出格式
CSV/JSON dengan fields:
| Field | Contoh |
|---|---|
| Name | Kopi Kultur |
| Rating | 4.8 |
| Reviews | 1234 |
| Price_range | Rp 25–50 rb |
| Category | Kedai Kopi |
| Address | Jl. Kaliurang KM 5 |
| Phone | 0812-xxxx-xxxx |
| Website | kopikultur.com |
| Hours | Buka · Tutup pukul 22.00 |
CSV/JSON格式包含以下字段:
| 字段 | 示例 |
|---|---|
| Name | Kopi Kultur |
| Rating | 4.8 |
| Reviews | 1234 |
| Price_range | Rp 25–50 rb |
| Category | 咖啡店 |
| Address | Jl. Kaliurang KM 5 |
| Phone | 0812-xxxx-xxxx |
| Website | kopikultur.com |
| Hours | 营业中 · 22:00打烊 |
Teknis
技术实现
- Buka Google Maps search URL
- Scroll results panel untuk load lebih banyak listing
- Klik setiap card → extract data dari detail panel
- Parse: Name, Rating, Reviews, Price, Category, Address, Phone, Website, Hours
- Save ke CSV + JSON
- 打开Google Maps搜索URL
- 滚动结果面板加载更多列表
- 点击每个卡片 → 从详情面板提取数据
- 解析:名称、评分、评论数、价格、类别、地址、电话、网站、营业时间
- 保存为CSV + JSON格式
Limitasi
限制说明
- Tanpa login Google: max ~20 results per search
- Rate limit: jangan scrape terlalu cepat (default delay 1.5s)
- Data bisa berubah sewaktu-waktu (Google update struktur)
- CSS selectors mungkin perlu update kalau Google Maps redesign
- 未登录Google账号:每次搜索最多约20条结果
- 速率限制:不要过快抓取(默认延迟1.5秒)
- 数据可能随时变化(Google会更新页面结构)
- 若Google Maps改版,CSS选择器可能需要更新
Troubleshooting
故障排除
| Problem | Fix |
|---|---|
| |
| |
| Google Maps loading lambat, coba tambah timeout atau cek network |
| Coba query yang lebih spesifik |
| Google Maps pakai |
| Auto-retry dengan coordinate URL + search box fallback |
| 问题 | 解决方法 |
|---|---|
| 执行 |
| 执行 |
| Google Maps加载缓慢,尝试增加超时时间或检查网络 |
| 尝试使用更具体的搜索关键词 |
| Google Maps改用 |
| 自动重试,使用坐标URL + 搜索框回退方案 |
Changelog
更新日志
2026-04-16 — Robust Selector + Redirect Fix
2026-04-16 — 增强选择器+重定向修复
- Fix: Selector → auto-detect
a[class*="hfpxzc"](new) /button(old) / aria-label fallbacka - Fix: Handle redirect ke detail page → auto-retry dengan coordinate URL + search box
- New: — unified card detection
get_listing_cards() - New: — detect if redirected to single listing
is_detail_page() - New: Debug screenshot saved if no cards found
- 修复:选择器从改为自动检测
a[class*="hfpxzc"](新版)/button(旧版)/aria-label回退方案a - 修复:处理跳转到详情页的问题→自动重试,使用坐标URL + 搜索框回退方案
- 新增:——统一卡片检测功能
get_listing_cards() - 新增:——检测是否跳转到单个地点详情页
is_detail_page() - 新增:若未找到卡片则保存调试截图
2026-04-16 — URL-Based Extraction (v2)
2026-04-16 — 基于URL的提取(v2)
- Fix: Click-based extraction only got 7 results (DOM breaks after clicking)
- New: — collect all place URLs first, then visit one-by-one
get_card_links() - New: — extract data when already on a place URL
extract_from_detail() - New: — fallback click-based approach
extract_listings_click() - Result: 7 → 45+ results per search
- Default: changed from 20 to 50
--max
Made with ❤️ by @bungkust
- 修复:基于点击的提取仅能获取7条结果(点击后DOM结构损坏)
- 新增:——先收集所有地点URL,再逐个访问
get_card_links() - 新增:——在地点详情页提取数据
extract_from_detail() - 新增:——基于点击的回退方案
extract_listings_click() - 结果:结果数量从7条提升至45+条/次搜索
- 默认值:从20改为50
--max
由@bungkust ❤️ 制作