🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

ChatGPT 抓取 API:提取结构化地图和本地商业数据

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

15-Jul-2026

TL;DR:

  • ChatGPT 数据抓取器 (scraper.chatgpt) 现在返回一个结构化的 map 对象, 当 ChatGPT 的回答包含本地商户时。
  • 一个 POST 请求到 /api/v2/scraper/execute 使用本地意图提示返回包括名称、坐标、地址、电话、网站、营业时间、评分、评论数量、价格水平和列表提供商的排名地点。
  • 不再需要解析文本: ChatGPT 在“最佳咖啡店 … 附近”的回答中提到的地点将以干净的数组返回,您可以对其进行排序、过滤和存储。
  • 字段可以为空且来源于提供者: 每个实体的评分、营业时间和距离可能缺失,因此要谨慎解析。
  • 开始免费。 新的 Scrapeless 帐户包括免费的抓取 API 额度 — 请在 app.scrapeless.com 注册。

当您向 ChatGPT 提出本地问题时,如“时代广场附近最佳评价的咖啡店”——回答会提到真实地点,而直到最近,这些数据都被锁在文本中。 Scrapeless 的 抓取 API 现在将其呈现为专用的 map 对象:带有完整配置文件的商户排名列表,准备好进行排名或监控。 本指南展示了如何请求它,它包含什么,以及哪些字段需要注意。下面的每个请求和字段都是从该演员的实时运行中捕获的。

您可以使用 ChatGPT 地图数据做什么

该演员接受一个本地意图提示并返回 ChatGPT 提供的结构化实体商户。实际上,这使您能够:

  • 跟踪本地包可见性 — 看到在“最佳 X 附近 Y”查询中 ChatGPT 名称的商户,以及它们的排名、评分和评论数量。
  • 构建位置数据集 — 提取答案中地点的名称、坐标、地址、电话和网站,与 地点 API 曝露的相同配置文件字段,而无需抓取地图用户界面。
  • 监控品牌或竞争对手 — 检查特定商户是否随时间出现在 ChatGPT 的本地推荐中。
  • 向下游系统提供数据 — 将排名实体传送到仪表板、地图或警报中,以清晰的 JSON 格式。

为什么选择 Scrapeless ChatGPT 演员

ChatGPT 的回答是在接口后生成的,而不是作为结构化数据提供的。Scrapeless 演员运行查询并返回一个开发者友好的包装,因此您的代码读取字段,而不是正则解析答案、驱动浏览器或维护阻止基础设施。 map 对象是您已经从 ChatGPT 演员中获取的相同响应的一部分,除了答案文本、搜索结果和产品。

端点和参数

该演员在同步抓取 API 端点上运行。使用您的令牌在 x-api-token 头中进行身份验证。

  • 端点: POST https://api.scrapeless.com/api/v2/scraper/execute
  • 演员: scraper.chatgpt
输入字段 类型 必需 描述
prompt 字符串 发送给 ChatGPT 的问题。使用本地意图(例如“最佳咖啡店 … 附近”)来填充 map
country 字符串 目标国家代码,例如 US
web_search 布尔值 启用网页搜索增强;针对本地查询推荐使用。
shopping 布尔值 将产品数据提取到 products 中(费用按更高的费率计费)。

当答案包含本地商户时,map 对象出现在 task_result 中;非本地提示返回空 map

认证请求

一个最小化的请求看起来像这样(示例 — 替换令牌):

bash Copy
curl 'https://api.scrapeless.com/api/v2/scraper/execute' \
  --header 'Content-Type: application/json' \
  --header 'x-api-token: YOUR_API_TOKEN' \
  --data '{
    "actor": "scraper.chatgpt",
    "input": {
      "prompt": "时代广场附近最佳评价的咖啡店",
      "country": "US",
      "web_search": true
    }
  }'

Python 集成

此示例从 SCRAPELESS_API_KEY 环境变量读取令牌,发送本地查询,并打印 map 对象中的排名地点。它仅使用 Python 标准库。

python Copy
import json
import os
import urllib.request

API_URL = "https://api.scrapeless.com/api/v2/scraper/execute"
API_TOKEN = os.environ["SCRAPELESS_API_KEY"]

payload = {
    "actor": "scraper.chatgpt",
    "input": {
        "prompt": "时代广场附近最佳评价的咖啡店",
        "country": "US",
        "web_search": True,
    },
}

request = urllib.request.Request(
    API_URL,
    data=json.dumps(payload).encode("utf-8"),
    headers={"Content-Type": "application/json", "x-api-token": API_TOKEN},
    method="POST",
)

with urllib.request.urlopen(request, timeout=180) as response:

数据 = json.loads(response.read().decode("utf-8"))

结果 = 数据.get("task_result", {})
实体 = (结果.get("map")或{}).get("entities")或[]

print("状态:", 数据.get("status"))
print("地图实体数量:", len(实体))

对于地方在实体[:5]:
内部 = 地方.get("entity", {})
print("-", 地方.get("name"))
print(" 评分:", 内部.get("rating"), "| 评论数:", 内部.get("review_count"), "| 价格:", 内部.get("price_str"))
print(" 地址:", 内部.get("address"))

地图对象

map对象位于task_result中,包含一个排名的entities列表和一个未排名的raw_search_entities列表。下面的字段是你将使用的字段;值是来自实时运行的示例,经过截断以保持长度。

