如何网络抓取 Google 地图位置结果

安德烈-奥吉奥兰(Andrei Ogiolan),2023 年 4 月 20 日

博客图片

导言

谷歌地图是世界上使用最广泛的地图和导航服务之一,为用户提供了查找和探索地点、企业和兴趣点的简便方法。谷歌地图的主要功能之一是搜索地点并查看其详细信息,如位置、评论、照片等。

从谷歌地图中抓取这些数据可用于多种用途。例如,企业可以利用这些数据跟踪和分析其所在地的业绩,研究人员可以利用这些数据研究消费者行为模式,个人可以利用这些数据寻找和探索新的地方。

本文旨在逐步介绍如何使用 Node.js 通过我们的API抓取 Google 地图的地点结果。我们将涵盖从设置开发环境到提取相关数据以及描述潜在问题的所有内容。在本文结束时,您将掌握自行抓取 Google 地图地点结果所需的知识和工具。

为什么要使用专业铲运机而不是自制铲运机?

出于以下几个原因,使用专业搜索器可能比创建自己的搜索器更好。首先,专业搜刮工具是为处理各种搜刮任务而设计的,并针对性能、可靠性和可扩展性进行了优化。它们专为处理大量数据而设计,可以处理各种类型的网站和网络技术。这意味着,专业的刮擦工具通常能比定制的刮擦工具更快、更准确地提取数据。

此外,专业的搜索工具通常具有验证码解锁、IP 轮换和错误处理等内置功能,可以使搜索过程更高效、更不易出错。它们还提供支持和文档,在您遇到任何问题时都会有所帮助。

另一个重要方面是,专业的搜刮工具提供商必须遵守其搜刮网站的搜刮政策,并能合法使用数据,这一点在搜刮数据时必须牢记。

最后,在我们的特殊情况下,为了抓取谷歌地图的位置结果,您需要向谷歌 URL 传递一个数据参数,如下所示:

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

数据参数通常是这样的:!4m5!3m4!1s + data_id + !8m2!3 + latitude + !4d + longitude。我知道这起初可能听起来很吓人,因为你可能不知道如何获取特定地点的 data_id 属性,你是对的,因为谷歌隐藏了这一信息,当你在谷歌地图上搜索一个地点时,在页面上是看不到的。但幸运的是,使用像我们这样的专业搜索器就可以帮你找到这些数据。我们将在后面的章节中介绍如何获取 data_id、坐标以及如何轻松创建数据参数。

确定我们的目标

什么是 Google Maps Place 结果?

谷歌地图地点结果是用户在谷歌地图上搜索地点时显示的结果。这些结果可包括企业、餐馆、酒店、地标和其他兴趣点等地点。每个地点结果都包括该地点的名称、地址、电话号码、网站、评论和照片等信息。地点结果还包括该地点的谷歌地图街景图片和显示该地点位置的地图。地点结果还包括该地点的谷歌 "我的企业 "页面链接。

当用户在谷歌地图上搜索一个地点时,他们会看到一个符合其搜索条件的地点结果列表。这些结果会以列表的形式显示在地图上,并可根据评级、价格和距离等各种标准进行筛选。

对于想要跟踪和分析其网点业绩的企业、想要研究消费者行为模式的研究人员以及想要寻找和探索新地方的个人来说,抓取这些数据非常有用。

我们的目标是什么样子的?

博客图片

设置

在开始搜索 Google 地图的位置结果之前,我们需要确保有必要的工具可供使用。我们首先需要的是 Node.js,这是一种 JavaScript 运行时,允许我们在服务器端运行 JavaScript,您可以从其官方网站上安装。第二件需要的东西是 API KEY,在这里创建账户并激活 SERP 服务即可轻松获得。

完成这些设置后,要运行 Node.js 脚本,只需创建一个 js 文件。运行以下命令即可:

$ touch scraper.js 

然后将下面一行粘贴到文件中:

console.log("Hello World!")

然后运行以下命令

$ node scraper.js

