ChatGPT vs Gemini vs Perplexity:响应结构比较
Lead Scraping Automation Engineer
TL;DR:
- 三个角色,一个传输,三种答案形状。
scraper.chatgpt、scraper.gemini和scraper.perplexity都向同一端点发送 POST 请求,并返回相同的{ status, task_id, task_result }包装 — 但task_result内部的字段因角色而异。 - “sources” 字段在每个角色中有不同的名称。 ChatGPT 返回
content_references和search_result;Gemini 返回citations;Perplexity 返回web_results— 这个想法相同,三个键,三种每项形状。用于获取来源的字段在这三者之间不可移植。 - 只有 ChatGPT 返回产品。 启用
shopping时,scraper.chatgpt添加了一个包含每个商家offers的products数组;Gemini 和 Perplexity 则没有购物界面。 - Perplexity 承载最丰富的包装。 除了答案和
web_results,它还返回一个media_items数组和一个related_prompt列表;Gemini 是最精简的 — 仅返回答案文本加上一个citations数组,其它无。 - 输入标志因角色而异。 所有角色都在
input中接受prompt和country;ChatGPT 添加了一个可选的shopping标志,Perplexity 添加了web_search。参数始终在input中,而不在顶级。 - 每个字段都是可空的,并且每个会话独立。 在给定运行中,数组可能返回为空,因此你选择的角色决定了哪些字段可以依赖 — 存储
task_id和捕获时间戳,并读取系列,而不是单次调用。 - 免费开始。 新的 Scrapeless 账户包括免费试用积分 — 在 app.scrapeless.com 注册。
引言:一个请求,三种响应形状
通过 Scrapeless 向 ChatGPT、Gemini 和 Perplexity 发送相同的问题,会收到三个答案 — 以 三种不同的 JSON 形状 返回。传输是相同的:一个 POST,一个 x-api-token 头,一个 { status, task_id, task_result } 包装。变化的是 task_result 内部的内容 — 保存答案来源的键,是否返回产品,是否包含媒体和后续提示。读取其中一个角色的客户端并不自动读取另外两个。
这是一份开发者对返回架构的比较,而不是对哪个模型回答更好的裁决。它逐项映射了 scraper.chatgpt、scraper.gemini 和 scraper.perplexity 对相同提示的实际返回,架构如何分歧,以及为特定工作捕获哪个角色。有关工具类别本身的 最佳 LLM 抓取工具 的视图,该指南对界面进行排名;而本指南将它们的响应形状并排展示。
每个角色捕获的内容
这三者都是 通用抓取 API LLM 角色,捕获方式相同:
scraper.chatgpt— ChatGPT 的综合答案、引用的来源,以及(在开启shopping时)一个包含每个商家报价的产品轮播。scraper.gemini— Gemini 的答案加上一个引用数组。三个中最精简的。scraper.perplexity— Perplexity 的答案、其网页结果来源、内联媒体,以及它建议的后续提示。
共享契约:相同端点、相同包装、相同认证
这三个角色均向 https://api.scrapeless.com/api/v2/scraper/execute 发送 POST 请求,附带一个 x-api-token 头和 { actor, input: { prompt, country, … } } 的请求体,且均返回 { status, task_id, task_result }。替换角色只需修改一行。
bash
curl -sS -X POST https://api.scrapeless.com/api/v2/scraper/execute \
-H "Content-Type: application/json" \
-H "x-api-token: ${SCRAPELESS_API_KEY}" \
-d '{ "actor": "scraper.gemini", "input": { "prompt": "best running shoes 2026", "country": "US" } }'
# actor: scraper.chatgpt | scraper.gemini | scraper.perplexity
传输是可移植的;解析是每个角色独立的 — task_result 是它们分歧的地方。
答案主体的比较
每个角色将综合答案返回为 result_text(使用 Markdown 风格的散文)。这个字段名称是三者之间唯一共享的答案主体。三者都不会返回单独的 Markdown 和 HTML 变体 — result_text 是这里的单一答案格式。(scraper.aimode 角色,一个不同的界面,是唯一一个将答案分为文本/Markdown/HTML 的;这三个角色则没有。)
架构的分歧:引用和来源
“模型引用了什么” 是对所有三个角色相同的问题,而在每个角色中使用不同的字段:
- ChatGPT 将结果分为两部分:
content_references[](引用的来源,每个来源包含title、url、attribution)和search_result[](它查询的网页结果,包含title、url、snippet、attribution),由一个web_search布尔值控制。 - Gemini 返回一个单一的
citations[]数组,每个项目提供最详细的信息:title、url、website_name、snippet、favicon和highlights。 - Perplexity 返回
web_results[],是最简洁的来源项目:name、url、snippet。
同样的概念,三个键,三种形态。一个针对Gemini的 citations[].website_name 编写的引用解析器不能直接用于Perplexity的 web_results[].name,而需要重新映射。
平台独特字段
每个平台返回了另外两个平台没有的内容:
- ChatGPT — 产品。 设置
input.shopping: true,scraper.chatgpt会添加一个products[]数组,每个产品包含价格、评分、评论数量,以及一个每个商家的offers[]列表。还会返回一个modelid 和links[]数组。Gemini 和 Perplexity 没有购物接口。 - Perplexity — 媒体和后续问题。
scraper.perplexity返回一个media_items[]数组(image、thumbnail、url、source、medium)以及一个建议的后续问题的related_prompt[]列表—这两项是另外两个平台没有的。 - Gemini — 无额外内容。 Gemini的价值正好相反:干净的两字段答案(
result_text+citations[]),没有平台特定的接口。
字段矩阵:三者并排对比
| 概念字段 | scraper.chatgpt |
scraper.gemini |
scraper.perplexity |
|---|---|---|---|
| 答案文本 | result_text |
result_text |
result_text |
| 被引用来源 | content_references[](title,url,attribution) |
citations[](title,url,website_name,snippet,favicon,highlights) |
web_results[](name,url,snippet) |
| 网页搜索结果 | search_result[] + web_search 标志 |
— | web_results[] |
| 产品 / 报价 | products[] + offers[](带 shopping: true) |
— | — |
| 媒体 | — | — | media_items[] |
| 相关提示 | — | — | related_prompt[] |
| 模型 ID | model |
— | — |
| 链接 | links[] |
— | — |
| 回声提示 | prompt |
prompt |
prompt |
| 可选输入标志 | shopping |
— | web_search |
查看某一列以了解每个平台提供的字段;查看某一行以了解为什么一个解析器不能服务于所有三个平台。
在免费计划上获取您的API密钥:app.scrapeless.com
输入参数比较
input 对象是请求侧不对称之处。三个平台都需要 prompt 和 country;可选标志存在差异。
input 字段 |
scraper.chatgpt |
scraper.gemini |
scraper.perplexity |
|---|---|---|---|
prompt |
必需 | 必需 | 必需 |
country |
必需 | 必需 | 必需 |
shopping |
可选(→ products[]) |
— | — |
web_search |
可选 | — | 可选 |
每个字段都在 input 内;在请求体的顶层发送 prompt 或 country 会被拒绝。
三者间的波动性和空值性
答案是根据会话生成的,因此相同的提示会在每个平台上的不同运行中返回不同的文本和数组长度。将每个字段视为可空的:即使 shopping 打开,products[] 也可能为空,citations[] 和 web_results[] 的数量会有所变化,而一个持续为空的数组意味着该查询没有答案——这不是重新发送的内容。在每次调用时存储 task_id 和捕获时间戳,以便时间序列是信号,而不是单一响应。
决策指南:为哪个任务捕获哪个响应形态
| 如果任务是… | 捕获 | 读取 |
|---|---|---|
| 跨商户价格 / 产品监控 | scraper.chatgpt,加上 shopping: true |
products[] → offers[] |
| 富含来源元数据的引用份额 | scraper.gemini |
citations[](website_name,highlights) |
| 来源跟踪加上媒体和后续意图 | scraper.perplexity |
web_results[],media_items[],related_prompt[] |
| 最简洁的答案捕获 | scraper.gemini |
result_text |
将平台固定在问题上。因为传输是共享的,在同一提示和国家下运行两个或三个平台就是同一个客户端,但使用不同的演员字符串——并让你在一次请求中获得每个平台界面的答案。
结论:三种形态,一个客户端
运输是共享的,而解析则不是:scraper.chatgpt、scraper.gemini 和 scraper.perplexity 都回答相同的端点和信封,但 task_result diverges - 不同的源键,仅限于 ChatGPT 的产品,仅限于 Perplexity 的媒体和后续,Gemini 的精简两字段形状。根据所需字段选择参与者,按参与者映射 task_result,并将每个字段视为可空。定期在 Universal Scraping API 申请固定的提示集,并让一个客户端捕获所有三个平台的答案。这里的字段名称已根据每个参与者在 LLM Chat Scraper 参考中的实时运行进行了确认。
准备好构建您的 AI 答案数据管道了吗?
加入我们的社区以获取免费计划,并与构建 AI 答案数据管道的开发者联系:Discord · Telegram。
在 app.scrapeless.com 注册以获取免费试用积分,并将一个客户端指向 ChatGPT、Gemini 和 Perplexity,以捕获您的程序跟踪的查询上的所有三种答案格式。
常见问题解答
问:所有三个参与者都接受相同的输入吗?
所有三个参与者都在 input 对象内接受 prompt 和 country。scraper.chatgpt 添加了一个可选的 shopping 标志,scraper.perplexity 添加了 web_search;参数总是放在 input 内,而不是顶层。
问:为什么引用字段在三个中命名不同?
每个参与者解析其自己平台的生成答案,因此源数据是根据平台形状的 —— ChatGPT 的 content_references、Gemini 的 citations 和 Perplexity 的 web_results 具有不同的键和不同的每项字段。读取参与者返回的字段,而不是假设共享键。
问:一个客户端可以在不重写的情况读取所有三个吗?
在传输上,可以 —— 相同的端点、x-api-token 头以及 { status, task_id, task_result } 信封。您交换参与者名称,并按参与者映射 task_result 键,因为内部字段集不同。
问:哪个参与者返回购物或产品数据?
scraper.chatgpt 使用 input.shopping: true 填充一个 products[] 数组,包含每个商家的 offers[]。Gemini 和 Perplexity 不返回购物界面。
问:为什么相同的提示在不同的运行中返回不同的字段?
答案是会话生成的,运行之间有所不同;每个字段都是可空的,并且数组可能返回为空。将持续空的结果视为该查询没有答案,并存储 task_id 以及捕获时间戳,以便系列是信号。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



