Google Maps 是一个资源丰富的地图应用程序,可提供有关世界各地地理位置的全面信息。 它也是当地商业信息的重要来源。 您可以使用它来获取公司名称、地址信息、网站 URL、营业时间等。

以编程方式抓取 Google 地图数据可让您将其转换为可用于各种目的的有组织的格式,包括生成业务线索、组织大量电子邮件活动以及获取联系信息以进行冷拨。

本文讨论如何从 Google 地图中抓取数据。您将学习如何从应用程序中获取有用的本地商业信息。我们还将讨论 Crawlbase 如何帮助您使数据提取过程顺利、快速且有益。

让我们先谈谈如何使用 爬虫库 用于拉取在线信息。

使用 Crawlbase 进行网页抓取

Crawlbase 是一种多功能工具,可让您大规模抓取在线数据。它可用于广泛的数据提取任务,包括从 Google 地图中抓取数据。这是您克服通常的抓取挑战并充分利用您的努力所需要的。

这些是 Crawlbase 对于以下领域至关重要的一些原因 网络抓取:

  • 操作简单 Crawlbase 提供了一个用户友好的 API,您可以在几分钟内开始使用。还有详细的文档,其中包含有关如何集成 API 的代码示例。
  • 支持匿名爬取 使用 Crawlbase,您在从互联网提取信息时无需担心泄露您的真实身份。它拥有广泛的代理和数据中心池,可让您保持匿名。
  • 支持高级提取 Crawlbase 支持所有类型的爬行项目。由于它支持 JavaScript 渲染,这为您提供了真正的浏览器功能,可以从现代、复杂的网站检索数据,而不会遇到任何障碍。它还允许您绕过封锁、验证码和其他可能妨碍您快速、熟练地收集数据的访问限制。
  • 免费测试账号 注册帐户后,您将获得 1,000 个免费积分,用于试用该工具的功能。 然后,您可以继续使用该服务并在每个计费周期结束时为您的使用付费。

对于本 Google 地图网络抓取教程,我们将使用 Crawlbase 的 抓取 API. 对 API 的每个请求都从以下基本部分开始:

1
https://api.crawlbase

然后,需要以下两个强制查询字符串参数:

  • 唯一身份验证令牌 这授权您使用该 API。 Crawlbase 提供两种类型的令牌:用于完成通用 Web 请求的普通令牌和用于抓取动态、JavaScript 呈现的网站的 JavaScript 令牌。
  • 目标网址 这是您提取其数据所需的 URL。 它应该以 HTTP 或 HTTPS 开头。 您还应该对 URL 进行编码,以将其转换为可以在 Internet 上轻松传输的格式。

这是向 API 请求添加强制参数的方法:

1
https://api.crawlbase.com/?token=ADD_TOKEN&url=ADD_URL

这就是开始使用 Crawlbase 从 Internet 提取信息所需的全部内容。

就这么简单!

实际上,如果您为上述请求提供所需的参数信息并在 Web 浏览器的地址栏上执行它,它将返回目标网页的完整 HTML 代码。

使用 Crawlbase 从 Google 地图中抓取数据

现在让我们看看如何使用 Crawlbase 快速高效地收集 Google 地图数据。在本教程中,我们的目标是提取列出的纽约餐厅的数据 谷歌地图. 我们将使用 PHP 编程语言来完成这项任务。

第 1 步:获取请求 URL

让我们先去谷歌地图搜索纽约的餐馆。

搜索餐厅

如上面的屏幕截图所示,餐厅的数据显示在页面的左侧边栏上。 这就是我们想要抓取的内容,而不是从整个页面中提取数据。 抓取它的最简单方法是检查浏览器的网络流量并获取传递数据的 URL。

要检查浏览器的网络流量,您可以右键单击页面左侧边栏的任意位置并选择 检查 选项。 这将打开浏览器窗口底部的开发者工具部分。 接下来,选择网络选项卡。 您将开始看到通过网络传输的数据。

检查选项

要加载我们想要的数据,请再次搜索“纽约餐馆”。 然后,您可以在网络面板搜索框中键入“搜索”以过滤搜索 URL。

搜索选项

这将显示与您最近的搜索相关的 URL。 在这种情况下,我们想要的数据在第一个 GET 请求中,它以 JSON 格式提供餐厅的数据。

如果单击包含请求的行,则会显示一个新的右侧窗格。 该窗格提供有关请求的更多信息。 在下面 选项卡,突出显示并复制 URL。 这是用于获取 Google 地图上显示的数据的 URL。 这是我们将用于抓取餐馆数据的 URL。

标题选项卡

这是我们抓取的网址:

