从谷歌地图、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 系统或分析。

抓取本地商家信息的工作流程图,将城市和搜索查询发送到…… Crawlbase Crawling API它会返回完全渲染的 HTML

正是这种检索和解析的分离,使得该系统能够扩展到多个城市和多个数据源。

逐步指南:构建爬虫

要实现此流程,您可以使用其中提供的完整工作爬虫。 ScraperHub 存储库.

以下步骤展示了如何在本地进行设置并完成端到端运行。

步骤 1:从 ScraperHub 获取代码

首先下载项目。

来自 ScraperHub 代码库:

克隆存储库
• 或者将其下载为 ZIP 文件并解压缩

示例(使用 Git):

1
2
混帐 克隆 https://github.com/ScraperHub/how-to-scrape-local-business-listings.git
cd 如何抓取本地商家列表

克隆完成后,您的项目结构应如下所示:

配置文件 → 处理令牌、重试和设置
fetcher.py → Crawlbase API请求
url_builder.py → 为谷歌地图、Yelp、黄页构建网址
解析器.py → 提取结构化数据
主文件 → 入口点(命令行界面)

第 2 步:设置您的环境

创建虚拟环境并安装依赖项:

1
2
3
4
5
python3 -m venv .venv
资源 .venv/bin/activate
# Windows:.venv\Scripts\activate

pip install -r requirements.txt

接下来,设置您的 Crawlbase 将令牌作为环境变量:

1
2
出口 CRAWLBASE_TOKEN=你的普通令牌
出口 CRAWLBASE_JS_TOKEN=你的 js_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
2
参数[“打回来”] = 
参数[“爬行者”] = 本地列表Crawler" #您的定制 Crawler 姓名

无需发送请求并等待每个响应,只需将 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 接收结果。这提高了吞吐量,避免了处理数千个查询时出现瓶颈。