Google Maps Data'ı neden avlayın?
Google Maps dünyadaki yerel işletmelerin en kapsamlı veritabanı içerir. 200 milyondan fazla işletme listelendikten sonra, isimler, adresler, telefon numaraları, web siteleri, derecelendirmeler, incelemeler, çalışma saatleri ve fotoğraflar - tüm yapılandırılmış ve arama edilebilir.
Bu verilerin programmatik olarak kopyalanması değerli iş uygulamaları sağlar:
- Kurşun nesli: Hedeflenen işletme listeleri endüstri ve konum
- Rekabetçi analiz: Harita rakip yerleri, derecelendirmeler ve duygusal bakış
- Pazar araştırması: İş yoğunluğu, fiyatlandırma modelleri ve bölge tarafından hizmet kapsamı
- Yerel SEO denetim: İş listelerinizi onaylayın ve rakiplerle karşılaştırın
- Data zenginleştirme: Tamam CRM verileri taze iş bilgisi ile
Bu kılavuz, Google Haritalar verilerini kullanarak çıkarmak için teknik yaklaşımlar kapsar. Daha geniş SERP kazı stratejileri için, bizi gör Tam SERP proxy rehberi ile kazınır.
Google Yerleri API vs avlanma
Bir hurda inşa etmeden önce, resmi Google Yer API'nin ihtiyaçlarınızı karşıladığını düşünün.
| Faktör Faktör Faktör Faktör | yerler API | Yararlanmak |
|---|---|---|
| Maliyet Maliyet Maliyet Maliyet Maliyet | 1000 istek başına 17 $ (on ücretsiz tier) | Proxy bant genişliği sadece (~$0.10-0.50 $ 1000 sayfa) |
| Data fields | Structured JSON, 20+ alan | Tüm görünür veriler de yorum metinleri dahil |
| Puan limitleri | Sürekli ve günlük sınırlar | havuz proxy büyüklüğü |
| Review text | En alakalı 5 yorum | Tüm yorumları (Pagination ile) |
| Reliability | Resmi, istikrarlı uç noktaları | s bakım gerektirir |
| Hizmet Şartları | Tam olarak uyumlu | ToS ve yerel düzenlemeler kontrol |
| Scale Scale | Pahalı ölçek | Yüksek hacimlerde maliyet etkin |
Yerler API küçük ölçekli, üretim-kırık uygulamalar için en iyi seçimdir. Yararlanma, büyük veri setlerine ihtiyacınız olduğunda, tam inceleme metnine veya API maliyetleri yasaklandığında daha maliyetlidir.
Google Maps URL Structure
Google Maps URL modellerini anlamak bir scraper inşa etmek için önemlidir. İki ana giriş noktası vardır:
Arama Sonuçları
Google Maps arama sonuçları erişilebilir:
# Browser URL format
https://www.google.com/maps/search/restaurants+near+new+york
# URL parameters for search
https://www.google.com/maps/search/{query}/@{lat},{lng},{zoom}zPlace Details
Bireysel iş sayfaları bu modeli takip eder:
# Place detail URL
https://www.google.com/maps/place/{business+name}/@{lat},{lng},{zoom}z/data=!{place_id}Bir Google Maps avlayıcı
Google Maps bir JavaScript-heavy uygulamasıdır. Normal Google Arama'nın aksine, basit HTTP talepleri genellikle eksik verileri döndürür. İki yaklaşım var: gömülü JSON verilerini sayfa kaynağından ayırın veya bir kafasız tarayıcı kullanın.
Yaklaşım 1: Gömülü JSON (Faster)
Google Maps sayfaları HTML kaynağında gömülü veri içeriyor. İşte onu nasıl çıkarmak:
import requests
import json
import re
import time
import random
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def search_google_maps(query, location="us"):
"""Search Google Maps and extract business listings."""
proxies = {"http": PROXY_URL, "https": PROXY_URL}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml",
}
# Use the search URL format
search_url = f"https://www.google.com/maps/search/{query.replace(' ', '+')}"
response = requests.get(
search_url,
headers=headers,
proxies=proxies,
timeout=20,
)
response.raise_for_status()
# Extract embedded JSON data from the page
# Google Maps embeds data in a specific pattern
businesses = []
# Look for business data patterns in the response
# The data is typically in a JavaScript variable
patterns = re.findall(r'\["([^"]+)",null,null,null,null,null,null,null,"([^"]*)"', response.text)
# Alternative: parse the structured search results
# Google Maps returns data in protobuf-like JSON arrays
json_matches = re.findall(r'null,\["([^"]{5,80})"[^]]*?"([^"]*?(?:St|Ave|Rd|Blvd|Dr|Ln)[^"]*?)"', response.text)
for match in json_matches[:20]:
businesses.append({
"name": match[0],
"address": match[1] if len(match) > 1 else "",
})
return businesses
results = search_google_maps("restaurants near Times Square New York")
for b in results:
print(f"{b['name']} - {b['address']}")Yaklaşım 2: Headless Browser (More reliable)
Daha güvenilir ekstraksiyon için, JavaScript oluşturan bir kafasız tarayıcı kullanın:
from playwright.sync_api import sync_playwright
import json
import time
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def scrape_maps_with_browser(query):
"""Use Playwright to scrape Google Maps with full JS rendering."""
with sync_playwright() as p:
browser = p.chromium.launch(
headless=True,
proxy={
"server": "http://gate.proxyhat.com:8080",
"username": "USERNAME",
"password": "PASSWORD",
},
)
page = browser.new_page()
page.set_extra_http_headers({
"Accept-Language": "en-US,en;q=0.9",
})
# Navigate to Google Maps search
search_url = f"https://www.google.com/maps/search/{query.replace(' ', '+')}"
page.goto(search_url, wait_until="networkidle", timeout=30000)
# Wait for results to load
page.wait_for_selector('div[role="feed"]', timeout=10000)
# Scroll to load more results
feed = page.query_selector('div[role="feed"]')
for _ in range(5):
feed.evaluate("el => el.scrollBy(0, 1000)")
time.sleep(1.5)
# Extract business data from the results
businesses = []
items = page.query_selector_all('div[role="feed"] > div > div > a')
for item in items:
name = item.get_attribute("aria-label")
href = item.get_attribute("href")
if name and href:
businesses.append({
"name": name,
"url": href,
})
browser.close()
return businesses
results = scrape_maps_with_browser("coffee shops in San Francisco")
for b in results:
print(f"{b['name']}")
print(f" {b['url'][:80]}...")
print()İş Detayları
Bir işletme URL'leri listesine sahipseniz, her listeden ayrıntılı bilgi alın:
import requests
import re
import json
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def extract_business_details(maps_url):
"""Extract detailed business info from a Google Maps place page."""
proxies = {"http": PROXY_URL, "https": PROXY_URL}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
response = requests.get(maps_url, headers=headers, proxies=proxies, timeout=20)
text = response.text
business = {}
# Extract business name
name_match = re.search(r'Google Haritalar için Proxy Stratejisi
Google Maps, belirli bir proxy stratejisi gerektiren kendi anti-bot korumalarına sahiptir.
Konut Proxies Neden Gereklidir
Google Maps özellikle veri merkezi IP'leri engelleme konusunda agresiftir. Uygulama, birden fazla API çağrısı aracılığıyla veri tutar ve Google tüm bu istekler boyunca IP'yi çapraz etkiler. Konut temsilcileri evden ProxyHat Temeldir çünkü:
- IP itibarını, bu Haritalar API çağrılarının uygulanmasının uygulanmasını kontrol ediyor
- Yere özgü aramalar için şehir düzeyinde geo-targeting destekliyorlar
- Haritaların beklediği tutarlı seans davranışını koruyorlar
Oturum Yönetimi
Talep başına IP'leri nereye döndüğünü kazırken, Google Maps yapışkan seanslarla daha iyi çalışır:
# For Google Maps, use sticky sessions (same IP for a business detail page)
# ProxyHat supports session-based rotation via the proxy URL
# See docs.proxyhat.com for session configuration
# Rotating IP (for search listings)
ROTATING_PROXY = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
# Sticky session (for individual place pages)
# Same session ID = same IP for the session duration
STICKY_PROXY = "http://USERNAME-session-maps123:PASSWORD@gate.proxyhat.com:8080"Puan Limiting
Google Maps normal Google Arama'dan daha hızlı taleplere daha duyarlıdır. Bu yönergeleri izleyin:
- Arama sonucu sayfaları arasında 5-10 saniye bekleyin
- Bireysel yer sayfası arasında 3-5 saniye bekleyin
- Limit concurrent requests to avoid burst pattern
- Sayfalar arasında daha uzun gecikmeler kullanın (8-15 saniye)
Node.js Uygulama
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
async function searchGoogleMaps(query) {
const searchUrl = `https://www.google.com/maps/search/${encodeURIComponent(query)}`;
const { data } = await axios.get(searchUrl, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Language': 'en-US,en;q=0.9',
},
httpsAgent: agent,
timeout: 20000,
});
// Extract business names from the response
const businesses = [];
const namePattern = /\["([^"]{3,80})",null,null,null,null,null,null,null/g;
let match;
while ((match = namePattern.exec(data)) !== null) {
businesses.push({ name: match[1] });
}
return businesses;
}
async function main() {
const results = await searchGoogleMaps('plumbers in Chicago');
console.log(`Found ${results.length} businesses:`);
results.forEach((b, i) => console.log(`${i + 1}. ${b.name}`));
}
main().catch(console.error);Scaleing Yorumlar at Scale
Google Maps incelemeleri en değerli veri noktaları arasındadır. Her inceleme, inceleme adı, derecelendirme, metin, tarih ve bazen fotoğraflar içerir.
import requests
import re
import json
import time
import random
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def extract_reviews(place_id, num_reviews=50):
"""Extract reviews for a Google Maps place using the internal API."""
proxies = {"http": PROXY_URL, "https": PROXY_URL}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
reviews = []
# Google Maps loads reviews via AJAX with pagination tokens
# The first page is loaded with the place page
maps_url = f"https://www.google.com/maps/place/?q=place_id:{place_id}"
response = requests.get(maps_url, headers=headers, proxies=proxies, timeout=20)
# Extract review data from embedded JSON
# Reviews are typically in arrays with rating, text, and author
review_pattern = re.findall(
r'"(\d)","([^"]{10,500})"[^]]*?"([^"]{2,50})"',
response.text
)
for match in review_pattern[:num_reviews]:
reviews.append({
"rating": int(match[0]),
"text": match[1],
"author": match[2],
})
return reviews
# Example: extract reviews
reviews = extract_reviews("ChIJN1t_tDeuEmsRUsoyG83frY4") # Example place ID
for r in reviews[:5]:
print(f"{'*' * r['rating']} by {r['author']}")
print(f" {r['text'][:100]}...")
print()Data Structuring and Storage
Organize Google Haritalar verilerini analiz için yapılandırılmış bir format haline getirdi:
import json
import csv
from datetime import datetime
def save_businesses(businesses, output_format="json"):
"""Save scraped business data in structured format."""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
if output_format == "json":
filename = f"maps_data_{timestamp}.json"
with open(filename, "w") as f:
json.dump(businesses, f, indent=2, ensure_ascii=False)
elif output_format == "csv":
filename = f"maps_data_{timestamp}.csv"
if businesses:
keys = businesses[0].keys()
with open(filename, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=keys)
writer.writeheader()
writer.writerows(businesses)
print(f"Saved {len(businesses)} businesses to {filename}")
return filenameYasal ve Etik Bakışlar
Google Haritalar verilerini hapsetmek önemli yasal ve etik soruları gündeme getiriyor:
- Google Hizmet Şartları: Google'ın ToS otomatik kazıyı yasaklamaktadır. Üretim uygulamaları için resmi yerleri API'yi kullanmayı düşünün
- Data protection: Telefon numaraları ve adresleri gibi iş verileri bazı yargılarda veri koruma düzenlemelerine tabi olabilir
- Limitleme: Kaynaklarla bile, Google'ın altyapısına saygılı olun. Excessive scraping hizmet kalitesini etkiler
- Data freshness: Her zaman verilerinizi zamanlayın ve düzenli olarak yenilemeyin, iş bilgisi sık sık değişir
Görev-kritik uygulamalar için, resmi yerleri API'yi inceleme metinleri gibi ek alanlar için hedef alan veriler için bir araya getirmeyi düşünün. Bu hibrit yaklaşım veri tamlığı ile uyumludur.
Web'de daha iyi uygulamaları kazımak için, bizi gör Web scrapingants için tam kılavuzVe bloklardan kaçınmayı öğren Anti-blocking rehberi. ProxyHat Belgeleri yapılandırma detayları için.