1
https://www.google.com/search?tbm=map&authuser=0&hl=en&gl=ke&pb=!4m12!1m3!1d13288.926258283986!2d-74.02334913898135!3d40.73841320805614!2m3!1f0!2f0!3f0!3m2!1i1366!2i211!4f13.1!7i20!10b1!12m8!1m1!18b1!2m3!5m1!6e2!20e3!10b1!16b1!19m4!2m3!1i360!2i120!4i8!20m65!2m2!1i203!2i100!3m2!2i4!5b1!6m6!1m2!1i86!2i86!1m2!1i408!2i240!7m50!1m3!1e1!2b0!3e3!1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e3!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e3!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e9!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e10!2b0!3e4!2b1!4b1!9b0!22m6!1sVgY-YP-eBdqg5NoPuc2f4A8:2!2s1i:0,t:11886,p:VgY-YP-eBdqg5NoPuc2f4A8:2!7e81!12e5!17sVgY-YP-eBdqg5NoPuc2f4A8:92!18e15!24m54!1m16!13m7!2b1!3b1!4b1!6i1!8b1!9b1!20b0!18m7!3b1!4b1!5b1!6b1!9b1!13b0!14b0!2b1!5m5!2b1!3b1!5b1!6b1!7b1!10m1!8e3!14m1!3b1!17b1!20m2!1e3!1e6!24b1!25b1!26b1!29b1!30m1!2b1!36b1!43b1!52b1!54m1!1b1!55b1!56m2!1b1!3b1!65m5!3m4!1m3!1m2!1i224!2i298!89b1!26m4!2m3!1i80!2i92!4i8!30m0!34m16!2b1!3b1!4b1!6b1!8m4!1b1!3b1!4b1!6b1!9b1!12b1!14b1!20b1!23b1!25b1!26b1!37m1!1e81!42b1!47m0!49m1!3b1!50m4!2e2!3m2!1b1!3b1!65m0!69i544&q=New york restaurants&oq=New york restaurants&gs_l=maps.3..38i39i129k1j38i39i129i444k1j38i426k1l3.0.0.2.48644.1.1.0.0.0.0.713.713.6-1.1.0....0...1ac..64.maps..0.1.713....0.&tch=1&ech=2&psi=VgY-YP-eBdqg5NoPuc2f4A8.1614677593039.1

接下来,让我们通过删除以下可能不需要的查询字符串参数来清理请求 URL:

  • oq
  • GS_L
  • TCH
  • 所有
  • PSI

这是最终 URL 的样子:

1
https://www.google.com/search?tbm=map&authuser=0&hl=en&gl=ke&pb=!4m12!1m3!1d13288.926258283986!2d-74.02334913898135!3d40.73841320805614!2m3!1f0!2f0!3f0!3m2!1i1366!2i211!4f13.1!7i20!10b1!12m8!1m1!18b1!2m3!5m1!6e2!20e3!10b1!16b1!19m4!2m3!1i360!2i120!4i8!20m65!2m2!1i203!2i100!3m2!2i4!5b1!6m6!1m2!1i86!2i86!1m2!1i408!2i240!7m50!1m3!1e1!2b0!3e3!1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e3!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e3!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e9!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e10!2b0!3e4!2b1!4b1!9b0!22m6!1sVgY-YP-eBdqg5NoPuc2f4A8:2!2s1i:0,t:11886,p:VgY-YP-eBdqg5NoPuc2f4A8:2!7e81!12e5!17sVgY-YP-eBdqg5NoPuc2f4A8:92!18e15!24m54!1m16!13m7!2b1!3b1!4b1!6i1!8b1!9b1!20b0!18m7!3b1!4b1!5b1!6b1!9b1!13b0!14b0!2b1!5m5!2b1!3b1!5b1!6b1!7b1!10m1!8e3!14m1!3b1!17b1!20m2!1e3!1e6!24b1!25b1!26b1!29b1!30m1!2b1!36b1!43b1!52b1!54m1!1b1!55b1!56m2!1b1!3b1!65m5!3m4!1m3!1m2!1i224!2i298!89b1!26m4!2m3!1i80!2i92!4i8!30m0!34m16!2b1!3b1!4b1!6b1!8m4!1b1!3b1!4b1!6b1!9b1!12b1!14b1!20b1!23b1!25b1!26b1!37m1!1e81!42b1!47m0!49m1!3b1!50m4!2e2!3m2!1b1!3b1!65m0!69i544&q=New york restaurants

第 2 步:检查返回的数据

现在让我们使用抓取的 URL 发出请求并检查返回的数据的样子。 这将有助于在下一步中创建抓取逻辑。

我们将使用 PHP 卷曲库 发出 GET 请求并检索 Google 地图数据。由于 Crawlbase 需要对 URL 进行编码,因此我们将使用内置的 urlcode() 函数对抓取的 URL 进行编码。

在本例中,我们将使用 Crawlbase 的普通令牌来发出请求。

