使用 Python 抓取 Google 地图数据和评论

了解如何使用 SerpApi Python 库轻松抓取 Google 地图地点数据及其评论。福利:将数据导出到 CSV 文件

如果您需要 Google 地图中的信息(例如地点详细信息或评论),那么您来对地方了!无论您是要寻找地点还是收集有关当地企业的见解,抓取这些数据都很有价值。让我们学习如何使用 Python 和 SerpApi 的简单 API 来抓取 Google 地图地点数据及其评论。

如何抓取 Google 地图数据结果?

至少有三种方法可以做到这一点:
– 使用 SerpApi (推荐)
– Google 的 Places API
– 创建您的 DIY Google 地图抓取解决方案

  1. 使用 SerpApi(推荐)

SerpApi 提供了一个很好的结构化 JSON,其中包含我们需要从本地地图结果中获取的所有相关信息。它还提供完整的数据,如评论和照片。因此,您可以节省时间和精力从 Google 地图收集数据,而无需构建自己的 Google 地图抓取工具。

链接:Google 地图 API 文档

这篇博文准确介绍了如何使用 SerpApi 抓取 Google 地图数据。

  1. 使用 Google 提供的地点 API

我们可以使用Google的places API。但首先,我们必须设置一个 Google Cloud 项目并完成设置说明,然后才能获取 API 密钥。然后我们可以使用 HTTP Post 请求或 Python SDK 来执行搜索。

缺点:获取 API 密钥的初始设置很复杂。

  1. 创建您的 DIY Google 地图抓取解决方案。

Google 地图动态加载数据。为了抓取这个,我们需要使用像 Puppeteer 这样的工具来正确抓取 Javascript 渲染的网站。我们可以使用 Selenium、pyppeteer 或 Playwright-python 包来运行无头浏览器。之后,我们就可以开始解析Google Maps中的相关数据了。

缺点:构建我们的网络抓取工具非常耗时,而且我们将面临许多挑战,例如被阻止、设置多个代理等等!

使用 Python 视频教程抓取 Google 地图数据和评论

如果您喜欢观看视频教程,请观看我们的 YouTube 视频,了解如何使用简单的 API 快速抓取 Google 地图。

使用 Python 逐步抓取 Google 地图数据

话不多说,让我们开始从 Google 地图收集数据。

第 1 步:我们要使用的工具

我们将使用 SerpApi 提供的新官方 Python 库:serpapi-python
这是我们需要的唯一工具!

附带说明:您可以使用此库从其他搜索引擎(而不仅仅是 Google)抓取搜索结果。

通常,您将使用 BeautifulSoup、Selenium、Selenium、Puppeteer、Requests 等来编写 DIY 解决方案来抓取 Google 地图。您现在可以放松了,因为我们为您执行所有这些繁重的任务。因此,您无需担心在实施网络抓取解决方案时可能遇到的所有问题。

第 2 步:设置和准备

  • 在SerpApi免费注册。您每月可以获得 100 次免费搜索。
  • 从此页面获取您的 SerpApi Api 密钥。
  • 创建一个新.env文件,并使用上面 API_KEY 中的值分配一个新的环境变量。
    SERPAPI_KEY=$YOUR_SERPAPI_KEY_HERE
  • 安装 python-dotenv 以读取.env文件
    pip install python-dotenv
  • 安装 SerpApi 的 Python 库
    pip install serpapi
  • main.py为主程序创建新文件。

您的文件夹结构将如下所示:复制复制

|_ .env
|_ main.py

第 3 步:编写用于抓取基本 Google 地图结果的代码

假设我们想要pizza在纽约查找关键字的地点。该API需要一个ll参数,该参数是某个区域的经纬度。因此,我将使用免费的在线工具来查找ll某个地方的信息。

我为此使用https://www.latlong.net/ 。只需输入城市名称或区域,它就会返回纬度和经度数字。我们将组合这些数字并用逗号分隔它们。

以纽约为例:
lat: 40.712776
long: -74.005974
所以该ll值将是@40.712776,-74.005974

下面是完整的 Python 代码:复制复制

import os
import serpapi

from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv('SERPAPI_KEY')

client = serpapi.Client(api_key=api_key)
results = client.search({
    'engine': 'google_maps',
    'q': 'pizza',
    'll': '@40.7455096,-74.0083012,15.1z',
    'type': 'search',
})

print(results)

