Voltar ao blogue
Guias
Andrei OgiolanLast updated on Mar 31, 20267 min read

Como extrair dados da Web dos resultados de locais do Google Maps

Como extrair dados da Web dos resultados de locais do Google Maps

Introdução

O Google Maps é um dos serviços de mapas e navegação mais utilizados no mundo, proporcionando aos utilizadores uma forma fácil de encontrar e explorar locais, empresas e pontos de interesse. Uma das principais funcionalidades do Google Maps é a capacidade de pesquisar locais e visualizar informações detalhadas sobre os mesmos, tais como a sua localização, avaliações, fotografias e muito mais.

Extrair estes dados do Google Maps pode ser útil para diversos fins. Por exemplo, as empresas podem utilizar estes dados para acompanhar e analisar o desempenho das suas localizações, os investigadores podem utilizá-los para estudar padrões no comportamento dos consumidores e os particulares podem utilizá-los para encontrar e explorar novos locais.

O objetivo deste artigo é fornecer um guia passo a passo sobre como extrair resultados de locais do Google Maps com a nossa API utilizando Node.js. Abordaremos tudo, desde a configuração do ambiente de desenvolvimento até à extração de dados relevantes, e descreveremos potenciais problemas. No final deste artigo, terá o conhecimento e as ferramentas necessárias para extrair resultados de locais do Google Maps por conta própria.

Por que razão deve utilizar um scraper profissional em vez de criar o seu próprio?

Utilizar um scraper profissional pode ser uma opção melhor do que criar o seu próprio por várias razões. Em primeiro lugar, os scrapers profissionais são concebidos para lidar com uma grande variedade de tarefas de scraping e estão otimizados para desempenho, fiabilidade e escalabilidade. São projetados para lidar com grandes quantidades de dados e podem lidar com vários tipos de websites e tecnologias web. Isto significa que os scrapers profissionais podem frequentemente extrair dados de forma mais rápida e precisa do que um scraper personalizado.

Além disso, os scrapers profissionais vêm frequentemente com funcionalidades integradas, tais como resolução de CAPTCHA, rotação de IP e tratamento de erros, o que pode tornar o processo de scraping mais eficiente e menos propenso a erros. Oferecem também suporte e documentação, o que pode ser útil quando se depara com algum problema.

Outro aspeto importante é que os fornecedores de scrapers profissionais cumprem as políticas de scraping dos sites que rastreiam e podem garantir a utilização legal dos dados, o que é importante ter em conta ao fazer scraping de dados.

Por fim, no nosso caso específico, para extrair resultados de locais do Google Maps, é necessário passar um parâmetro de dados para a sua URL do Google da seguinte forma:

https://www.google.com/maps/place/Waldo+Pizza/@43.821489,-43.4299553,3z/data=!4m5!3m4!1s0x87c0ef253b04093f:0xafdfd6dc1d3a2b4e!8m2!3d38.9930011!4d-94.5936805

O parâmetro de dados geralmente tem um formato semelhante a este: !4m5!3m4!1s + data_id + !8m2!3 + latitude + !4d + longitude. Sei que isto pode parecer intimidante à primeira vista, pois pode não ter ideia de como obter a propriedade data_id para um local específico, e tem razão, porque o Google oculta esta informação e ela não é visível na página quando procura um local no Google Maps. Mas, felizmente, usar um scraper profissional como o nosso resolve isso, encontrando esses dados por si. Falaremos nas secções seguintes sobre como obter o data_id, as coordenadas e como construir facilmente o parâmetro de dados.

Definir o nosso alvo

O que são os resultados de locais do Google Maps?

Os resultados de locais do Google Maps são os resultados que são apresentados quando um utilizador pesquisa um local no Google Maps. Estes resultados podem incluir locais como empresas, restaurantes, hotéis, pontos de referência e outros pontos de interesse. Cada resultado de local inclui informações como o nome do local, morada, número de telefone, site, avaliações e fotos. Os resultados de locais também incluem uma imagem do Street View do Google Maps do local e um mapa que mostra a localização do local. Os resultados de locais também podem incluir um link para a página do Google My Business do local.

Quando um utilizador pesquisa um local no Google Maps, é-lhe apresentada uma lista de resultados de locais que correspondem à sua consulta de pesquisa. Estes resultados são apresentados no mapa e num formato de lista, e podem ser filtrados por vários critérios, tais como classificação, preço e distância.

A recolha destes dados pode ser útil para empresas que pretendem acompanhar e analisar o desempenho das suas localizações, investigadores que pretendem estudar padrões no comportamento do consumidor e indivíduos que pretendem encontrar e explorar novos locais.

