从谷歌地图、Yelp 和黄页抓取本地商家信息,可以为销售、市场营销和研究团队提供结构化数据,其规模是人工收集无法比拟的。本指南将向您展示如何操作。 使用 Python 构建管道 Crawlbase 一次运行即可检索数百个城市的完整渲染列表页面,并提取结构化字段,包括商家名称、地址、电话号码、营业时间和评分。
TL;DR:抓取本地商家信息
抓取本地商家信息(来自 Google 地图、Yelp 和 Yellow Pages 等平台)可以让你大规模收集结构化数据(例如名称、地址、电话号码、营业时间和评分),用于潜在客户开发、CRM 数据丰富和市场调研。
然而,由于地理位置相关的结果、JavaScript渲染的内容以及IP封锁和验证码等反机器人保护措施,手动或使用基本脚本执行此操作会失败。
解决方案是将数据检索与解析分开:使用类似这样的工具 Crawlbase 处理渲染、代理轮换和地理定位,然后使用您自己的解析器将结构化数据提取到 JSON 中。
实际上,你需要构建一个 Python 流水线,该流水线:
- 发送基于位置的查询(例如,“奥斯汀的水管工”)
- 获取完全渲染的页面
- 提取关键业务数据
- 一次运行即可覆盖多个城市
最终您将获得一个干净、可扩展的数据集,您可以直接将其用于销售、市场营销或分析,而无需自行管理数据抓取基础设施。有关完整的生产就绪型实施方案,请参阅…… ScraperHub上的项目仓库
什么是本地商家信息数据?
本地商家信息数据是指您在特定区域搜索服务时看到的结构化信息。例如,当您搜索“奥斯汀的水管工”或“丹佛的餐馆”时,搜索结果是由描述每个商家的标准化字段生成的。
至少,这通常包括:
• 公司名称
• 地址
• 电话号码
• 营业时间
• 评分和评论
大多数平台,包括 Google Maps, Yelp和 黄页以一致的格式呈现这些信息,因为这些信息需要能够被搜索,并且能够在不同地点进行比较。
这些数据在实践中用于:
- 领先一代: 按城市或类别构建目标潜在客户名单
- CRM信息丰富化: 使用已验证的联系信息更新销售记录
- 竞争性研究: 绘制各市场竞争对手密度和评级图
其价值在于能够将这些信息结构化,并在多个城市中保持一致。
为什么抓取本地商家信息如此困难
大规模收集这类数据并非像发送请求和解析 HTML 那样简单。难点在于本地平台如何生成和保护其结果。
地理位置相关的结果
本地搜索结果与地理位置直接相关。例如,一个简单的搜索查询“水管工”,如果查询来自奥斯汀、丹佛或凤凰城,返回的商家就会完全不同。
要获得可靠的数据,您需要控制以下两点:
• 查询本身(包括城市)
• 请求位置(地理定位)
如果没有它,结果就会出现不可预测的变化,数据集也会变得不一致。
JavaScript渲染
大多数现代房源平台在初始响应中不会返回完整的内容。
服务器返回的是一个基本的 HTML 结构,列表内容稍后通过 JavaScript 注入。
这意味着标准的 HTTP 请求通常会完全遗漏实际的业务数据。如果不像浏览器那样渲染页面,最终会得到不完整的结果。
阻塞和速率限制
一旦请求数量超过几个,平台就会开始实施限制。
常见问题包括:
• IP 屏蔽
• 验证码挑战
• 和请求限流
除非妥善处理,否则这些保护措施使得大规模刮削变得不可靠。
为何使用 Crawlbase 用于本地列表抓取
这是哪里 Crawlbase 适合与其构建和维护自己的网络爬虫基础设施,不如将其用作检索层。
Crawlbase 根据抓取页面的类型,支持标准请求和基于 JavaScript 的请求:
• 使用 普通令牌 适用于简单的静态页面
• 使用 JavaScript 令牌 对于像谷歌地图和Yelp这样的动态页面
使用时 JavaScript 令牌页面渲染方式与真实浏览器加载页面的方式相同。这意味着您收到的 HTML 代码已经包含了动态加载的列表。
在同一时间, Crawlbase 处理:
• 代理轮换和 IP 管理
• 反机器人保护
• 地理位置定向请求
这种组合解决了前面提到的核心问题。
主要优势在于一致性。您正在与以下人员合作:
• 根据需要完成渲染页面
• 更少的请求被阻止
• 不同地点反应稳定
与其调试基础设施问题,不如专注于提取和构建数据。
当需要在数百个城市运行相同的查询时,这一点就显得尤为重要,因为微小的不一致会迅速影响数据质量。
你正在构建什么
从宏观层面来看,该流程始于一个查询和一个城市。例如,“奥斯汀的水管工”。此输入被发送到…… Crawlbase Crawling API它会代表你检索页面。
不返回部分 HTML, Crawlbase 它可以像真正的浏览器一样加载页面,因此响应中已经包含了所有动态渲染的列表。这对于像 Google Maps 和 Yelp 这样的平台来说非常重要,因为它们的大部分内容都是在初始请求之后加载的。
渲染后的 HTML 返回后,解析器会提取您关心的字段,例如名称、地址、电话号码、营业时间和评分。然后,每个列表都会被转换为结构化格式。
最终生成一个干净的 JSON 数据集,可直接用于潜在客户开发、CRM 系统或分析。