这是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
//编码URL
$ url = 网址("https://www.google.com/search?tbm=map&authuser=0&hl=en&gl=ke&pb=!4m12!1m3!1d13288.926258283986!2d-74.02334913898135!3d40.73841320805614!2m3!1f0!2f0!3f0!3m2!1i1366!2i211!4f13.1!7i20!10b1!12m8!1m1!18b1!2m3!5m1!6e2!20e3!10b1!16b1!19m4!2m3!1i360!2i120!4i8!20m65!2m2!1i203!2i100!3m2!2i4!5b1!6m6!1m2!1i86!2i86!1m2!1i408!2i240!7m50!1m3!1e1!2b0!3e3!1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e3!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e3!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e9!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e10!2b0!3e4!2b1!4b1!9b0!22m6!1sVgY-YP-eBdqg5NoPuc2f4A8:2!2s1i:0,t:11886,p:VgY-YP-eBdqg5NoPuc2f4A8:2!7e81!12e5!17sVgY-YP-eBdqg5NoPuc2f4A8:92!18e15!24m54!1m16!13m7!2b1!3b1!4b1!6i1!8b1!9b1!20b0!18m7!3b1!4b1!5b1!6b1!9b1!13b0!14b0!2b1!5m5!2b1!3b1!5b1!6b1!7b1!10m1!8e3!14m1!3b1!17b1!20m2!1e3!1e6!24b1!25b1!26b1!29b1!30m1!2b1!36b1!43b1!52b1!54m1!1b1!55b1!56m2!1b1!3b1!65m5!3m4!1m3!1m2!1i224!2i298!89b1!26m4!2m3!1i80!2i92!4i8!30m0!34m16!2b1!3b1!4b1!6b1!8m4!1b1!3b1!4b1!6b1!9b1!12b1!14b1!20b1!23b1!25b1!26b1!37m1!1e81!42b1!47m0!49m1!3b1!50m4!2e2!3m2!1b1!3b1!65m0!69i544&q=Newyork restaurants");
//初始化一个新的cURL会话
$卷曲 = curl_init();
//使用Crawlbase传递目标URL
卷曲设置选项($卷曲, CURLOPT_URL, 'https://api.crawlbase.com/?token=ADD_NORMAL_TOKEN&url=' . $ url);
//返回页面内容
卷曲设置选项($卷曲, CURLOPT_RETURNTRANSFER, true);
//执行预定义的cURL会话
$响应数据 = curl_exec($卷曲);
//关闭cURL会话
curl_close($卷曲);
//输出响应
回音 $响应数据

?>

如果我们运行上面的代码,这是我们在浏览器上得到的输出:

浏览器输出

如果您将返回的数据粘贴到 JSON 验证器工具上,例如 这个 JSON 查看器,你可以做一些有用的观察。 例如,您会注意到删除前四个字符会使数据采用有效的 JSON 格式。

JSON 格式

您还会注意到数据包含在相互嵌套的数组中。 例如,前 20 家餐厅的数据包含在以下标记部分中:

餐厅数据

如果我们扩展一个数组,我们可以找到每个餐厅的信息。 例如,如果我们展开嵌套数组 1,您会注意到餐厅的详细信息包含在数组 14 中。这是贯穿数据的模式。

例如,餐厅的名称位于第 11 位:

餐馆名称

餐厅的位置在 18 号:

餐厅位置

餐厅的电话号码在数组 178 处:

餐厅联系方式

第 3 步:创建抓取逻辑

如前所述,删除返回数据中的前四个字符使其成为有效的 JSON 格式。 这将使迭代数据成为可能。

这是执行此操作的代码:

1
$响应数据 = 子字符串($响应数据, 4- 1);

此外,更换 返回的响应中带有空字符串的值可以更容易地处理数据。

这是执行此操作的代码:

1
$响应数据 = 字符串替换(“空值,”, '"",', $响应数据);

接下来,让我们使用内置 json_decode 函数将 JSON 字符串数据转换为 PHP 对象变量。 我们还将设置 true 参数将返回的对象转换为关联数组。

这是代码:

1
$scraped_data = json_decode($响应数据, true);

接下来,让我们使用 固定 检查餐厅数据是否存在的功能。 我们将把其余的抓取逻辑放在这个函数中。

然后,让我们使用 的foreach 循环遍历数组并查找出现第 14 个数组的实例。 请记住,我们需要的数据包含在 14 号数组中。

最后,让我们找出餐厅名称、位置和电话号码的出现次数。