Como é o nosso alvo?

Configuração

Antes de começarmos a extrair os resultados de locais do Google Maps, precisamos de nos certificar de que temos as ferramentas necessárias à nossa disposição. A primeira coisa de que precisamos é do Node.js, um ambiente de execução de JavaScript que nos permite executar JavaScript no lado do servidor, o qual pode ser instalado a partir do site oficial. A segunda coisa de que precisa é de uma chave API, que pode obter facilmente criando uma conta aqui e ativando o serviço SERP.

Depois de ter tudo isto configurado, para executar um script Node.js, basta criar um ficheiro js. Pode fazê-lo executando o seguinte comando:

$ touch scraper.js

E agora cole a seguinte linha no seu ficheiro:

console.log("Hello World!")

E, em seguida, execute o seguinte comando:

$ node scraper.js

Se conseguir ver a mensagem «Hello World!» a aparecer no terminal, significa que instalou o Node.js com sucesso e está pronto para avançar para o último passo.

Agora, o último passo é obter as informações data_id sobre o local em que está interessado. É aqui que a nossa API entra em ação. A sua utilização é muito simples e não requer a instalação de quaisquer bibliotecas externas.

Em primeiro lugar, num ficheiro js, tem de importar o módulo integrado `https` do Node.js para poder enviar pedidos à nossa API. Isto pode ser feito da seguinte forma:

​​const https = require("https");

Em segundo lugar, tem de especificar a sua chave API, um termo de pesquisa e as coordenadas do local que lhe interessa:

const API_KEY = "<YOUR-API-KEY-HERE>" // You can get by creating an account - https://app.webscrapingapi.com/register

const query = "Waldo%20Pizza"

const coords = "@38.99313451901278,-94.59368586441806"

Agora, o que precisa de fazer é passar esta informação num objeto de opções para que a nossa API compreenda de que local precisa de extrair informações:

const options = {

  "method": "GET",

  "hostname": "serpapi.webscrapingapi.com",

  "port": null,

  "path": `/v1?engine=google_maps&api_key=${API_KEY}&type=search&q=${query}&ll=${coords}`,

  "headers": {}

};

Em seguida, tem agora de configurar uma chamada à nossa API com todas estas informações:

const req = https.request(options, function (res) {

 const chunks = [];

 res.on("data", function (chunk) {

   chunks.push(chunk);

 });

 res.on("end", function () {

   const body = Buffer.concat(chunks);

   const response = JSON.parse(body.toString());

   const data_id = response.place_results.data_id;

   if (data_id) {

       console.log(data_id);

   }

   else {

       console.log('We could not find a data_id property for your query. Please try using another query')

   }

 });

});

req.end();

Por fim, basta executar o script que criou e aguardar os resultados:

​​$ node scraper.js

E deverá ver a propriedade data_id a ser apresentada no ecrã:

$ ​​0x87c0ef253b04093f:0xafdfd6dc1d3a2b4es

E é isso, nesta altura já tem tudo o que precisa para criar o parâmetro de dados e está pronto para avançar para a próxima secção, que contém o objetivo deste artigo.

Vamos começar a extrair resultados do Google Places

Agora que já tem o seu ambiente configurado, está pronto para começar a extrair resultados de locais do Google Maps com o Node.js. Como já mencionado acima, para extrair resultados de locais do Google Maps, precisa agora de configurar o parâmetro data. Tendo tudo disponível neste momento, pode fazê-lo da seguinte forma:

const data_id = "0x87c0ef253b04093f:0xafdfd6dc1d3a2b4e" // the data_id we retrieved earlier

const latitude = '38.99313451901278'

const longitude = '-94.59368586441806'

const data = '!4m5!3m4!1s' + data_id + '!8m2!3d' + latitude  + '!4d' + longitude

Agora, precisa de modificar o seu objeto de opções para indicar à nossa API que está à procura de resultados de locais. Com este novo parâmetro de dados, a nossa API saberá exatamente sobre que local precisa de extrair informações:

const options = {

  "method": "GET",

  "hostname": "serpapi.webscrapingapi.com",

  "port": null,

  "path": `/v1?engine=google_maps&api_key=${API_KEY}&type=place&data=${data}`, // this time the type is place and there is no query needed

  "headers": {}

};

O script resultante deve ficar assim:

const https = require("https");

const API_KEY = "<YOUR-API-KEY-HERE>" // You can get by creating an account - https://app.webscrapingapi.com/register

const data_id = "0x87c0ef253b04093f:0xafdfd6dc1d3a2b4e" // the data_id we retrieved earlier

const latitude = '38.99313451901278'

const longitude = '-94.59368586441806'