正是这种检索和解析的分离,使得该系统能够扩展到多个城市和多个数据源。
逐步指南:构建爬虫
要实现此流程,您可以使用其中提供的完整工作爬虫。 ScraperHub 存储库.
以下步骤展示了如何在本地进行设置并完成端到端运行。
步骤 1:从 ScraperHub 获取代码
首先下载项目。
来自 ScraperHub 代码库:
• 克隆存储库
• 或者将其下载为 ZIP 文件并解压缩
示例(使用 Git):
1 | 混帐 克隆 https://github.com/ScraperHub/how-to-scrape-local-business-listings.git |
克隆完成后,您的项目结构应如下所示:
• 配置文件 → 处理令牌、重试和设置
• fetcher.py → Crawlbase API请求
• url_builder.py → 为谷歌地图、Yelp、黄页构建网址
• 解析器.py → 提取结构化数据
• 主文件 → 入口点(命令行界面)
第 2 步:设置您的环境
创建虚拟环境并安装依赖项:
1 | python3 -m venv .venv |
接下来,设置您的 Crawlbase 将令牌作为环境变量:
1 | 出口 CRAWLBASE_TOKEN=你的普通令牌 |
备注:
• 两个令牌都需要
• Google Maps 和 Yelp 需要 JS 令牌
• 令牌加载在以下位置处理: 配置文件
步骤 3:运行爬虫程序(单城市)
运行你的第一个测试:
1 | 蟒蛇主.py “水管工” 城市 “奥斯汀” -o output.json |
这里发生了什么:
• 构建查询 URL
• 通过以下方式获取页面 Crawlbase
• 解析列表
• 写入结构化的 JSON 输出
第四步:扩展到多个城市
将同一查询扩展到多个城市:
1 | 蟒蛇主.py “餐馆” 城市 “奥斯汀” “丹佛” “凤凰” -o listings.json |
这是多城市数据抓取的核心。
现在,您无需再使用单个数据集,而是可以在一次运行中收集多个市场的房源信息。
步骤五:使用地理定位
为了确保国际或特定地点的准确性:
1 | 蟒蛇主.py 电工 城市 “伦敦” 国家:英国 |
这样可以确保结果符合目标市场。
步骤六:切换数据源
您可以在不同平台之间切换。
以 Yelp 为例:
1 | 蟒蛇主.py “水管工” 城市 “奥斯汀” --资源 喊叫 |
支持的来源包括:
• 谷歌地图
• Yelp
黄页
URL 生成由以下部分处理: url_builder.py.
步骤 7:缩放 Enterprise Crawler
对于更大的工作负载,例如跨多个查询运行数百个城市的数据, Crawling API 对于按需请求,这种方法效果很好。但是,当处理大量 URL 时,就会出现问题。 Enterprise Crawler 是一个更合适的选择。
它采用异步推送模型,专为批量处理而设计。
过渡过程很简单。您可以重复使用现有设置并添加:
1 | 参数[“打回来”] = 真 |
无需发送请求并等待每个响应,只需将 URL 推送到…… Crawler它会在后台处理所有事务,结果准备就绪后就会立即发送。
在结果处理方面,您可以选择接收结果的方式。
• Crawlbase Cloud Storage: Crawlbase 它会为你存储数据,你可以稍后检索。
• 网络挂接结果准备就绪后,会立即直接发送到您的终端。
如果使用 webhook,则需要设置一个端点来接收数据并将其存储在您的系统中。
访问 Enterprise Crawler 文件 详情请见下文。
结语
只有当抓取本地商家信息能够跨地域扩展时,它才真正有用。手动收集少量结果很容易,但构建一个能够持续从数百个城市提取结构化数据的系统,才是其真正价值所在。
这归根结底取决于三件事的共同作用:
• 提供基于地理位置的查询,以获得准确的本地结果
• 可靠地检索完整数据页面
• 结构化解析以获得可用输出
Crawlbase 它负责处理检索层,因此您无需处理渲染问题、阻塞或代理管理。这使您可以专注于构建真正可用于潜在客户开发、销售或分析的数据集。
开始, 创建 Crawlbase 帐户 获取您的 API 令牌。在扩展规模之前,请使用 1,000 次免费请求来测试整个流程。
常見問題解答
我可以同时抓取多个城市的数据吗?
是的。可以使用以下命令在单个命令中传递多个城市: --cities 标志。爬虫程序在每个位置运行相同的查询,并将结果合并到一个结构化的 JSON 文件中。
什么是 Crawlbase 运行这个项目需要哪些令牌?
您需要普通令牌和 JavaScript 令牌。
• CRAWLBASE_TOKEN 用于标准请求
• CRAWLBASE_JS_TOKEN 对于像 Google Maps 和 Yelp 这样大量使用 JavaScript 的页面来说,这是必需的。
如果没有 JavaScript 令牌,大多数列表数据将无法正确加载,因为内容是动态渲染的。
您可以在您的账户中找到您的代币 Crawlbase 帐户信息中心.
我可以切换数据源吗?
是的。该爬虫支持多个平台。您可以使用 `--source` 参数切换数据源,例如:
• --source yelp
• (其他来源支持) url_builder.py)
每个数据源的 HTML 结构略有不同,但解析器会将输出规范化为一致的格式。
如何处理大规模数据抓取(数百个城市)?
对于较大的工作负载,您可以使用 Crawlbase Enterprise Crawler您无需发出同步请求,而是推送 URL 并通过 webhook 接收结果。这提高了吞吐量,避免了处理数千个查询时出现瓶颈。










