Como raspar o Google Maps usando Python?

Senior Web Scraping Engineer
Raspagem do Google Maps é o processo de extração de informações como nomes de empresas, locais e avaliações do Google Maps usando ferramentas ou scripts automatizados.
Neste post do blog, discutiremos os benefícios da raspagem do Google Maps e mostraremos como fazer isso usando Python e ferramentas automatizadas.
Quais são os benefícios da raspagem do Google Maps?
A raspagem do Google Maps fornece informações comerciais valiosas e insights baseados em localização. Aqui estão os principais benefícios:
✅ Extrair informações comerciais – Reúna detalhes essenciais, como nome da empresa, endereço, número de telefone, site, avaliações, comentários e horários de funcionamento. Esses dados são úteis para geração de leads, listagens de diretórios e alcance do cliente.
✅ Realizar análise de mercado e pesquisa de concorrentes – Analise as tendências de mercado, identifique os principais concorrentes e avalie a densidade de negócios em locais específicos. Isso ajuda as empresas a tomar decisões informadas sobre expansão, estratégias de preços e engajamento do cliente.
✅ Melhorar a visualização e otimização de dados geográficos – Melhore a cobertura de serviço, otimize as rotas de entrega e planeje a localização das lojas com base nas distribuições de negócios do mundo real. As empresas podem usar esses dados para melhorar a eficiência operacional e a acessibilidade do cliente.
Desafios da raspagem do Google Maps
A raspagem do Google Maps apresenta desafios significativos devido aos seus rigorosos mecanismos anti-raspagem. O Google impõe limites de taxa, CAPTCHAs e restrições de API para evitar a extração automatizada de dados, tornando a raspagem em larga escala difícil sem encontrar bloqueios.
Outro desafio é a natureza dinâmica do Google Maps, que usa JavaScript para carregar informações comerciais. Os métodos tradicionais de raspagem que dependem da análise de HTML estático são ineficazes, exigindo o uso de navegadores sem cabeça ou estruturas de automação para interagir com a página e extrair dados.
Para contornar essas restrições, os raspadores devem implementar técnicas como rotação de proxy e falsificação de User-Agent. Esses métodos ajudam a distribuir solicitações em vários IPs e simular o comportamento do usuário real, reduzindo a probabilidade de detecção e garantindo um processo de raspagem mais estável.
2 Métodos Especiais para Raspar o Google Maps
1. API de Raspagem do Google Maps
O Google fornece uma API de Raspagem?
Sim.
Muitos sites populares, como Twitter e Amazon, oferecem suas próprias APIs, e o Google não é exceção. Quando a API do Google Maps foi lançada, ela rapidamente ganhou ampla atenção e adoção. No entanto, antes de usar a API oficial, pergunte a si mesmo: você realmente precisa usar a API do Google Maps?
Por que o uso da API oficial do Google Maps não atende às suas necessidades?
Vamos começar com os preços. Cada usuário recebe uma cota gratuita mensal de US$ 200 para a API do Google Maps, que inclui:
- Até 40.000 solicitações de geocodificação
- Até 100.000 carregamentos de mapas estáticos
- Até 28.000 carregamentos de mapas dinâmicos
- Até 40.000 solicitações de planejamento de rotas
À primeira vista, essa cota parece suficiente, mas na prática, pode não ser o suficiente. Como muitas outras APIs, a API do Google Maps cobra por solicitação assim que a cota gratuita é excedida, e seu preço é relativamente alto. Considere este cenário: ao usar a API Incorporada, um único carregamento de mapa pode disparar várias chamadas de API, como pesquisas de endereço, planejamento de rotas ou cálculos de distância, consumindo rapidamente sua cota. À medida que seu negócio escala, as chamadas da API aumentam e a API do Google Maps pode se tornar uma despesa cara.
Além dos preços, a API do Google Maps também tem limitações rigorosas de solicitações. Atualmente, o Google impõe um limite de taxa de 100 solicitações por segundo, o que significa que, em cenários de alta concorrência, o acesso pode ser restrito, afetando a eficiência de recuperação de dados.
Posso ainda usar uma API para raspar o Google Maps?
Absolutamente! Você só precisa de um serviço de API que seja acessível, estável e seguro. No entanto, encontrar um que atenda a todos esses critérios é incrivelmente desafiador! Felizmente, Scrapeless Google Maps API se destaca entre muitos produtos de API:
🔴 Economia de custos: Cada chamada de API custa apenas US$ 0,80, e com uma assinatura de US$ 49, você recebe um desconto de 10%!
🔴 Dados precisos: Nossos desenvolvedores analisam constantemente os algoritmos e restrições de raspagem do Google para garantir que a API seja atualizada e otimizada.
🔴 Taxa de sucesso estável e alta: Scrapeless garante uma taxa de sucesso e confiabilidade de 99%. A estabilidade e a precisão da raspagem do Google Trends atingiram quase 100%! Atualmente, o tempo médio de resposta é de cerca de 3 segundos, significativamente mais rápido do que a maioria dos provedores de API. Além disso, os dados são retornados em um formato JSON padronizado, tornando-os prontos para uso imediato.
Scrapeless já conquistou a confiança de mais de 2.000 usuários corporativos! Junte-se ao Discord agora para reivindicar sua versão de teste gratuita! Apenas 1.000 vagas estão disponíveis por tempo limitado — aja rápido!
Leitura adicional:
- Como raspar os resultados da pesquisa do Google?
- Como raspar tendências do Google com Python?
- Obtenha o voo mais barato com o Google Flights Scraper!
2. Web Scraping
Web Scraper é um dos métodos mais comuns para raspagem de sites. Você pode construir sua própria ferramenta de raspagem do Google Maps para extrair dados específicos. Neste artigo, usaremos o Python Google Maps Scraper para raspar locais e rotas específicas do mapa.
Continue rolando!
Método 1. Raspagem com a API do Google Maps
Passo 1. Obtenha sua chave de API
Para começar, você precisará obter sua chave de API no painel Scrapeless:
- Faça login no Painel Scrapeless.
- Navegue até Gerenciamento de chaves de API.
- Clique em Criar para gerar sua chave de API exclusiva.
- Depois de criada, basta clicar na chave de API para copiá-la.