python main.py尝试使用或从您的终端运行该程序python3 main.py

q parameter请随意更改您想要搜索的任何关键字的值。

本地结果可在result['local_results']或 处获得result['place_results']

地点结果和本地结果之间的差异

我们的 Google 地图 API 支持两种类型的搜索。默认搜索typesearch,它将返回键内的结果数组local_results

https://serpapi.com/playground?engine=google_maps&q=Coffee&ll=%4040.7455096%2C-74.0083012%2C14z&hl=en&type=search

另一个typeplace。可以type手动设置为place,与data参数一起提供特定位置或企业的详细信息。这种类型的搜索返回place_results.

https://serpapi.com/playground?engine=google_maps&q=Coffee&ll=%4040.7455096%2C-74.0083012%2C14z&hl=en&data=!4m5!3m4!1s0x89c259b7abdd4769%3A0xc385876db174521a!8m2!3d4 0.750231!4d-74.004019&type=地点

如果您对一个非常具体的位置进行搜索type=search,即您提供完整的地址,Google 将推断type=place并返回place_results该位置:

https://serpapi.com/playground?engine=google_maps&q=525+W+26th+St%2C+New+York%2C+NY+10001&ll=%4040.7455096%2C-74.0083012%2C14z&hl=en&type=search

更广泛地说,local_results是当搜索更一般时提供的列表。另一方面,place_results当查询非常具体时,或者您使用place_iddatatyp=place来获取特定位置的结果时,会提供特定位置的详细信息。

可用数据

我们可以从这个API中获取很多数据,例如:
– 标题
– GPS坐标
– 评论摘要
– 平均评分
– 价格
– 类型
– 地址
– 营业时间信息
– 电话
– 网站
– 服务选项
– 等。

您可以假设当您在maps.google.com上选择特定结果时,所有数据都可以在我们的API 响应中获得。

对 Google 地图结果进行分页

根据Google搜索地图结果API文档,我们可以使用该参数获取第二页、第三页等start。默认情况下,Google 地图每页返回 20 个结果,start 参数的值为 0。我们不必提供此信息来获取首页结果。

这是获取第二页的示例:复制复制

results = client.search({
    'engine': 'google_maps',
    'q': 'pizza',
    'll': '@40.7455096,-74.0083012,15.1z',
    'type': 'search',
    'start': 20
})

对于第三页复制复制

results = client.search({
    'engine': 'google_maps',
    'q': 'pizza',
    'll': '@40.7455096,-74.0083012,15.1z',
    'type': 'search',
    'start': 40
})

因此,您需要将每个页面的起始页增加 20。以下是如何以编程方式执行此操作(以抓取所有结果):复制复制

client = serpapi.Client(api_key=api_key)

start = 0

while True:
    results = client.search({
        'engine': 'google_maps',
        'q': 'pizza',
        'll': '@40.7455096,-74.0083012,15.1z',
        'type': 'search',
        'start': start
    })

    # If no local_results key or if it's empty, break out of the loop.
    if 'local_results' not in results:
        print('No more local results')
        break

    start += 20  # Get the next page of results.
    print(len(results['local_results']))  # Print the number of job results.

将 Google 地图结果导出为 CSV。

如果您需要 中的数据怎么办csv format?您可以添加下面的代码。此代码示例向您展示如何将所有 local_results 存储在 CSV 文件中。在此示例中,我们将保存标题、地址、电话和网站。复制复制

client = serpapi.Client(api_key=api_key)
results = client.search({
    'engine': 'google_maps',
    'q': 'pizza',
    'll': '@40.7455096,-74.0083012,15.1z',
    'type': 'search',
})

local_results = results['local_results']

with open('maps-results.csv', 'w', newline='') as csvfile:
    csv_writer = csv.writer(csvfile)

    # Write the headers
    csv_writer.writerow(["Title", "Address", "Phone Number", "Website"])

    # Write the data
    for result in local_results:
        csv_writer.writerow([result["title"], result["address"], result["phone"], result["website"] if "website" in result else "" ])

print('Done writing to CSV file.')

由于“网站”密钥并不总是可用,因此我们用条件语句存储它。

以下是 CSV 文件中的结果:

Google 地图结果导出到 CSV 文件

如何获取 Google 地图评论

SerpApi 还提供了Google 地图评论 API,用于获取特定地点的评论的所有详细信息。