如果您现在能在终端上看到 "Hello World!"(你好,世界!)的信息,这意味着您成功安装了 Node.js,可以进入最后一步了。

现在,最后一步是获取您感兴趣的地方的 data_id 信息。这时,我们的应用程序接口就开始发挥作用了。使用它非常简单,不需要安装任何外部库。

首先,您需要在 js 文件中导入 Node.js `https` 内置模块,以便能够向我们的 API 发送请求。具体方法如下:

const https = require("https");

其次,您需要指定您的 API 密钥、搜索词和您感兴趣的地点的坐标:

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"

现在,你需要做的是在选项对象中传递这些信息,以便我们的 API 了解你需要从哪个地方获取信息:

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": {}

};

接下来,您需要将所有这些信息调用到我们的应用程序接口:

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();

最后,您只需运行您创建的脚本并等待结果:

$ node scraper.js

然后,屏幕上就会打印出 data_id 属性:

$ ​​0x87c0ef253b04093f:0xafdfd6dc1d3a2b4es

至此,创建数据参数所需的一切都准备就绪,可以进入下一部分,也就是本文的目的。

让我们开始搜索 Google 位置结果

环境设置完成后,您就可以开始使用 Node.js 搜索 Google 地图上的地点结果了。如前所述,为了抓取 Google 地图上的地点结果,您现在需要设置数据参数。现在一切就绪,您可以按以下步骤完成设置:

const data_id = "0x87c0ef253b04093f:0xafdfd6dc1d3a2b4e" // 我们之前获取的数据 ID

const latitude = '38.99313451901278'

const longitude = '-94.59368586441806'

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

现在,您需要修改选项对象,告诉我们的 API 您正在寻找地点结果。有了这个新的数据参数,我们的应用程序接口就能准确地知道您需要搜索哪些地方的信息:

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 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();

运行该脚本后,您应该会得到类似这样的回复:

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] }

}

}

就是这样。这意味着您已经成功地使用我们的 API 抓取了 Google 地图的地点结果,现在您可以将获得的数据用于数据分析、业务分析、机器学习等多种不同用途。有关其他 6 种编程语言的进一步参考和代码示例,请访问我们的 Google Maps文档

谷歌地图地点结果的局限性

谷歌地图的地点结果虽然是查找和探索地点的强大工具,但也有一些局限性,您应牢记在心。首先,每个地点的可用数据量是有限的,有些数据如照片、地点 ID 等只能通过谷歌地图 API 获取,并且需要 API 密钥。此外,谷歌地图地点结果中提供的数据可能是动态的,会随着时间的推移而变化,这就意味着你搜刮到的数据可能不准确或不是最新的。

结论

总之,对于企业、研究人员和个人来说,搜索 Google 地图上的地点结果是一个寻找和探索新地点的有用工具。按照本文概述的步骤,您现在应该掌握了使用我们的API使用 Node.js 搜刮 Google 地图地点结果所需的知识和工具。

新闻和更新

订阅我们的时事通讯,了解最新的网络搜索指南和新闻。

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

相关文章

缩图
指南搜索 SERP API - 开始指南

使用 SERP Scraping API 从搜索引擎轻松收集实时数据。轻松加强市场分析、搜索引擎优化和主题研究。立即开始使用!

WebscrapingAPI
作者头像
WebscrapingAPI
7 分钟阅读
缩图
指南七大最佳 Google SERP API(免费和付费)

7 大 Google SERP API 对比:WebScrapingAPI、Apify、Serp API 等 - 最佳性价比、功能、优点和缺点

安德烈-奥吉奥兰
作者头像
安德烈-奥吉奥兰
10 分钟阅读
缩图
指南如何使用 Puppeteer 制作刮刀并下载文件

了解如何使用 Puppeteer 下载文件的 3 种方法,并构建一个能完全做到这一点的网络搜刮器。

米赫内亚-奥克塔维安-马诺拉什
作者头像
米赫内亚-奥克塔维安-马诺拉什
8 分钟阅读