Passo 2: Insira sua chave de API
Agora você pode usar sua chave de API para integrar o Scrapeless ao seu projeto. Siga estas etapas para testar e implementar a API:
- Visite a Documentação da API.
- Clique em "Experimente" para o endpoint desejado.
- Insira sua chave de API no campo "Autenticação".
- Clique em "Enviar" para obter a resposta de raspagem.

Abaixo está um exemplo de snippet de código que você pode integrar diretamente ao seu Google Maps Scraper.
Python
Python
import http.client
import json
conn = http.client.HTTPSConnection("api.scrapeless.com")
payload = json.dumps({
"actor": "scraper.google.maps",
"input": {
"engine": "google_maps",
"q": "coffee",
"type": "search",
"ll": "@40.7455096,-74.0083012,14z",
"hl": "en",
"gl": "us"
}
})
headers = {
'Content-Type': 'application/json'
}
conn.request("POST", "/api/v1/scraper/request", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
JavaScript
JavaScript
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
"actor": "scraper.google.maps",
"input": {
"engine": "google_maps",
"q": "coffee",
"type": "search",
"ll": "@40.7455096,-74.0083012,14z",
"hl": "en",
"gl": "us"
}
});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://api.scrapeless.com/api/v1/scraper/request", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Método 2. Crie seu primeiro Google Maps Scraper com Python
Configuração do ambiente
Primeiro, precisamos configurar um ambiente de raspagem da web, preparando as seguintes ferramentas:
Python
: Faça o download no site oficial do Python. É recomendável instalar uma versão uma ou duas versões atrás da mais recente, em vez da versão mais nova.