json Copy
// 来自实时scraper.chatgpt运行的示例 - 字段名称真实,值已截断。
{
  "status": "success",
  "task_result": {
    "map": {
      "entities": [
        {
          "name": "Frisson Espresso",
          "category": "coffee_shop",
          "latitude": 40.760837,
          "longitude": -73.9889995,
          "entity": {
            "address": "326 W 47th St, New York, NY 10036, United States",
            "phone": "+1 646-850-3928",
            "website_url": "<business website>",
            "hours": [{ "day": 5, "start": "0700", "end": "1800" }],
            "is_open": false,
            "categories": ["Coffee shop", "Cafe", "Espresso bar"],
            "rating": 4.6,
            "review_count": 1006,
            "price_str": "$",
            "provider": "yelp-feed",
            "provider_url": "<provider listing URL>",
            "distance_meters": null
          }
        }
      ],
      "raw_search_entities": []
    }
  }
}
字段 类型 描述
entities 数组 ChatGPT为查询产生的排名地点。
entities[].name 字符串 商家名称。
entities[].latitude / longitude 数字 地图标记的坐标。
entities[].category 字符串 实体类型,例如coffee_shop
entities[].entity.address 字符串 完整街道地址。
entities[].entity.phone 字符串 电话号码。
entities[].entity.website_url 字符串 官方网站。
entities[].entity.hours 数组 按天列出的营业时间。
entities[].entity.is_open 布尔值 当前是否开放。
entities[].entity.categories 数组 可读的人类类别标签。
entities[].entity.rating 数字 平均评分。
entities[].entity.review_count 数字 评论数量。
entities[].entity.price_str 字符串 价格水平,例如$
entities[].entity.provider 字符串 列表来源,例如yelp-feed
entities[].entity.provider_url 字符串 提供者的列表页面。
entities[].entity.distance_meters 数字 从搜索位置的距离;可能为null。
raw_search_entities 数组 无排名候选实体。

对时代广场附近咖啡的实时查询返回了八个排名的地点;首个结果Frisson Espresso的评分为4.6,评论数为1,006,价格水平为$,完整的营业时间,以及其列表提供者信息。

常见数据结构问题

  • 对于非本地提示,map为空。 该对象仅在答案包含商家时填充。如果你得到空的map,则查询没有本地意图 - 在提示中添加一个地点并启用web_search
  • 地点资料嵌套在一个级别下。 排名字段(namelatitudelongitudecategory)位于实体上,但联系和个人资料字段位于entity.*下面。请读取place["entity"]["rating"],而不是place["rating"]
  • 字段是提供方来源且可为空的。 对于给定实体,distance_metershours,甚至rating可能为null,因此在使用前需要进行验证。
  • 使用raw_search_entities进行回忆。 排名的entities列表是ChatGPT展示的;raw_search_entities保留了额外候选项,以便于需要更广泛覆盖时使用。

陪伴行为者

map对象是ChatGPT响应的一部分,同时也包含答案文本、search_resultproducts。相同的请求形状适用其他回答引擎 - 可以将scraper.chatgpt更换为scraper.geminiscraper.perplexity和其他。Scrapeless发布了一个开源的ChatGPT抓取示例库,其中包含可运行的代码,完整的响应封装请参见ChatGPT抓取API指南

结论

ChatGPT Scraper 的 map 对象将会话本地推荐转换为结构化数据:发送一个本地意图提示,读取带有坐标、联系详情、营业时间、评级和提供者的排名业务列表。请记住,资料字段嵌套在 entity 下,某些字段可为空,并且非本地提示将返回一个空地图。基础位置数据来自于诸如 Yelp 等提供者,而周围的回答结构在 ChatGPT 演员参考中有文档说明。

准备好捕捉 ChatGPT 的本地数据了吗?从 Scrapeless 仪表板 免费开始,查看演员在 Scraping API 产品页面 的适用情况,或在 Scrapeless 定价 上比较计划。

常见问题

问:什么是 ChatGPT map 对象?
答:它是 scraper.chatgpt 响应中的一个结构化字段,列出了 ChatGPT 为查询提供的本地业务 - 每个都有名称、坐标、地址、电话、网站、营业时间、评级、评论数量、价格水平以及列表提供商。

问:如何使 map 对象填充?
答:发送一个具有本地意图的提示(即“在 Y 附近最好 X”风格的问题)并启用 web_search。非本地提示将返回一个空的 map

问:它使用哪个端点和参数?
答:POST https://api.scrapeless.com/api/v2/scraper/execute,将 actor 设置为 scraper.chatgptinput 对象包含 promptcountry,以及可选的 web_search。使用你的令牌在 x-api-token 中进行身份验证。

问:响应中的评级和地址在哪里?
答:排名字段如 name 和坐标在实体上,但联系和资料字段 - addressphoneratingreview_counthours - 在 entity.* 下。读取 place["entity"]["rating"]

问:字段总是存在吗?
答:不。值是由提供商提供的,因此 distance_metershoursrating 对于给定的实体可能为 null。在使用这些值之前,需检查缺失值。

问:我可以用相同的代码适用于其他 AI 助手吗?
答:可以。ChatGPT 演员共享 LLM Chat Scraper 请求结构,因此将 scraper.chatgpt 替换为 scraper.geminiscraper.perplexity 可以重用相同的集成。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录