如何使用 Python 抓取 Google 地图
在这里,我将一步一步地教你怎么做,简单易学。让我们开始吧!
什么是 Google 地图搜索?
Google Maps scraper 是一种脚本或工具,旨在自动检索 Google Maps 中的信息。提取的数据有多种用途,包括
- 市场研究:分析竞争对手信息或探索市场趋势。
- 创造商机:为外联活动收集详细联系信息。
- 商业分析:通过评论和评级深入了解客户反馈。
然而,谷歌地图的抓取则更为复杂。这个动态的交互式平台需要浏览器自动化来可靠地访问和提取数据。
可以提取哪些数据?
以下是您可以搜索的主要数据字段列表:
- 企业名称:标识组织或实体。
- 地址:企业的实际位置。
- 电话号码:客户咨询的详细联系方式。
- 网站网址:企业网站链接。
- 营业时间:开放和关闭时间。
- 评级和评论:平均评分和个人反馈。
- 图片:与企业相关的照片。
- 标签和类别:其他描述包括菜肴类型或提供的服务。
手动搜索的替代方法
在开始使用搜索指南之前,我想先介绍一些可能对你有帮助的解决方案。以下服务可以帮助你大规模搜索 Google 地图,有些还提供免费试用:
- Bright Data - 最适合高级搜索;具有广泛的代理管理和可靠的应用程序接口。
- Octoparse - 用户友好的无代码工具,用于从网站自动提取数据。
- ScrapingBee - 面向开发人员的应用程序接口,可高效处理代理、浏览器和验证码。
- Scrapy - 开源 Python 框架是数据抓取和刮擦任务的理想选择。
- ScraperAPI - 利用先进的反僵尸技术处理棘手的刮擦问题;非常适合开发人员使用。
- Apify - 多功能平台提供现成的刮刀和强大的刮削能力。
步骤 1:设置环境
安装 Python
确保系统已安装 Python 3。您可以从 python.org.
创建项目目录
为项目创建专用文件夹,整理工作:
mkdir google-maps-scraper
CD google-maps-scraper
设置虚拟环境
虚拟环境有助于隔离依赖关系。使用以下命令创建一个虚拟环境:
python -m venv env
source env/bin/activate # On Windows, use `env\Scripts\activate`
安装所需程序库
安装 Selenium 以实现浏览器自动化:
pip install selenium
步骤 2:配置 Selenium
Selenium 是一个功能强大的浏览器自动化库。首先创建一个 Python 脚本 (scraper.py),并配置 Selenium 以启动 Chrome 浏览器。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument(" - headless") # Run browser in the background
driver = webdriver.Chrome(service=Service(), options=options)
driver.get("https://www.google.com/maps")
这段代码将初始化一个无头 Chrome 浏览器,使其能够以编程方式与 Google 地图交互。在脚本末尾添加 driver.quit(),以确保浏览器在执行后关闭。
步骤 3:浏览谷歌地图页面
连接到 Google 地图后,您需要处理 GDPR cookie 提示(如果适用),并导航到所需的搜索查询。
处理 GDPR 提示
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
try:
accept_button = driver.find_element(By.CSS_SELECTOR.CSS)、 "[aria-label='Accept all']")
accept_button.click()
except NoSuchElementException:
print("No GDPR requirements detected")
提交搜索查询
使用 Selenium 填写搜索栏,然后点击搜索按钮:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
search_box = WebDriverWait(driver、 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR、 "#searchboxinput"))
)
search_box.send_keys("Italian restaurants")
search_button = driver.find_element(By.CSS_SELECTOR、 "button[aria-label='Search']")
search_button.click()
步骤 4:提取业务数据
搜索结果将显示企业列表。这些元素是动态的,因此我们使用 Selenium 的 WebDriverWait 来确保它们在尝试提取之前加载。
business_items = WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.XPATH, '//div[@role="feed"]//div[contains(@jsaction、 "mouseover:pane")]'))
)
您可以为每个企业提取相关详细信息,如名称、评级、评论等。
提取基本信息
for item in business_items:
name = item.find_element(By.CSS_SELECTOR, "div.fontHeadlineSmall").text
link = item.find_element(By.CSS_SELECTOR, "一个[jsaction]").get_attribute("href")
print(f"Business: {name}, Link: {link}")
摘录评论和评级
import re
reviews_element = item.find_element(By.CSS_SELECTOR.Review_element)、 "span[role='img']")
reviews_text = reviews_element.get_attribute("aria-label")
match = re.match(r"(\d+\.\d+) stars (\d+[,]*\d+) Reviews", reviews_text)
if match:
stars = float(match.group(1))
review_count = int(match.group(2).replace(",", ""))
print(f"Stars: {stars}, Reviews: {view_count}")
提取其他信息
收集地址、时间和价格范围等属性:
info_div = item.find_element(By.CSS_SELECTOR、 ".fontBodyMedium")
spans = info_div.find_elements(By.XPATH、 ".//span[not(@*) or @style]")
details = [span.text for span in spans if span.text.strip()]
print("Details:", details)
第 5 步:将数据保存为 CSV
将搜刮到的数据整理成结构化格式,并保存为 CSV 文件。
准备导出数据
data = []
for item in business_items:
# Collect data as shown above and append to a list
data.append({
"name": name、
"link": link,
"stars": stars、
"review_count": review_count、
"details": "; ".join(details),
})
写入 CSV
import csv
with open("business_data.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
克服挑战
动态内容加载
Google 地图严重依赖 JavaScript,因此元素的加载是异步的。请始终使用显式等待 (WebDriverWait),以避免在元素出现前尝试与之交互。
防窃听措施
Google 可能会检测到自动活动,导致验证码或 IP 屏蔽。为了减少这种情况的发生:
- 使用代理服务器轮换 IP。
- 随机延迟动作,模仿人类行为。
- 使用浏览器配置文件减少僵尸检测。
伦理方面的考虑
在搜索之前,请查看 Google 的服务条款以确保合规。未经授权的搜刮可能违反法律或道德标准。
扩大规模:使用应用程序接口
对于大型项目,值得探索 Bright Data 或 ScrapeHero 等应用程序接口。这些工具简化了从谷歌地图中提取数据的过程。它们具有 IP 轮换和反僵尸保护等内置功能,为您节省时间和精力。您无需担心管理技术难题,它们会为您处理好一切。这使它们成为需要快速获取大量数据的企业或研究人员的最佳选择。虽然这些服务不是免费的,但对于大规模需求来说,它们是值得投资的。始终确保您的数据收集符合道德规范和任何适用的法律准则。
结论
使用 Python 对 Google 地图进行刮擦是一种实用的方法,可自动收集数据,满足研究或业务需求。通过将 Selenium 与 Python 的强大库相结合,您可以构建一个能够提取有价值信息的抓取器。切记要保持道德规范,并探索大型项目的扩展选项。