ChatGPT 抓取器 API:捕获答案和引用证据
Advanced Data Extraction Specialist
TL;DR:
- ChatGPT答案快照记录在选择条件下的一个观察。 保存提示、国家和搜索设置以及返回的答案。
- 答案收集和网页提取解决不同问题。 答案中的引用并不能证明所引用页面支持每一句话。
- ChatGPT Scraper API使用任务生命周期。 创建任务、保留其标识符,并单独读取完成的结果。
- 缺失的引用字段需要明确处理。 在将原始负载减少到监控表之前,保存原始负载。
- 免费开始。 新的Scrapeless帐户包括免费的Scraping Browser运行时间——请在app.scrapeless.com注册。
引言:在测量可见性之前捕捉答案
品牌可见性观察需要实际返回的答案,而不是从模型的记忆中重建的答案。提示和收集的情况是该观察的一部分。更改提示可能会改变建议和附加的来源。
ChatGPT Scraper API将答案表面收集为数据。它不会要求语言模型访问页面列表并提取其内容。如果这是你的目标,使用ChatGPT帮助构建网站抓取器 的工作流程涵盖了不同的获取问题。即使在两个数据集中出现相同的模型名称,也要保持这两个数据集的分离。
本指南围绕当前Scrapeless任务接口构建答案档案。档案保留原始响应字节,然后检查答案和引用字段。它为GEO研究团队提供一个可辩护的观察单元,而不是将一个响应视为普遍排名。
ChatGPT答案档案可以支持什么?
答案档案支持在受控提示集和收集条件下进行比较。它的首要任务是保留证据;评分在之后。
- 品牌提及审查。 检查答案是否提到产品,并保留周围段落,而不是计算模糊的子串。
- 引用清单。 将源URL与源标题分开存储,以便重命名页面不会意外成为新的来源。
- 消息分析。 比较在相同问题措辞下给出的推荐理由。
- 区域观察。 记录国家作为收集设置,同时认识到仅凭国家并不能再现每个个性化用户会话。
- 内容规划。 检查在决定新文章应提供哪些证据之前,答案中出现了哪些问题和源类型。
关于公共HTTP标准的提示是一个有用的初始示例,因为该主题有稳定的参考文档。商业推荐提示可以在响应处理正常工作后跟进。
为什么使用Scrapeless ChatGPT演员?
Scrapeless ChatGPT演员通过文档化的接口暴露答案文本和相关源信息。演员标识符为scraper.chatgpt;当前的ChatGPT答案捕获合约描述了其输入和响应字段。演员位于AI Scraper产品首页下,而不是单独的产品路径。
托管的接口消除了在客户端维护聊天界面选择器的需要。它不会使所有答案属性成为强制性,不会消除模型变异,也不会将引用变为经过验证的事实。这些职责仍然由消费响应的应用程序承担。
在扩展提示集合之前,请检查Scrapeless定价以获取当前商业条款。这个示例故意禁用了购物数据,并没有做出延迟或每个答案成本的承诺。
收集答案的前提条件
使用Python 3.12、Requests 2.34.2和具有ChatGPT演员访问权限的Scrapeless帐户。将SCRAPELESS_API_KEY配置在本地;不要在提示、源文件或保存的响应元数据中放置凭据。
经过身份验证的任务创建和结果检索需要该密钥。此示例已针对当前合约进行语法检查,但在凭据不可用的情况下,经过身份验证的答案捕获仍待实时验证。以下没有任何示例答案被呈现为完成的API结果。
在您的活动虚拟环境中安装HTTP客户端:
bash
python -m pip install requests==2.34.2
创建具有明确答案设置的任务
任务创建将演员名称和输入对象发送到当前请求端点。prompt 和 country 是 ChatGPT 演员所必需的;当数据集依赖于它们时,选择的可选布尔值应明确指出。
| 设置 | 示例选择 | 保留的原因 |
|---|---|---|
prompt |
关于公共 HTTP 来源的问题 | 定义实际提出的问题 |
country |
US |
记录区域收集条件 |
web_search |
true |
请求搜索增强;检查返回的证据 |
shopping |
false |
使此示例专注于答案和来源信息 |
端点是 POST /api/v2/scraper/request 和 GET /api/v2/scraper/result/{task_id}。不要推断旧的单次调用示例使用相同的生命周期。任务创建响应不是已完成的答案。
请求成功与应用程序完成之间的区别也出现在HTTP 响应语义:HTTP 状态描述了交换,而任务的状态描述了工作。
使用 Scrapeless 开始抓取
使用 Scrapeless 强化您的网络抓取和自动化工作流程!
今天注册并获得 5美元的免费信用 — 无需信用卡。立即在 Scrapeless Dashboard 领取您的免费信用。
在检查字段之前保留原始响应
答案收集器应该在将原始响应解析为更狭窄的模式之前保存原始响应。这在服务返回意外的封装或条件字段发生变化时保留证据。
将以下完整脚本保存为 chatgpt_capture.py。注意:此块需要实际的 API 密钥,并保持待验证的实时验证。 首先在不使用 TASK_ID 的情况下运行它以创建任务。保留创建响应,并在稍后调用相同脚本以读取该任务的结果时使用其返回的标识符作为 TASK_ID。
python
import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
root = Path('answer-evidence')
root.mkdir(exist_ok=True)
task_id = os.environ.get('TASK_ID')
headers = {'x-api-token': os.environ['SCRAPELESS_API_KEY']}
settings = {
'prompt': 'Which public sources explain HTTP semantics?',
'country': 'US', 'web_search': True, 'shopping': False
}
if task_id:
response = requests.get(
f'https://api.scrapeless.com/api/v2/scraper/result/{task_id}',
headers=headers, timeout=60)
name = 'result'
else:
response = requests.post(
'https://api.scrapeless.com/api/v2/scraper/request',
headers=headers,
json={'actor': 'scraper.chatgpt', 'input': settings}, timeout=60)
name = 'creation'
# Keep the original bytes, including unsuccessful responses.
stamp = datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%S%fZ')
path = root / f'{name}-{stamp}'
path.with_suffix('.body').write_bytes(response.content)
path.with_suffix('.meta.json').write_text(json.dumps({
'task_id': task_id, 'settings': settings if not task_id else None,
'http_status': response.status_code, 'captured_at': stamp
}, indent=2))
response.raise_for_status()
data = response.json()
if not task_id:
print(json.dumps(data, indent=2))
print('Keep the returned task identifier; set TASK_ID for result retrieval.')
else:
status = data.get('status')
print(json.dumps({'task_id': task_id, 'status': status}))
if status == 'success':
payload = data.get('task_result')
if not isinstance(payload, dict):
raise ValueError('Successful task has no object payload')
if not isinstance(payload.get('result_text'), str):
raise ValueError('Answer text missing; inspect saved raw body')
print(json.dumps({
'answer_characters': len(payload['result_text']),
'citation_field_present': 'content_references' in payload,
'citation_field_type': type(payload.get('content_references')).__name__
}))
该脚本每次调用时发出一个请求。它并不承诺任务在请求超时内完成。检查保存的创建封装,而不是猜测其标识符字段,然后通过结果端点读取该特定任务。
带有 pending 或 running 的结果是未完成的。带有 failed 的结果是失败的观察,而不是空答案。在 success 上,检查 task_result 并及时将完成的结果存储在您自己的档案中。任务生命周期 定义状态状态;对于此设计,固定保留承诺是没有必要的。
在不夸大其词的情况下阅读引用证据
引用证据记录与答案相关的来源;它并不验证答案的真实性。返回的 URL 可能是源链接、补充链接或与搜索增强相关的条目。保持这些类别的区别。
| 演员字段 | 解释 | 应用处理 |
|---|---|---|
result_text |
Markdown 答案文本 | 需要以接受的答案观察 |
model |
返回的模型标识符 | 存储接收到的值;不要硬编码 |
web_search |
返回的搜索增强标志 | 与请求的设置进行比较 |
content_references |
答案归属信息(如提供) | 保留条目并区分缺失和空白 |
search_result |
搜索相关条目 | 保留标题、摘要、归属和 URL(如果存在) |
links |
补充链接 | 不要自动将每个链接计为答案引用 |
这些是记录的字段含义,而不是经过认证的响应示例。一个 JSON 对象在语法上可能是有效的,但可能缺少您需要的答案;JSON 数据格式 定义语法,而不是任务的完整性。
在从响应中推导指标之前,使用 JSON Schema 约束 单独验证所需的答案属性。
档案应连接原始请求、任务结果和任何派生得分。该关系是 数据来源 的实际价值。将来源证据与观察一起存储,并使对评分规则的后续更改可以独立追踪。
构建受控观察表
一个有用的观察表通过稳定的提示标识符和收集条件对答案进行分组。它应保留指向原始证据的指针,而不是用单一的可见性分数替代该证据。
保留prompt_id、确切的提示文本、国家、请求选项、任务标识符、捕获时间、任务状态和原始结果位置。将品牌提及和引用网址放入派生表中。这使您可以在不收集不同答案单纯为了修复解析器的情况下更改实体匹配规则。
仅在问题和设置支持比较时比较答案。在一个答案中缺失的产品在这些条件下被视为观察到的缺失;这并不能证明模型从未推荐过该产品。相反,响应中出现的引用网址并不能证明在不同问题之间的持续可见性。
避免收集帐户历史记录、私人对话导出或机密提示以供公共可见性数据集使用。如果团队成员意外插入客户信息,请尽量减少存储的提示内容。存档应包含公共研究问题,而非无关的个人背景。
结论:保留观察,然后评分
当客户将请求条件、完成的答案和源证据保持在一起时,ChatGPT Scraper API 对于可见性研究变得有用。任务生命周期提供观察;应用程序提供接受规则和分析。
从一组小的批准提示集开始。检查第一个经过认证的结果,映射其实际信封,并在生成图表之前定义缺失字段的处理。然后,存档可以支持那些假设保持可见的比较。
准备好构建您的 AI 驱动数据管道了吗?
加入我们的社区,以索取免费套餐并与构建网络数据管道的开发人员联系:Discord · Telegram。
在 app.scrapeless.com 注册以获得免费的抓取浏览器运行时,并将上述模式调整为您自己的公共数据工作流。
常见问题解答
问:ChatGPT Scraper API 是否提取每个引用的网页?
不。ChatGPT Scraper API 收集答案表面和相关源信息。获取和验证引用的网页是一个单独的工作流程。
问:收集 ChatGPT 答案是否合法?
允许的范围取决于相关条款、访问条件、权利和司法管辖区。使用经过批准的公共数据研究提示,并获得法律审查以制定生产收集政策;仅凭公共可见性并不意味着获得全面许可。
问:Python 客户端需要自己的代理吗?
受管控的代理在其 API 后处理采集。客户端设置记录的 country 参数;在此示例中,未配置单独的浏览器代理。
问:未完成或失败的任务在报告中应该意味着什么?
未完成或失败的任务是一个不完整的观察。将其状态和证据与接受的答案分开存储;不要将其评分为成功答案且没有提及。
问:空引用列表可以是有效结果吗?
空引用列表可以出现,而不会使答案文本变得不可用。记录该字段是缺失、空值还是空列表,并避免在查看实际结果合同时将这些状态等同起来。
问:答案收集可以在没有 AI 代理的情况下进行吗?
可以。Requests 客户端直接与记录的任务端点对话。操作该客户端不需要代理框架或生成的抓取代码。
问:并行提示收集应该如何开始?
从一个完整生命周期和输出已被检查的任务开始。之后应用帐户的记录容量和有限的收集计划;本指南未提供普遍的吞吐量限制。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



