top of page

Como obter Leads do Google Maps de forma rápida com Python


Recentemente precisei realizar uma raspagem de dados de empresas de determinada cidade disponíveis no Google Maps. Os dados seriam utilizados para prospecção de clientes por uma consultoria.


Ao pesquisar sobre como fazer tal automação em Python, ouvi sobre a API do Google Maps, no entanto, deparei-me com um problema: as requisições feitas à API do Google Maps traziam todos os leads, mas não traziam seus telefones, avaliações e sites, que são informações bastante importantes para a tarefa de prospecção. Ainda, não haviam muitos exemplos práticos na internet de sua utilização para essa finalidade.


Sendo assim, em busca de uma alternativa mais amigável para resolver o problema, encontrei o SerpAPI, uma API desenvolvida exclusivamente com a finalidade de raspar dados do Google, como endereços, empregos, trends, dentre outros. Para fazer uso da API, é necessário se registrar no site, onde disponibilizarão uma chave a ser usada nas requisições. No plano gratuito, pode-se fazer 100 requisições (de até 20 leads) por mês, totalizando 2000 leads. A documentação, com todos os parâmetros pode ser encontrada aqui.


Utilizando tal solução, tive êxito em obter os leads e disponibilizarei o código utilizado abaixo:


#instalar os pacotes

#pip install google-search-results


#leitura das bibliotecas

from pandas import json_normalize

from serpapi import GoogleSearch

import pandas as pd


#parâmetros da requisição

#engine = onde faremos as buscas

#q = busca a ser feita

#ll = coordenadas do local de interesse (latitude, longitude) + zoom desejado (entre 3z a 21z)

#type = parametro de busca, deve ser 'search'

#api_key = sua chave da API gerada no site SerpAPI


params = {

"engine": "google_maps",

"q": "Seguros",

"ll": "@-15.793088322861726, -47.89273889988626 , 14z",

"type": "search",

"api_key": "SUA_CHAVE_DA_API"

}


search = GoogleSearch(params)

results = search.get_dict()

local_results = results["local_results"]

df = json_normalize(local_results)


Com esse código, realizei a busca por ‘Seguros’, ou seja, empresas de seguro, na região de Brasília. Teremos, então, uma lista de 20 empresas, seus horários de funcionamento (inclusive finais de semana), telefone, avaliações dos usuários, endereço, dentre outros.


Como a requisição só traz 20 resultados, precisamos adicionar o parâmetro ‘start’ para conseguirmos obter mais resultados, inserindo o código dentro de uma estrutura de repetição, para solicitar as primeiras 20, depois as seguintes, depois as próximas, e assim adiante. Com isso, nosso código terá a seguinte forma:


lista_leads = []


for i inrange(0,100,20):


try:

params = {

"engine": "google_maps",

"q": "Seguros",

"ll": "@-15.793088322861726, -47.89273889988626 , 14z",

"type": "search",

"api_key": "SUA_CHAVE_DA_API",

"start": str(i)

}


search = GoogleSearch(params)

results = search.get_dict()

local_results = results["local_results"]

df = json_normalize(local_results)

lista_leads.append(df)


except Exception:

break


#concatena as listas de 20 resultados

leads = pd.concat(lista_leads)


#filtra algumas colunas que contém informações valiosas para prospecção

leads = leads[['title', 'rating', 'reviews', 'type',

'address', 'open_state', 'hours',

'phone', 'website', 'thumbnail',

'gps_coordinates.latitude','gps_coordinates.longitude']]


#cria uma nova coluna índice

leads = leads.reset_index(drop = True)


#remove valores duplicados que podem ocorrer durante as requisições

leads = leads.drop_duplicates()


Ao final do processo, teremos uma base com nossos leads, nessa estrutura:




Se quisermos, então, visualizar onde eles se encontram dentro de um mapa, podemos utilizar o Plotly:


#instalar biblioteca

#pip install plotly


#carregar o pacote

import plotly.express as px


#plotar o mapa com os leads

fig = px.scatter_mapbox(leads, lat="gps_coordinates.latitude",

lon="gps_coordinates.longitude",

hover_name="title",

zoom=10)

fig.update_layout(mapbox_style="open-street-map")

fig.show()




Ainda, podemos deixar cada ponto de Lead do tamanho de sua pontuação, ou da quantidade de reviews que este possui para visualizarmos sua relevância. Para tal, usamos o parâmetro ‘size’, conforme abaixo:


#remove NaNs

leads_2 = leads.fillna(0)


#plotar o mapa com os leads

fig = px.scatter_mapbox(leads_2, lat="gps_coordinates.latitude",

lon="gps_coordinates.longitude",

hover_name="title",

zoom=10,

size='reviews')

fig.update_layout(mapbox_style="open-street-map")

fig.show()




Para mais informações, checar o SerpAPI e a documentação do Plotly Express (https://plotly.com/python/plotly-express/).


Por Vinícius Felizatti, especialista em Data Science

Comments


bottom of page