简介
谷歌地图是全球使用最广泛的地图和导航服务之一,为用户提供了一种便捷的方式来查找和探索地点、商家及兴趣点。谷歌地图的一项关键功能是能够搜索地点并查看其详细信息,例如位置、评论、照片等。
从 Google 地图抓取这些数据可用于多种用途。例如,企业可以利用这些数据来追踪和分析其各门店的运营表现,研究人员可以利用它来研究消费者行为模式,而个人则可以利用它来发现和探索新地点。
本文旨在提供一份分步指南,介绍如何使用 Node.js 配合我们的 API 抓取 Google 地图的地点搜索结果。我们将涵盖从搭建开发环境到提取相关数据的全部内容,并说明可能遇到的问题。读完本文后,您将掌握独立抓取 Google 地图地点搜索结果所需的知识和工具。
为何应使用专业爬虫工具而非自行开发?
出于以下几个原因,使用专业爬虫往往比自行开发更优。首先,专业爬虫专为处理各类爬取任务而设计,在性能、可靠性和可扩展性方面经过优化。它们能够处理海量数据,并兼容各类网站及网络技术。这意味着专业爬虫通常比自建爬虫能更快、更准确地提取数据。
此外,专业爬虫通常内置了验证码破解、IP轮换和错误处理等功能,这些功能能提高爬取效率并减少出错概率。它们还提供技术支持和详细文档,当您遇到问题时会非常有用。
另一个重要方面是,专业爬虫服务商严格遵守目标网站的爬取政策,并确保数据的使用合法合规,这一点在进行数据抓取时必须牢记。
最后,就我们具体的情况而言,若要抓取 Google 地图的地点结果,您需要像这样向 Google URL 传递一个数据参数:
data 参数通常看起来像这样:!4m5!3m4!1s + data_id + !8m2!3 + 纬度 + !4d + 经度。我知道这乍一看可能让人望而生畏,因为你可能不知道如何获取特定地点的 data_id 属性,而你的担忧是正确的——因为谷歌隐藏了这一信息,当你在谷歌地图中搜索地点时,页面上并不会显示该信息。 但幸运的是,使用像我们这样的专业爬虫工具可以帮你解决这个问题,自动为你获取这些数据。在后续章节中,我们将详细讲解如何获取 data_id 和坐标,以及如何轻松构建数据参数。
定义目标
什么是 Google 地图地点搜索结果?
Google 地图地点结果是指用户在 Google 地图上搜索地点时显示的结果。这些结果可能包含商家、餐厅、酒店、地标及其他兴趣点等各类地点。每个地点结果都包含名称、地址、电话号码、网站、评论和照片等信息。地点结果还包含该位置的 Google 地图街景图像,以及显示该地点位置的地图。 地点结果还可能包含指向该地点 Google 我的商家页面的链接。
当用户在 Google 地图上搜索地点时,系统会展示与搜索查询相匹配的地点结果列表。这些结果以地图和列表形式呈现,并可根据评分、价格和距离等多种条件进行筛选。
抓取这些数据对于希望追踪和分析门店表现的企业、希望研究消费者行为模式的研究人员,以及希望发现和探索新场所的个人而言都十分有用。
我们的目标是什么?

准备工作
在开始抓取 Google 地图地点结果之前,我们需要确保已备齐必要的工具。首先需要的是 Node.js,这是一个允许我们在服务器端运行 JavaScript 的运行时环境,您可从其官方网站进行安装。其次需要一个 API 密钥,您只需在此处创建账户并激活 SERP 服务即可轻松获取。
完成上述配置后,要运行 Node.js 脚本,只需创建一个 js 文件即可。可通过执行以下命令实现:
$ touch scraper.js
现在将以下代码行粘贴到文件中:
console.log("Hello World!")
然后运行以下命令:
$ node scraper.js
若此时终端显示“Hello World!”字样,即表示您已成功安装 Node.js,并可继续进行最后一步。
现在最后一步是获取您感兴趣地点的 data_id 信息。此时我们的 API 便派上用场了。使用它非常简单,且无需安装任何外部库。
首先,在 JavaScript 文件中,您需要导入 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"
接下来,您需要将这些信息封装在 options 对象中,以便我们的 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": {}
};
接下来,您需要使用所有这些信息设置对 API 的调用:
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
就这样,至此您已具备创建 data 参数所需的一切条件,可以继续阅读下一节,该节将阐述本文的核心内容。
开始抓取 Google 地点结果
现在环境已配置完毕,您可以开始使用 Node.js 抓取 Google 地图的地点结果了。如上所述,要抓取 Google 地图的地点结果,您需要先设置 data 参数。既然所有内容都已准备就绪,您可以通过以下方式实现:
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
接下来,您需要修改 options 对象,告知 API 您要获取的是地点结果。有了这个新的 data 参数,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 地图文档。
Google 地图地点结果的限制
尽管 Google 地图地点结果是查找和探索地点的强大工具,但您仍需注意其存在一些限制。首先,每个地点可获取的数据量有限,且部分数据(如照片、地点 ID 等)仅可通过 Google 地图 API 获取,并需要 API 密钥。此外,Google 地图地点结果中提供的数据可能是动态的,会随时间变化,这意味着您抓取的数据可能不够准确或不够及时。
结论
总而言之,抓取 Google 地图地点结果对于企业、研究人员及个人而言,是发现和探索新地点的有用工具。通过遵循本文概述的步骤,您现在应该已经掌握了使用 Node.js 通过我们的 API 抓取 Google 地图地点结果所需的知识和工具。