首先,我们需要获取 aplace_iddata_id,这可以在我们对每个项目的初始响应中找到。

为了简单起见,我们将在本文中使用 place_id。我的队友 Ryan 在这篇文章中写了另一篇关于如何为 Google 地图构建 data_id 的博文:https://serpapi.com/blog/scraping-business-reviews-from-google-maps-with-serpapi/#getting -the-dataid-with-a-placeid-或反之亦然

以下是如何抓取 Google 地图评论数据的代码示例:复制复制

client = serpapi.Client(api_key=api_key)
results = client.search({
    'engine': 'google_maps_reviews',
    'type': 'search',
    'place_id': 'ChIJN1t_tDeuEmsRUsoyG83frY4',
})

print(results)

请记住将 替换place_id为您要查找的地点的 ID。

响应将包括评论的链接、评级、用户详细信息、摘要和喜欢的数量。您可以使用参数从最高或最低对评级进行排序sort_by

如何对 Google 地图上的所有评论进行分页?

next_page_token我们可以通过使用每个 Google 地图评论 API 响应中可用的值对搜索进行分页来获取所有评论数据。复制复制

client = serpapi.Client(api_key=api_key)
results = client.search({
    'engine': 'google_maps_reviews',
    'type': 'search',
    'place_id': 'ChIJN1t_tDeuEmsRUsoyG83frY4',
    'next_page_token': "VALUE_FROM_PREVIOUS_RESPONSE"
})

print(results)

确保使用从上一个响应中获得的原始值更新 next_page_token 值。

这就是您如何抓取 Google 地图数据和地点评论的方法。

如果您对抓取 Google 搜索感兴趣,请随时阅读:如何使用 Python 抓取 Google 搜索结果

常问问题

抓取 Google 地图数据合法吗?

在美国,抓取可公开访问的数据是合法的,包括抓取谷歌地图。

“SerpApi, LLC 通过强制遵守搜索引擎和网站的服务条款来促进道德抓取实践。通过负责任地处理抓取操作并遵守规则,SerpApi 帮助用户避免法律后果并培育可持续的网络抓取生态系统。” – 来源:使用 SerpApi 保护网页抓取活动

如何抓取谷歌地图而不被屏蔽?

  1. 使用代理:轮换多个 IP 地址以防止您的主 IP 被阻止。这使得谷歌更难从单一来源查明抓取活动。
  2. 设置延迟:不要太快发送请求。在请求之间等待几秒钟,以模仿人类行为并避免触发速率限制。
  3. 更改用户代理:针对每个请求轮换用户代理。这使得请求看起来像是来自不同的设备和浏览器。
  4. 使用验证码解决服务:有时,如果 Google 检测到异常活动,它会使用验证码进行提示。现有的服务可以自动为您解决这些问题。

虽然这些方法可以在手动抓取时提供帮助,但您在使用 SerpApi 时不必担心轮换代理、设置延迟、更改用户代理或解决验证码问题。它使获得搜索结果变得更容易、更快,因为我们将为您解决所有这些问题。

Google 地图 API 的费用是多少?

官方 Google 地图 API 根据您的使用情况而有所不同https://mapsplatform.google.com/pricing/。在 SerpApi 中,您可以按月订阅使用所有 API,包括 Google 地图。您每月将获得 100 个免费搜索积分。或者,开发者计划从 50 美元起。

为什么要抓取 Google 地图?

抓取 Google 地图数据可能会带来好处,原因如下:

  1. 竞争对手分析:企业使用 Google 地图抓取工具收集有关竞争对手位置、客户评论和评级的数据,这有助于了解市场并制定相应的策略​​。
  2. 潜在客户开发:谷歌地图是一个有价值的潜在客户来源,因为本地和在线企业在平台上列出他们的数据以吸引客户。营销人员可以利用从 Google 地图中抓取的数据,通过有效定位潜在客户来促进销售​​。
  3. 信息数据库:Google 地图是有关餐馆、商店、服务提供商和机构等各种地点信息的中心枢纽。抓取这些信息可以帮助构建用于不同目的的数据库​​。
  4. 市场研究:从 Google 地图抓取中获得的见解可用于市场研究,进一步了解客户行为和偏好,并制定有针对性的营销策略​​。

就是这样!

我希望这篇博文可以帮助您从 Google 地图收集任何地点数据。感谢您的阅读!

发表评论

邮箱地址不会被公开。 必填项已用*标注