Anonym0usWork1221/GMapsScraper
GitHub: Anonym0usWork1221/GMapsScraper
一个基于 Python 的多线程 Google Maps 爬虫,无需 API 密钥即可批量提取商户信息及联系方式并导出为多种格式。
Stars: 62 | Forks: 12
# GMapsScraper — Python 编写的 Google Maps 爬虫 🗺️
**GMapsScraper** 是一个快速、多线程的 **Google Maps 爬虫**,使用 **Python** 编写 — **无需 API key**。它从 Google Maps 搜索结果中提取**商业线索**:**名称、类别、评分、评论数、价格水平、地址、营业时间、电话号码、网站、菜单链接、照片和 GPS 坐标(纬度/经度)** — 并且可以抓取每个商家的网站以获取**电子邮件和社交媒体链接**(Facebook、Instagram、X/Twitter、YouTube、LinkedIn)。将所有内容导出为 **CSV、Excel (XLSX) 或 JSON**。
## ✨ 功能特性
- 🔑 **无需 API key,无需付费** — 通过 `undetected-chromedriver` 驱动真实浏览器,实现隐蔽的防机器人抓取。
- ⚡ **多线程** — 并行抓取多个查询 (`-w`)。
- 🧾 **每个地点 15+ 个字段** — 标题、评分、评论数、价格、类别、地址、营业时间、电话、网站、菜单、照片、纬度/经度、简介。
- 📧 **联系方式与社交媒体扩充** — 可选抓取每个商家网站以获取电子邮件 + Facebook/Instagram/Twitter/YouTube/LinkedIn (`-se`)。
- 💾 **导出为 CSV、Excel 或 JSON** (`-of`)。
- 🖥️ **支持无头或窗口化模式**,可运行于 **Windows、macOS 和 Linux**(包括无头服务器)。
- 🎯 **可配置的**结果限制、滚动时间和等待时间。
如果您发现任何错误或有功能停止工作,请随时提交 issue 或联系我。
* 发布日期 : 2023/08/16
* 更新日期 : 2024/02/05
* 作者 : **__Abdul Moez__**
* 版本 : 0.3b
* 代码库 : https://github.com/Anonym0usWork1221/GMapsScraper
* [文档](https://github.com/Anonym0usWork1221/GMapsScraper#gmapsscraper-documentation)
MIT 许可证
版权所有 (c) 2025 Abdul Moez
# 版本 0.3b
```
-----------------------------------------CHANGE LOGS--------------------------------------------------
1. Added support for newer Python versions (3.12+). Fixed the `No module named 'distutils'`
error by depending on `setuptools`, which provides the distutils compatibility shim
(distutils was removed from the standard library in Python 3.12 / PEP 632).
2. Wired the `-of`/`--output-format` flag through so EXCEL and JSON outputs work
(previously it was parsed but ignored, so output was always CSV).
3. Fixed worker query distribution: queries are no longer dropped when the query count
isn't evenly divisible by the number of threads.
4. Updated all scrapers to the current Google Maps layout. Google reworked the Maps DOM,
which broke the search box and every detail-field selector (search now used `name="q"`
instead of `id="searchboxinput"`, and the old `#QA0Szd` container was removed). Re-mapped
search, title, rating, category, address, phone, website, menu, working hours, cover image,
related images, and about/description to the new DOM (using stable `data-item-id`/`aria`
hooks where possible).
5. Auto-detect the installed Chrome version and download a matching driver, fixing
`This version of ChromeDriver only supports Chrome version N` mismatches.
6. Fixed `FileExistsError` race when multiple threads created the output folder at once.
7. Result limit (`-l`) now returns exactly N results (was returning N+1), and scrolling
stops reliably when no new results load even if the end-of-list marker changes.
8. Added the missing `lxml` dependency and made HTML parsing fall back to the standard
library parser, fixing `Couldn't find a tree builder with the features you requested: lxml`
in the website (`-se`) scraper.
9. Hardened scraping: a single bad result no longer aborts the whole query (it is skipped
and logged), the Maps UI is pinned to English (`hl=en`) so the layout-based selectors stay
stable across regions, and the title now waits for non-empty text before being read.
```
# 版本 0.2b
```
-----------------------------------------CHANGE LOGS--------------------------------------------------
1. Removed manual driver path (the driver will now be downloaded automatically).
2. Added advanced security patches to make the driver more undetectable.
3. Cleaned the code for better readability.
4. Fixed link detection in the query file.
5. Removed the dictionary cleaner code.
6. Set verbose mode to `True` by default; use `-nv` to disable it.
7. Added support for multiple output formats. You can set the output format using
`-of CSV`. Available formats: [CSV, EXCEL, JSON].
8. Added a maximum scroll wait time for reaching the end of Google Maps results.
You can set the scroll wait time using `-sm`. Example: for 6 minutes, use `-sm 6`.
9. Changed the license from GNU to MIT.
```
## 环境要求
* Python 3.7 或更高版本(已测试至 3.12;`setuptools` 会自动安装以确保 `undetected-chromedriver` 在 3.12+ 上正常运行)
* Google Chrome 稳定版
* 依赖项文件(如文档安装部分所述)
## 支持的平台
* Linux
* Windows
* Mac
* Linux 服务器(不支持 `窗口化浏览器`)
## 简单用法
对于简单的执行,您甚至不需要任何参数,因为所有参数都有默认值。只需输入(强烈建议使用 `-v` 标签获取详细输出。它只会改变状态标签,让您随时掌握最新进度):
```
python3 maps.py
```
包含所有参数后的命令如下所示。
```
python maps.py -q ./queries.txt -w 2 -l -1 -u "Not Available" -bw 15 -se contacts -se about -o ./CSV_FILES -of "CSV" -wb -sm 6
```
## 此脚本抓取哪些内容?
1. `Latitude` (纬度):特定地点的纬度坐标,通常以十进制数字表示。它表示地球表面上的南北位置。
2. `Longitude` (经度):特定地点的经度坐标,同样以十进制数字表示。它表示地球表面上的东西位置。
3. `Map Link` (地图链接):指向特定地点 Google Maps 页面的链接。此链接可用于在地图上查看该位置并获取更多信息。
4. `Cover Image` (封面图片):与该地点关联的封面图片的 URL 或来源。这可能是代表该机构的图片,例如其店面或徽标。
5. `Card Title` (卡片标题):该地点的标题或名称,通常用作该机构的主要标识符。
6. `Rating` (评分):该地点的评分,通常以数值或分数表示。这表示客户对该机构的整体满意度或质量评价。
7. `Privacy Price` (价格水平):该地点的价格水平表示,指示其昂贵程度或性价比。这可能以美元符号或其他符号显示。
8. `Category` (类别):该地点的类别或类型,描述它是什么样的机构(例如:餐厅、咖啡馆、博物馆等)。
9. `Address` (地址):该地点的物理地址,包括街道名称、城市、州/省和邮政编码。它帮助用户定位该机构。
10. `Working Hours` (营业时间):该地点的营业时间,通常以每周每日的时间表形式提供。它指定了该机构何时向公众开放。
11. `Menu Link` (菜单链接):如果有的话,指向该地点菜单的链接。这可以提供有关餐厅或咖啡馆提供的饮食详细信息。
12. `Website Link` (网站链接):指向该地点官方网站的链接。这允许用户直接从该机构的网站获取更多信息。
13. `Phone Number` (电话号码):该地点的联系电话号码。它为客户提供了一种与该机构取得联系的方式。
14. `Related Images` (相关图片):与该地点相关的图片 URL 或来源列表。这些图片可能会展示该机构的内部、外部或各个方面。
15. `About Description` (关于描述):该地点的描述或简介,通常包括其历史、服务、产品以及任何独特的信息。
### 高级抓取(此脚本抓取哪些内容?)
该脚本旨在根据提供的命令行参数(例如:`-se about`)暴力测试 URL,并将 "about" 附加到基础网站 URL 后面(例如:https://www.site.com/about)。然后它会导航到该 "about" 页面并提取指定的数据属性。
提取的属性有助于收集有关该网站或机构的联系方式和社交媒体信息。此信息通常位于网站的 "about" 或 "contact" 页面上,对于希望连接该网站的社交媒体账号或通过电子邮件联系的用户非常有用。该脚本使用 Selenium 自动化此过程并收集数据,以供进一步分析或存储。
此外,它会抓取这些属性(如果在 `CLI` 中使用了 `-se` 标签):
1. `Site Email` (网站邮箱):与该网站客服或支持关联的电子邮件地址。这可用于用户提出咨询或反馈。
2. `Facebook Links` (Facebook 链接):指向该网站或机构的官方 Facebook 页面或个人资料的链接。这些链接可以帮助用户在 Facebook 上与该网站的社交媒体建立联系。
3. `Twitter Links` (Twitter 链接):指向该网站或机构的官方 Twitter 账号的链接。这些链接允许用户在 Twitter 上关注该网站的最新动态和公告。
4. `Instagram Links` (Instagram 链接):指向该网站或机构的官方 Instagram 账号的链接。这些链接允许用户访问视觉内容并在 Instagram 上与该网站互动。
5. `YouTube Links` (YouTube 链接):指向该网站或机构的官方 YouTube 频道的链接。用户可以找到与该网站相关的视频、教程或其他多媒体内容。
6. `LinkedIn Links` (LinkedIn 链接):指向该网站或机构的官方 LinkedIn 个人资料或页面的链接。这提供了一个专业的社交平台和与业务相关的更新。
## 可视化
1. **_脚本执行_**
2. **_脚本抓取的部分数据点可视化_**。
## GMapsScraper 文档
此命令行工具旨在使用多线程和高效的搜索算法从 Google Maps 搜索结果中抓取数据。本文档将为您提供关于该工具各项功能及其有效使用方法的全面概述。
## 目录
- [介绍](#introduction)
- [安装](#installation)
- [用法](#usage)
- [命令行参数](#command-line-arguments)
- [特定选项帮助](#help-for-specific-options)
- [输入文件格式](#input-file-format)
- [输出](#output)
- [高级用法](#advanced-usage)
- [疑难解答](#troubleshooting)
- [结论](#conclusion)
## 1. 介绍
`GMapsScraper` 工具是一个 Python 脚本,它利用多线程和高效搜索算法的强大功能,从 Google Maps 搜索结果中抓取数据。它对于提取给定一组搜索查询的商业或位置详细信息特别有用。该工具旨在在最大化抓取效率的同时提供用户友好的体验。
## 2. 安装
要使用 `GMapsScraper`,您需要在系统上安装 Python。此外,您需要使用以下命令安装 Google Chrome 及所需的依赖项:
```
pip install -r requirements.txt
```
## 3. 用法
要使用 `GMapsScraper`,请按照以下步骤操作:
准备一个包含搜索查询的文本文件。每个查询应在文件中单独占一行。
打开终端并导航到包含 `maps.py` 脚本的目录。
使用所需的命令行参数运行脚本。
### 命令行参数
`GMapsScraper` 脚本支持以下命令行参数:
* `-q` 或 `--query-file`:查询文件的路径。默认值:`./queries.txt`
* `-w` 或 `--threads`:要使用的线程数。默认值:`1`
* `-l` 或 `--limit`:要抓取的结果数量。使用 `-1` 获取所有结果。默认值:`-1`
* `-u` 或 `--unavailable-text`:用于替换不可用信息的文本。默认值:`Not Available`
* `-bw` 或 `--browser-wait`:浏览器等待时间(以秒为单位)。默认值:`15`
* `-se` 或 `--suggested-ext`:建议尝试的 URL 扩展名。可以多次指定。
* `-wb` 或 `--windowed-browser`:禁用无头模式(显示浏览器窗口)。默认值:无头模式
* `-nv` 或 `--disable-verbose`:禁用详细模式(禁用额外的控制台输出)。
* `-o` 或 `--output-folder`:用于存储 CSV 详细信息的输出文件夹。默认值:`./CSV_FILES`
* `-of` 或 `--output-format`:用于存储抓取数据的输出格式。可用格式 [CSV, EXCEL, JSON] 默认值:`CSV`。
* `-sm` 或 `--scroll-minutes`:等待结果结束的最大分钟数(以分钟计)。
(如果滚动检查器停止工作,将终止滚动事件)默认值:`1`。
### 特定选项帮助
您可以使用以下命令行选项获取特定主题的帮助:
* `--help-query-file`:获取有关指定查询文件格式的帮助。
* `--help-limit`:获取有关指定结果数量限制的帮助。
* `--help-driver-path`:获取有关指定 Chrome driver 路径的帮助。
## 4. 输入文件格式
查询文件应包含搜索查询列表,每个查询单独占一行。例如:
```
Pizza restaurants
Coffee shops
Gas stations
```
## 5. 输出
抓取的数据保存在指定的输出文件夹中。**_来自每个查询的所有结果都会被追加到一个单一文件中_**,文件名为 `google_maps_data.`(例如 `google_maps_data.csv`),其中扩展名与您选择的 `-of` 输出格式(CSV/EXCEL/JSON)相匹配。
## 6. 高级用法
对于高级用户,该脚本提供了用于自定义各种参数的选项,例如 `线程数`、`结果限制`、`浏览器行为` 等。可以根据您的需求调整这些选项,以优化抓取过程。
## 7. 疑难解答
如果您在使用 `GMapsScraper` 工具时遇到任何问题,请考虑以下提示:
* 确保您已安装所需的依赖项。
* 仔细检查查询文件的路径并确保其正确无误。
* 如果遇到与 driver 相关的问题,请确保已安装 Google Chrome(稳定版) — 匹配的 driver 会自动下载。
## 8. 结论
`GMapsScraper` 工具提供了一种便捷的方式,利用高效的算法和多线程从 Google Maps 搜索结果中提取数据。按照本文档中的说明,您可以利用该工具的强大功能为您的项目收集有价值的地理位置信息。
如需更多帮助或咨询,请随时联系该工具的作者 **_Abdul Moez_**。
感谢您使用 `GMapsScraper` 工具!
## 协助
如果您需要协助,可以在我的邮件列表中寻求帮助:
* 邮箱 : abdulmoez123456789@gmail.com
## 给我买杯咖啡
如果您愿意支持我,可以给我买杯咖啡。
Payoneer: ``abdulmoez123456789@gmail.com``
2. **_脚本抓取的部分数据点可视化_**。
## GMapsScraper 文档
此命令行工具旨在使用多线程和高效的搜索算法从 Google Maps 搜索结果中抓取数据。本文档将为您提供关于该工具各项功能及其有效使用方法的全面概述。
## 目录
- [介绍](#introduction)
- [安装](#installation)
- [用法](#usage)
- [命令行参数](#command-line-arguments)
- [特定选项帮助](#help-for-specific-options)
- [输入文件格式](#input-file-format)
- [输出](#output)
- [高级用法](#advanced-usage)
- [疑难解答](#troubleshooting)
- [结论](#conclusion)
## 1. 介绍
`GMapsScraper` 工具是一个 Python 脚本,它利用多线程和高效搜索算法的强大功能,从 Google Maps 搜索结果中抓取数据。它对于提取给定一组搜索查询的商业或位置详细信息特别有用。该工具旨在在最大化抓取效率的同时提供用户友好的体验。
## 2. 安装
要使用 `GMapsScraper`,您需要在系统上安装 Python。此外,您需要使用以下命令安装 Google Chrome 及所需的依赖项:
```
pip install -r requirements.txt
```
## 3. 用法
要使用 `GMapsScraper`,请按照以下步骤操作:
准备一个包含搜索查询的文本文件。每个查询应在文件中单独占一行。
打开终端并导航到包含 `maps.py` 脚本的目录。
使用所需的命令行参数运行脚本。
### 命令行参数
`GMapsScraper` 脚本支持以下命令行参数:
* `-q` 或 `--query-file`:查询文件的路径。默认值:`./queries.txt`
* `-w` 或 `--threads`:要使用的线程数。默认值:`1`
* `-l` 或 `--limit`:要抓取的结果数量。使用 `-1` 获取所有结果。默认值:`-1`
* `-u` 或 `--unavailable-text`:用于替换不可用信息的文本。默认值:`Not Available`
* `-bw` 或 `--browser-wait`:浏览器等待时间(以秒为单位)。默认值:`15`
* `-se` 或 `--suggested-ext`:建议尝试的 URL 扩展名。可以多次指定。
* `-wb` 或 `--windowed-browser`:禁用无头模式(显示浏览器窗口)。默认值:无头模式
* `-nv` 或 `--disable-verbose`:禁用详细模式(禁用额外的控制台输出)。
* `-o` 或 `--output-folder`:用于存储 CSV 详细信息的输出文件夹。默认值:`./CSV_FILES`
* `-of` 或 `--output-format`:用于存储抓取数据的输出格式。可用格式 [CSV, EXCEL, JSON] 默认值:`CSV`。
* `-sm` 或 `--scroll-minutes`:等待结果结束的最大分钟数(以分钟计)。
(如果滚动检查器停止工作,将终止滚动事件)默认值:`1`。
### 特定选项帮助
您可以使用以下命令行选项获取特定主题的帮助:
* `--help-query-file`:获取有关指定查询文件格式的帮助。
* `--help-limit`:获取有关指定结果数量限制的帮助。
* `--help-driver-path`:获取有关指定 Chrome driver 路径的帮助。
## 4. 输入文件格式
查询文件应包含搜索查询列表,每个查询单独占一行。例如:
```
Pizza restaurants
Coffee shops
Gas stations
```
## 5. 输出
抓取的数据保存在指定的输出文件夹中。**_来自每个查询的所有结果都会被追加到一个单一文件中_**,文件名为 `google_maps_data.标签:Splunk, 逆向工具