const data = '!4m5!3m4!1s' + data_id + '!8m2!3d' + latitude  + '!4d' + longitude

const options = {

  "method": "GET",

  "hostname": "serpapi.webscrapingapi.com",

  "port": null,

  "path": `/v1?engine=google_maps&api_key=${API_KEY}&type=place&data=${data}`, // this time the type is place and there is no query needed

  "headers": {}

};

const req = https.request(options, function (res) {

  const chunks = [];

  res.on("data", function (chunk) {

    chunks.push(chunk);

  });

  res.on("end", function () {

    const body = Buffer.concat(chunks);

    const response = JSON.parse(body.toString());

    console.log(response)

  });

});

req.end();

E depois de executar este script, deverá receber uma resposta semelhante a esta:

place_results: {

    title: 'Waldo Pizza',

    data_id: '0x89c259a61c75684f:0x79d31adb123348d2',

    place_id: 'ChIJT2h1HKZZwokR0kgzEtsa03k',

    data_cid: '8778389626880739538',

    website: 'https://www.stumptowntogo.com/',

    gps_coordinates: { latitude: 38.99313451901278, longitude: -94.59368586 },

    reviews_link: 'https://serpapi.webscrapingapi.com/v1?engine=google_maps_reviews&data_id=0x89c259a61c75684f:0x79d31adb123348d2',

    place_id_search: 'https://serpapi.webscrapingapi.com/v1?engine=google_maps&type=place&device=desktop&data=!4m5!3m4!1s0x89c259a61c75684f:0x79d31adb123348d2!8m2!3d38.99313451901278!4d-94.59368586',

    thumbnail: 'https://lh5.googleusercontent.com/p/AF1QipNtnPBJ2Oi_C2YNamHTXyqU9I8mRBarCIvM5g5v=w408-h272-k-no',

    rating: 4.6,

    reviews: 2594,

    price: '$$',

    type: [ 'Pizza restaurant' ],

    service_options: { dine_in: true, curbsidepickup: true, no_contactdelivery: true },

    extensions: [

      [Object], [Object],

      [Object], [Object],

      [Object], [Object],

      [Object], [Object],

      [Object], [Object]

    ],

    open_state: 'Closed',

    hours: [

      [Object], [Object],

      [Object], [Object],

      [Object], [Object],

      [Object]

    ],

    contact_details: {

      address: [Object],

      action_1: [Object],

      menu: [Object],

      phone: [Object],

      plus_code: [Object]

    },

    address: '7433 Broadway St, Kansas City, MO 64114',

    images: [

      [Object], [Object],

      [Object], [Object],

      [Object], [Object],

      [Object], [Object],

      [Object], [Object],

      [Object], [Object]

    ],

    people_also_search_for: [ [Object], [Object], [Object] ],

    user_reviews: { summaries: [Array], most_relevant: [Array] },

    popular_times: { graph_results: [Object] }

  }

}

E é isso. Isso significa que conseguiu extrair com sucesso os resultados de locais do Google Maps utilizando a nossa API e está agora pronto para utilizar os dados obtidos para diversos fins, tais como análise de dados, análise de negócios, aprendizagem automática e muito mais. Para mais informações e exemplos de código em outras 6 linguagens de programação para começar, sinta-se à vontade para explorar a nossa documentação do Google Maps.

Limitações dos resultados de locais do Google Maps

Os resultados de locais do Google Maps, embora sejam uma ferramenta poderosa para encontrar e explorar locais, têm algumas limitações que deve ter em conta. Em primeiro lugar, a quantidade de dados disponíveis para cada local é limitada e alguns dados, como fotos, ID do local, etc., só estão disponíveis através da API do Google Maps e requerem uma chave de API. Além disso, os dados fornecidos nos resultados de locais do Google Maps podem ser dinâmicos e mudar ao longo do tempo, o que significa que os dados que extrair podem não ser precisos ou estar desatualizados.

Conclusão

Em conclusão, extrair resultados de locais do Google Maps pode ser uma ferramenta útil para empresas, investigadores e particulares encontrarem e explorarem novos locais. Seguindo os passos descritos neste artigo, deverá agora ter o conhecimento e as ferramentas necessárias para extrair resultados de locais do Google Maps utilizando a nossa API com Node.js.

Sobre o autor
Andrei Ogiolan, Desenvolvedor Full Stack @ WebScrapingAPI
Andrei OgiolanDesenvolvedor Full Stack

Andrei Ogiolan é um programador Full Stack na WebScrapingAPI, contribuindo em todas as áreas do produto e ajudando a criar ferramentas e funcionalidades fiáveis para a plataforma.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.