通过一个管道在六个AI答案引擎中跟踪您的品牌
Lead Scraping Automation Engineer
关键要点:
- 六个AI问答引擎,一个管道。 ChatGPT、Grok、Gemini、Perplexity、Copilot和Google的AI概述都以引用的方式回答购买问题——而且通过一个端点、一个
x-api-token和一个{ status, task_id, task_result }封包可以捕获到这六个引擎。 - 平台之间的差异仅在于字段层面。 每个引擎在不同的键下存储其引用(
content_references、web_search_results、citations、web_results、source);一个六行的字段映射将它们归一化为一个引用流。 - 引用的份额是输出指标。 根据每个提示和平台的域对归一化引用进行分组,随着时间的推移,其数量就是您品牌的AI回答可见性。
- 三个阶段,三个简短脚本。 捕获答案,归一化引用,报告计数——每个阶段都是一个可运行的Python文件,您可以按计划运行。
- 锁定可变变量。 每个系列中国家、Grok的推理模式和提示集保持不变;答案在每次运行中变化,这种变化就是您所图表化的信号。
- 免费开始。 新的Scrapeless账户包括免费试用积分——请在app.scrapeless.com注册。
管道一览
买家询问AI助手选择哪个工具,助手会指出某个选项——并附上简短的引用来源列表。这个选项是否是您取决于平台:引用您的引擎可能不是买家使用的引擎。跟踪一个平台可以告诉您那个平台的情况,而可见性图景则是六个平台并排呈现。
下面的管道生成了这个全景图:
- 捕获 — 对所有六个引擎运行固定提示,通过其Scrapeless参与者;将原始答案以JSONL格式存储。
- 归一化 — 将每个平台的引用字段映射为一个统一的
{platform, prompt, domain, url, title}流。 - 报告 — 按平台逐域计数引用,并检查您自己的域出现在哪里。
第1阶段是唯一接触网络的阶段。第2和第3阶段是纯粹的转换,因此重新运行分析是免费的。关于为什么AI回答引用成为可见性指标的概念背景,GEO和品牌-AI可见性部分涵盖了这门学科;本指南则构建了这一工具。
前提条件
- 一个Scrapeless账户和API密钥 — 请在app.scrapeless.com注册。
- Python 3.10+ 和
requests库。 - 一个买家可能实际会问的固定提示(示例使用了一个;生产运行使用了一组)。
将您的密钥存储在环境变量中,以确保它不会出现在代码中:
bash
export SCRAPELESS_API_KEY=your_api_token_here
第1阶段 — 捕获答案
一个函数覆盖所有六个引擎,因为参与者共享一个端点和一个封包。每个引擎之间的差异仅限于输入映射——Grok需要一个推理mode,Perplexity想要web_search标志,Copilot使用自己的mode:
| 平台 | 参与者 | 额外输入 | 引用存储于 |
|---|---|---|---|
| ChatGPT | scraper.chatgpt |
— | content_references[] |
| Grok | scraper.grok |
mode(必需) |
web_search_results[] + x_search_results[] |
| Gemini | scraper.gemini |
— | citations[] |
| Perplexity | scraper.perplexity |
web_search: true |
web_results[] |
| Copilot | scraper.copilot |
mode: "smart" |
citations[] |
| Google AI Overview | scraper.overview |
— | source[] |
python
# capture.py — 在六个AI问答引擎上运行一个提示,存储原始答案
import json
import os
import time
import requests
ENDPOINT = "https://api.scrapeless.com/api/v2/scraper/execute"
HEADERS = {
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
}
PROMPT = "对于JavaScript密集型网站,最佳的网页抓取API是什么?"
COUNTRY = "US"
ENGINES = {
"chatgpt": {"actor": "scraper.chatgpt", "extra": {}},
"grok": {"actor": "scraper.grok", "extra": {"mode": "MODEL_MODE_FAST"}},
"gemini": {"actor": "scraper.gemini", "extra": {}},
"perplexity": {"actor": "scraper.perplexity", "extra": {"web_search": True}},
"copilot": {"actor": "scraper.copilot", "extra": {"mode": "smart"}},
"google-ai-overview": {"actor": "scraper.overview", "extra": {}},
}
with open("answers.jsonl", "w", encoding="utf-8") as out:
for platform, spec in ENGINES.items():
payload = {
"actor": spec["actor"],
"input": {"prompt": PROMPT, "country": COUNTRY, **spec["extra"]},
}
resp = requests.post(ENDPOINT, headers=HEADERS, json=payload, timeout=300)
resp.raise_for_status()
data = resp.json()
out.write(json.dumps({
json
"平台": platform,
"提示": PROMPT,
"国家": COUNTRY,
"捕获时间": int(time.time()),
"状态": data.get("status"),
"任务ID": data.get("task_id"),
"任务结果": data.get("task_result"),
}) + "\n")
print(f"{platform}: {data.get('status')}")
每行的answers.jsonl是一个平台的完整捕获——答案、引用和运行元数据——通过task_id进行审计追踪。
在免费计划中获取您的API密钥:app.scrapeless.com
第二阶段 — 规范引用
字段映射是整个技巧:每个平台对其引用数组的命名不同,条目的格式也不同,但每个条目都携带一个URL。六个映射将六种模式整合成一个流:
python
# normalize.py — answers.jsonl -> citations.jsonl (每个引用来源一行)
import json
from urllib.parse import urlparse
# 平台 -> task_result内的(array_field, url_key)对列表
CITATION_FIELDS = {
"chatgpt": [("content_references", "url")],
"grok": [("web_search_results", "url"), ("x_search_results", "url")],
"gemini": [("citations", "url")],
"perplexity": [("web_results", "url")],
"copilot": [("citations", "url")],
"google-ai-overview": [("source", "url")],
}
with open("answers.jsonl", encoding="utf-8") as inp, \
open("citations.jsonl", "w", encoding="utf-8") as out:
for line in inp:
row = json.loads(line)
result = row.get("task_result") or {}
for field, url_key in CITATION_FIELDS[row["platform"]]:
for entry in result.get(field) or []:
url = entry.get(url_key) or ""
if not url.startswith("http"):
continue
out.write(json.dumps({
"平台": row["platform"],
"提示": row["prompt"],
"国家": row["country"],
"捕获时间": row["captured_at"],
"面板": field,
"域名": urlparse(url).netloc.removeprefix("www."),
"URL": url,
"标题": entry.get("title") or entry.get("name") or "",
}) + "\n")
print(sum(1 for _ in open("citations.jsonl", encoding="utf-8")), "引用规范化完成")
Grok贡献了两个面板——开放网页和X帖子——并且panel字段使它们在下游可区分。
第三阶段 — 报告引用份额
通过一个引用流,报告是一个按组分类的过程:每个平台:引擎信用哪些域名,以及您的域名是否在其中:
python
# report.py — citations.jsonl -> 每个平台的引用份额表
import json
import os
from collections import Counter, defaultdict
品牌 = os.environ.get("BRAND_DOMAIN", "scrapeless.com")
per_platform = defaultdict(Counter)
with open("citations.jsonl", encoding="utf-8") as inp:
for line in inp:
row = json.loads(line)
per_platform[row["platform"]][row["domain"]] += 1
for platform, counts in per_platform.items():
total = sum(counts.values())
brand_hits = counts.get(品牌, 0)
print(f"\n{platform} — {total} 篇引用 · {品牌}: {brand_hits}")
for domain, n in counts.most_common(5):
marker = " ←" if domain == 品牌 else ""
print(f" {n:>3} {domain}{marker}")
定期运行,这个表格变成了时间序列:每个平台、每个提示、每个市场——引用您的答案数量,以及谁被引用而不是您。这个序列是GEO程序报告的交付内容。
调度和扩展系列
- 保持变量不变。 每次运行相同的提示、相同的
国家、相同的Grok模式——只有当过程保持不变时,系列才是可读的。每天或每周捕获;AI答案在这两个时间尺度上移动。 - 通过乘法而非新代码扩展。 更多的提示是第1阶段的一个循环;更多市场是第二个
COUNTRY;这两者都会增加运行次数,所以请相应地进行预算——演员按使用量收费,当前的定价在定价页面上。 - 保留原始捕获。
answers.jsonl是报告中每个数字背后的证据;规范化选择会变化,原始答案不会变化。 - 期待空面板。 某些提示在某些引擎上不会产生引用(特别是Grok的X面板依赖于提示)。空数组是一个数据点,而不是失败。
演员们生活在通用抓取API一线;最佳LLM抓取器指南对类别进行了排名,如果你在比较工具的话。
常见问题
问:通过这种方式捕捉AI答案是否合法?
演员捕捉公开呈现的答案内容。规则因管辖区和每个平台的条款而异——查看相关的服务条款,并为你的用例咨询顾问。切勿收集受GDPR或CCPA保护的个人数据。
问:为什么示例中只有一个提示而不是一组?
为了清晰。在第一阶段,生产运行围绕一个提示集循环;下游的每一行都处理多个提示,因为每一行都包含其prompt。
问:多少次运行算作可用的系列?
单次抓取非确定性表面证明不多。每天抓取两到三周提供足够的数据点,以便在大多数提示集上将趋势与噪声分开。
问:谷歌的AI模式标签怎么回事?
它在同一个信封下有自己的演员(scraper.aimode)——将在引擎映射中添加第七个条目。AI概述指南深入介绍了谷歌的答案表面。
问:我需要代理吗?
不需要。住宅出口和地理路由已内置于演员中;country输入就是整个配置。
问:可以在没有AI代理或SDK的情况下运行吗?
可以——这三个阶段是通过HTTP的普通Python。任何调度程序(cron、CI、工作流运行器)都可以驱动它们。
结论:一个信封,六个引擎,一个数字
管道简化为三个文件:通过六个共享端点和信封的演员捕捉答案,使用六行字段映射规范化六个引用模式,并计算域名。输出是AI时代可见性工作缺失的数字——每个答案引擎在多长时间内给你信誉,按市场跟踪。安排好它,图表就会自动绘制。
准备构建你的AI答案数据管道?
加入我们的社区,申请一个免费计划,并与正在构建AI答案管道的开发者联系:Discord · Telegram。
在app.scrapeless.com注册以获取免费试用积分,并将管道指向你的品牌答案的提示、引擎和市场。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