这是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (固定($scraped_data[0][1]))
{
的foreach ($scraped_data[0][1] as $值)
{
if (固定($值[14]))
{
$餐厅数据 = $值[14];
$临时数组 = [];
if (固定($餐厅数据[11])) $临时数组['餐厅名称:'] = $餐厅数据[11];
if (固定($餐厅数据[18])) $临时数组['餐厅位置:'] = $餐厅数据[18];
if (固定($餐厅数据[178][0][0])) $临时数组['餐厅电话号码:'] = $餐厅数据[178][0][0];
$final_array_data[] = $临时数组;
}
}

}

总结

以下是使用 Crawlbase 从 Google 地图抓取数据的完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
//编码URL
$ url = 网址("https://www.google.com/search?tbm=map&authuser=0&hl=en&gl=ke&pb=!4m12!1m3!1d13288.926258283986!2d-74.02334913898135!3d40.73841320805614!2m3!1f0!2f0!3f0!3m2!1i1366!2i211!4f13.1!7i20!10b1!12m8!1m1!18b1!2m3!5m1!6e2!20e3!10b1!16b1!19m4!2m3!1i360!2i120!4i8!20m65!2m2!1i203!2i100!3m2!2i4!5b1!6m6!1m2!1i86!2i86!1m2!1i408!2i240!7m50!1m3!1e1!2b0!3e3!1m3!1e2!2b1!3e2!1m3!1e2!2b0!3e3!1m3!1e3!2b0!3e3!1m3!1e8!2b0!3e3!1m3!1e3!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e9!2b1!3e2!1m3!1e10!2b0!3e3!1m3!1e10!2b1!3e2!1m3!1e10!2b0!3e4!2b1!4b1!9b0!22m6!1sVgY-YP-eBdqg5NoPuc2f4A8:2!2s1i:0,t:11886,p:VgY-YP-eBdqg5NoPuc2f4A8:2!7e81!12e5!17sVgY-YP-eBdqg5NoPuc2f4A8:92!18e15!24m54!1m16!13m7!2b1!3b1!4b1!6i1!8b1!9b1!20b0!18m7!3b1!4b1!5b1!6b1!9b1!13b0!14b0!2b1!5m5!2b1!3b1!5b1!6b1!7b1!10m1!8e3!14m1!3b1!17b1!20m2!1e3!1e6!24b1!25b1!26b1!29b1!30m1!2b1!36b1!43b1!52b1!54m1!1b1!55b1!56m2!1b1!3b1!65m5!3m4!1m3!1m2!1i224!2i298!89b1!26m4!2m3!1i80!2i92!4i8!30m0!34m16!2b1!3b1!4b1!6b1!8m4!1b1!3b1!4b1!6b1!9b1!12b1!14b1!20b1!23b1!25b1!26b1!37m1!1e81!42b1!47m0!49m1!3b1!50m4!2e2!3m2!1b1!3b1!65m0!69i544&q=Newyork restaurants");
//初始化一个新的cURL会话
$卷曲 = curl_init();
//使用Crawlbase传递目标URL
卷曲设置选项($卷曲, CURLOPT_URL, 'https://api.crawlbase.com/?token=ADD_NORMAL_TOKEN&url=' . $ url);
//返回页面内容
卷曲设置选项($卷曲, CURLOPT_RETURNTRANSFER, true);
//执行预定义的cURL会话
$响应数据 = curl_exec($卷曲);
//关闭cURL会话
curl_close($卷曲);
//删除前四个字符
$响应数据 = 子字符串($响应数据, 4- 1);
//替换空值
$响应数据 = 字符串替换(“空值,”, '"",', $响应数据);
//将JSON字符串数据转换为PHP对象
$scraped_data = json_decode($响应数据, true);

$final_array_data = [];

//创建抓取逻辑
if (固定($scraped_data[0][1]))
{
的foreach ($scraped_data[0][1] as $值)
{
if (固定($值[14]))
{
$餐厅数据 = $值[14];
$临时数组 = [];
if (固定($餐厅数据[11])) $临时数组['餐厅名称:'] = $餐厅数据[11];
if (固定($餐厅数据[18])) $临时数组['餐厅位置:'] = $餐厅数据[18];
if (固定($餐厅数据[178][0][0])) $临时数组['餐厅电话号码:'] = $餐厅数据[178][0][0];
$final_array_data[] = $临时数组;
}
}

}

//输出最终数据
变量转储($final_array_data);

?>

如果我们运行代码,这是我们得到的结果(为简洁起见,它被截断了):

结果

我们做到了!

我们设法从谷歌地图中提取数据。

结论

这就是如何使用 Crawlbase 从 Google 地图中抓取数据。借助 Crawlbase,您可以快速高效地提取地图数据,同时保持匿名。

它是您提取在线数据所需的工具,无需担心遇到访问限制。 您可以使用它从任何网页中提取非结构化信息,并将数据轻松导入您的工作环境。
点击这里创建 免费的 Crawlbase 帐户.

刮刮快乐!