IDE Python
: Qualquer IDE compatível com Python funcionará, mas recomendamos o PyCharm, uma ferramenta de desenvolvimento Python especializada. A edição gratuita do PyCharm Community é suficiente.

Observação para usuários do Windows:
Durante a instalação, certifique-se de que a opção "Adicionar python.exe ao PATH" esteja selecionada. Isso permite que você use comandos Python no terminal. Como o Python 3.4 e posterior incluem isso por padrão, nenhuma configuração manual é necessária.

Para verificar se o Python está instalado, abra o terminal ou prompt de comando e execute:
Bash
python --version
- Um ambiente virtual: A criação de um ambiente virtual é recomendada para gerenciar dependências e evitar conflitos com outros projetos Python. Navegue até o diretório do seu projeto no terminal e execute o seguinte comando para criar um ambiente virtual chamado "google_flights_env":
Bash
python -m venv google_flights_env
Ative o ambiente virtual usando o comando apropriado para seu sistema operacional:
- Windows:
Bash
google_flights_env\Scripts\activate
- macOS/Linux:
Bash
source google_flights_env/bin/activate
- Instalando bibliotecas necessárias: Após ativar o ambiente virtual, instale as bibliotecas Python necessárias para raspagem da web:
requests
eBeautifulSoup4
. Instale-as seguindo nosso comando:
Bash
pip install requests
pip install beautifulsoup4
- Instalando ferramentas de automação: Como o Google Maps não retorna uma página HTML direta para análise, são necessárias ferramentas de automação para recuperar o HTML bruto.
- Instale o Selenium, um pacote de automação Python:
Bash
pip install selenium
- Você também precisa baixar o driver do navegador. Tomando o Google Chrome mais usado como exemplo, encontre o ChromeDriver que corresponda à versão do navegador no site oficial, faça o download e instale-o localmente e, em seguida, coloque-o no diretório do código no PyCharm.

Usando Python para raspar dados de localização ou rota de navegação
Raspagem de locais
Passo 1: Abra o Google Maps e pesquise por "café".

Passo 2. Raspe campos específicos dos resultados da pesquisa do Google Maps.
Podemos usar o BeautifulSoup para analisar o HTML e localizar os elementos que contêm as informações desejadas. Aqui estão alguns exemplos:
- Raspe o nome da cafeteria:

Extraia o elemento e use Python para raspar os dados de texto:
Python
def scrape_title(listing):
maps_element = listing.select_one('div.NrDZNb div.qBF1Pd.fonHeadlineSmall')
return maps_element.text.strip()
- Raspe as avaliações:

Extraia o elemento e use Python para raspar os dados de texto. Como a avaliação pode estar vazia, adicionamos uma verificação nula:
Python
def scrape_rating(listing):
maps_element = listing.select_one('span.MW4etd[aria-hidden="true"]')
if maps_element is None:
return None
else:
return maps_element.text.strip()
- Raspe o link da imagem:

Extraia o atributo href
do elemento e use Python para raspar o link da imagem:
Python
def scrape_image_links(listing):
maps_image_link = listing.select_one('div.SpFAAb').select_one("img")
return maps_image_link['src']
O acima é apenas uma demonstração parcial. Você pode consultar nosso código final abaixo:
Python
# Import necessary libraries
import time
from bs4 import BeautifulSoup
import json
from selenium import webdriver
driver = webdriver.Chrome()
# Function to scrape listing elements from Google Maps
def scrape_listings(soup):
return soup.select('div.Nv2PK.THOPZb.CpccDe')
# Function to scrape title from google_maps
def scrape_title(listing):
maps_element = listing.select_one('div.NrDZNb').select_one('div.qBF1Pd.fontHeadlineSmall')
return maps_element.text.strip()
# Function to scrape ratings from google_maps
def scrape_rating(listing):
maps_element = listing.select_one('span.MW4etd[aria-hidden="true"]')
if maps_element is None:
return None
else:
return maps_element.text.strip()
def scrape_image_links(listing):
maps_image_link = listing.select_one('div.SpFAAb').select_one("img")
return maps_image_link['src']
# Main function
def main():
# Make a request to Google Maps URL and parse HTML
url = 'https://www.google.com/maps/search/coffee/@47.4641284,-122.3855982,11z?entry=ttu&g_ep=EgoyMDI1MDIwOS4wIKXMDSoASAFQAw=='
driver.get(url)
time.sleep(2)
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')
# Scrape map listings
listings = scrape_listings(soup)
# Iterate through each listing and extract map information
maps_data = []
for listing in listings:
title = scrape_title(listing)
rating = scrape_rating(listing)
image_link = scrape_image_links(listing)
# Store map information in a dictionary
maps_info = {
'title': title,
'rating': rating,
'image_link': image_link
}
maps_data.append(maps_info)
# Save results to a JSON file
with open('google_maps_data.json', 'w') as json_file:
json.dump(maps_data, json_file, indent=4)
if __name__ == "__main__":
main()
Passo 3. Raspe os resultados e armazene os dados.
Um arquivo JSON chamado google_maps_data.json
será gerado em seu diretório PyCharm, contendo os dados raspados. Abaixo está um exemplo dos resultados raspados:
JSON
[
{
"title": "Lucky Mugs",
"rating": null,
"image_link": "https://streetviewpixels-pa.googleapis.com/v1/thumbnail?panoid=36eAZcAEe5VpSUaFnPcOVA&cb_client=search.gws-prod.gps&w=80&h=92&yaw=139.65103&pitch=0&thumbfov=100"
},
{
"title": "Retro Coffee",
"rating": "4.4",
"image_link": "https://lh5.googleusercontent.com/p/AF1QipPxJNNq_ddJeY4metdP0-Yv1gfAb8hwqtdjEk3R=w80-h106-k-no"
},
{
"title": "Caffe Migliore.",
"rating": "4.4",
"image_link": "https://lh5.googleusercontent.com/p/AF1QipN5LhTxOs7TEicnyDcaeIwp5iOVD46aQ-vMpco=w80-h106-k-no"
},
{
"title": "Local Coffee Spot",
"rating": "4.2",
"image_link": "https://lh5.googleusercontent.com/p/AF1QipO9UVq4zJ3G-xw62mFyQEj8jTdlehq7eLlZ4RyL=w163-h92-k-no"
},
{
"title": "BigFoot Java",
"rating": "4.1",
"image_link": "https://lh3.googleusercontent.com/gps-proxy/ALd4DhGHbsVNZu27z_GxIxq3jTyZbJI5MUY_rpPTL7yZQX0Mbx4BEbKTwMTz6vJ16y1u1qVA97qxlMtjejRYMjEk7Riqx2dLl1CeDEcGfIWKWmIF5E3qcna_9faDEBRwLvhoiBcJywVx_TZ7jtM1tKUmynpAZdn-vvYju1pEGKDA34jUT38S8qip3Drk=w92-h92-k-no"
},
{
"title": "Caffe Ladro - Downtown on Pine Street",
"rating": "4.3",
"image_link": "https://lh5.googleusercontent.com/p/AF1QipO84r3OrCAb6IjtMYbki4pAMpuWf8KoK5_ods89=w92-h92-k-no"
},
{
"title": "Coffee Tree",
"rating": "4.4",
"image_link": "https://lh5.googleusercontent.com/p/AF1QipPYbEDGEskTGDCcpBHxF-nQqrFhR2yFi5cBt6Lu=w122-h92-k-no"
}
]
Raspagem de rotas de navegação
Passo 1. Insira a origem e o destino no Google Maps.

Passo 2. Raspe campos específicos dos resultados da pesquisa de rota de navegação do Google Maps.
Continue usando o BeautifulSoup para analisar o HTML e localizar os elementos que contêm as informações desejadas:
- Raspe o campo "via":

