如果您需要 Google 地图中的信息(例如地点详细信息或评论),那么您来对地方了!无论您是要寻找地点还是收集有关当地企业的见解,抓取这些数据都很有价值。让我们学习如何使用 Python 和 SerpApi 的简单 API 来抓取 Google 地图地点数据及其评论。
如何抓取 Google 地图数据结果?
至少有三种方法可以做到这一点:
– 使用 SerpApi (推荐)
– Google 的 Places API
– 创建您的 DIY Google 地图抓取解决方案
- 使用 SerpApi(推荐)
SerpApi 提供了一个很好的结构化 JSON,其中包含我们需要从本地地图结果中获取的所有相关信息。它还提供完整的数据,如评论和照片。因此,您可以节省时间和精力从 Google 地图收集数据,而无需构建自己的 Google 地图抓取工具。
链接:Google 地图 API 文档。
这篇博文准确介绍了如何使用 SerpApi 抓取 Google 地图数据。
- 使用 Google 提供的地点 API
我们可以使用Google的places API。但首先,我们必须设置一个 Google Cloud 项目并完成设置说明,然后才能获取 API 密钥。然后我们可以使用 HTTP Post 请求或 Python SDK 来执行搜索。
缺点:获取 API 密钥的初始设置很复杂。
- 创建您的 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 支持两种类型的搜索。默认搜索type
是search
,它将返回键内的结果数组local_results
:
另一个type
是place
。可以type
手动设置为place
,与data
参数一起提供特定位置或企业的详细信息。这种类型的搜索返回place_results
.
如果您对一个非常具体的位置进行搜索type=search
,即您提供完整的地址,Google 将推断type=place
并返回place_results
该位置:
更广泛地说,local_results
是当搜索更一般时提供的列表。另一方面,place_results
当查询非常具体时,或者您使用place_id
或data
和typ=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_id
或data_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 保护网页抓取活动。
如何抓取谷歌地图而不被屏蔽?
- 使用代理:轮换多个 IP 地址以防止您的主 IP 被阻止。这使得谷歌更难从单一来源查明抓取活动。
- 设置延迟:不要太快发送请求。在请求之间等待几秒钟,以模仿人类行为并避免触发速率限制。
- 更改用户代理:针对每个请求轮换用户代理。这使得请求看起来像是来自不同的设备和浏览器。
- 使用验证码解决服务:有时,如果 Google 检测到异常活动,它会使用验证码进行提示。现有的服务可以自动为您解决这些问题。
虽然这些方法可以在手动抓取时提供帮助,但您在使用 SerpApi 时不必担心轮换代理、设置延迟、更改用户代理或解决验证码问题。它使获得搜索结果变得更容易、更快,因为我们将为您解决所有这些问题。
Google 地图 API 的费用是多少?
官方 Google 地图 API 根据您的使用情况而有所不同https://mapsplatform.google.com/pricing/。在 SerpApi 中,您可以按月订阅使用所有 API,包括 Google 地图。您每月将获得 100 个免费搜索积分。或者,开发者计划从 50 美元起。
为什么要抓取 Google 地图?
抓取 Google 地图数据可能会带来好处,原因如下:
- 竞争对手分析:企业使用 Google 地图抓取工具收集有关竞争对手位置、客户评论和评级的数据,这有助于了解市场并制定相应的策略。
- 潜在客户开发:谷歌地图是一个有价值的潜在客户来源,因为本地和在线企业在平台上列出他们的数据以吸引客户。营销人员可以利用从 Google 地图中抓取的数据,通过有效定位潜在客户来促进销售。
- 信息数据库:Google 地图是有关餐馆、商店、服务提供商和机构等各种地点信息的中心枢纽。抓取这些信息可以帮助构建用于不同目的的数据库。
- 市场研究:从 Google 地图抓取中获得的见解可用于市场研究,进一步了解客户行为和偏好,并制定有针对性的营销策略。
就是这样!
我希望这篇博文可以帮助您从 Google 地图收集任何地点数据。感谢您的阅读!