Extraia o elemento e use Python para raspar os dados de texto:
Python
def scrape_via(listing):
maps_element = listing.select_one('h1.VuCHmb.fontHeadlineSmall')
return maps_element.text.strip()
- Raspe o tempo:

Extraia o elemento e use Python para raspar os dados de texto:
Python
def scrape_time(listing):
maps_element = listing.select_one('div.Fk3sm.fontHeadlineSmall.delay-light')
return maps_element.text.strip()
- Raspe a distância:

Python
def scrape_distance(listing):
maps_element = listing.select_one('div.ivN21e.tUEI83.fontBodyMedium').select_one('div')
return maps_element.text.strip()
- Aqui está o código final:
Python
# Import necessary libraries
import time
from bs4 import BeautifulSoup
import json
from selenium import webdriver
driver = webdriver.Chrome()
# Function to scrape listing elements from Google Maps
def scrape_listings(soup):
return soup.select('div.UgZKXd')
# Function to scrape via from google_maps
def scrape_via(listing):
maps_element = listing.select_one('h1.VuCHmb.fontHeadlineSmall')
return maps_element.text.strip()
# Function to scrape time from google_maps
def scrape_time(listing):
maps_element = listing.select_one('div.Fk3sm.fontHeadlineSmall.delay-light')
return maps_element.text.strip()
# Function to scrape distance from google_maps
def scrape_distance(listing):
maps_element = listing.select_one('div.ivN21e.tUEI8e.fontBodyMedium').select_one('div')
return maps_element.text.strip()
# Main function
def main():
# Make a request to google maps URL and parse HTML
url = 'https://www.google.com/maps/dir/Austin-Bergstrom+International+Airport/5540+N+Lamar+Blvd,+Austin,+TX+78756/@30.2603068,-97.7871692,12z/data=!3m1!4b1!4m13!4m12!1m5!1m1!1s0x8644b13b8b4aff45:0x1ca7fca8c9dc2768!2m2!1d-97.6710889!2d30.194085!1m5!1m1!1s0x8644cba140fad1fb:0x2db903443245739c!2m2!1d-97.7286733!2d30.3247493?hl=en&entry=ttu&g_ep=EgoyMDI1MDIwOS4wIKXMDSoASAFQAw%3D%3D'
driver.get(url)
time.sleep(2)
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')
# Scrape maps listings
listings = scrape_listings(soup)
# Iterate through each listing and extract maps information
maps_data = []
for listing in listings:
via = scrape_via(listing)
time_consuming = scrape_time(listing)
distance = scrape_distance(listing)
# Store maps information in a dictionary
maps_info = {
'via': via,
'time': time_consuming,
'distance': distance
}
maps_data.append(maps_info)
# Save results to a JSON file
with open('google_maps_dir_data.json', 'w') as json_file:
json.dump(maps_data, json_file, indent=4)
if __name__ == "__main__":
main()
Passo 3. Raspe os resultados e armazene os dados.
Um arquivo JSON chamado google_maps_dir_data.json
será gerado em seu diretório PyCharm, contendo os dados raspados. Abaixo está um exemplo dos resultados raspados:
JSON
[
{
"via": "via 183 Toll",
"time": "17 min",
"distance": "13.4 miles"
},
{
"via": "via State Hwy 71 W and I-35 N",
"time": "19 min",
"distance": "15.5 miles"
},
{
"via": "via S Hwy 183 and 183 Toll",
"time": "17 min",
"distance": "13.6 miles"
}
]
Considerações Finais
Agora você tem as habilidades para raspar o Google Maps como um profissional! Dois métodos neste blog podem definitivamente economizar seu tempo e resgatar sua carteira! Não tem tanto tempo? Confuso com o processo de codificação complicado? Use sua chave de API para chamar nossa API do Google Maps gratuitamente para concluir facilmente a raspagem de dados!
Você é um entusiasta de API ou um raspador da web hardcore? Compartilhe sua experiência em nossa comunidade!
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.