5分钟搞定Google Custom Search API:API Key与CX Key申请全流程
2026/9/19 16:06:51 网站建设 项目流程

1. 为什么我建议你走一遍 Custom Search API 的完整申请链路

很多人第一次接触 Google Custom Search API,都是被一个很具体的需求逼过来的:想在自己的小工具、脚本或者内部系统里做站内搜索、垂直领域检索,或者批量抓取某个站点的公开信息做聚合分析。这时候你会发现,直接爬页面既不稳定也不优雅,而官方提供的 Custom Search JSON API 恰好能解决这个问题——它给你一个干净的 HTTP 接口,返回结构化的 JSON 结果,你只需要一个 API Key 和一个搜索引擎 ID(也就是大家常说的 CX Key),就能在几分钟内跑通第一次请求。

但问题也恰恰出在这里。API Key 和 CX Key 这两个东西,一个来自 Google Cloud 的控制台,一个来自可编程搜索引擎的配置页面,分属两个完全不同的后台,中间还夹着项目创建、API 启用、配额设置等一堆步骤。新手最容易卡住的地方不是写代码,而是"我到底该点哪个按钮"。我自己第一次配的时候,就在 Cloud Console 和 Programmable Search Engine 之间来回跳了三四次,才把两个 Key 对应上。

这篇内容就是把我自己踩过的流程重新梳理一遍,目标很明确:让你在 5 分钟内从零拿到可用的 API Key 和 CX Key,并且知道每个 Key 到底管什么、后面怎么用、哪里容易出错。不管你是做站内搜索、做垂直内容聚合,还是单纯想给自己的 AI 应用接一个实时检索能力,这套流程都是通用的。下面我按实际操作顺序拆开讲,每一步都告诉你"为什么这么做",而不是只丢一串截图式的步骤。

2. 动手之前先搞清楚两个 Key 的分工

2.1 API Key 和 CX Key 到底谁管什么

这是最容易被混淆的一点,我见过不少人拿着 API Key 去填搜索引擎 ID 的位置,然后对着 403 报错发呆。先把职责分清楚:

  • API Key:身份凭证。它告诉 Google"这次请求是哪个项目发出来的",用于计费和配额统计。它跟你的 Google Cloud 项目绑定。
  • CX Key(搜索引擎 ID):检索范围的凭证。它告诉 Google"你要搜哪个范围的内容",比如是搜整个互联网,还是只搜你指定的几个站点。它跟你在 Programmable Search Engine 里创建的那个搜索引擎绑定。

打个比方,API Key 像是你的门禁卡,CX Key 像是你要进的那栋楼的门牌号。门禁卡对了但门牌号写错,你照样进不去;门牌号对了但门禁卡过期,也一样被拦。两个都对,请求才能通。

提示:API Key 是敏感信息,不要直接写死在前端代码里。前端调用建议通过自己的后端中转,或者至少做域名和来源限制。

2.2 免费额度和计费边界,先心里有数

Custom Search JSON API 的免费配额是每天 100 次查询。这个数字对个人测试和小型工具完全够用,但如果你要做批量检索,很快就会撞墙。超出后可以按量付费,价格是每 1000 次查询 5 美元,单日上限 10000 次。

这里有个细节很多人不知道:配额是按"查询"算的,不是按"请求"算的。如果你一次请求里带了分页参数,每一页都算一次查询。所以做批量任务时,控制分页深度比控制请求数量更重要。我自己的做法是默认只取第一页,需要更多结果时再按需翻页,避免无意义的配额消耗。

另外,配额是绑定在 Cloud 项目上的,不是绑定在 API Key 上的。同一个项目下建多个 Key,它们共享同一份配额。这一点在做多环境(测试/生产)隔离时要注意,别以为多建几个 Key 就能绕过限额。

3. 第一步:在 Google Cloud 里把 API Key 拿到手

3.1 创建项目与启用 API 的先后顺序

进入 Google Cloud Console 后,第一件事是确认你当前选中的项目。如果你还没有项目,先新建一个,名字随便起,比如search-demo。这里有个顺序问题:必须先选中项目,再去启用 API。因为 API 是启用在某一个具体项目下的,如果你在 A 项目里启用了 API,却拿着 B 项目的 Key 去调用,会直接报权限错误。

启用 API 的路径是:左侧菜单找到"API 和服务"→"库",然后搜索Custom Search API,点进去点"启用"。启用之后,这个 API 就挂在你当前项目名下了。

我踩过的一个坑是:搜索的时候会同时出现好几个名字相似的 API,比如Custom Search APICustom Search API (Free)之类,一定要认准官方的那个Custom Search JSON API。选错了启用,后面调用会一直返回 403,而且报错信息不会直接告诉你"你启用错了 API",只会说权限不足,排查起来很费时间。

3.2 创建 API Key 时的限制配置

API 启用后,回到"API 和服务"→"凭据",点"创建凭据"→"API 密钥"。系统会立刻生成一串以AIza开头的字符串,这就是你的 API Key。

生成之后别急着复制走人,点"编辑"进去做两件事:

  1. 应用限制:如果你只在服务端用,选"无"或者按 IP 限制;如果要在浏览器里用,选"HTTP 引用来源",填上你的域名。这一步能防止 Key 被别人盗用后刷爆你的配额。
  2. API 限制:选"限制密钥",然后只勾选Custom Search API。这样即使这个 Key 泄露,别人也只能用它调搜索接口,动不了你项目里的其他资源。

注意:限制配置生效需要几分钟,刚设置完立刻调用可能会短暂失败,等一会儿再试。

3.3 一个项目可以建几个 Key

技术上没有硬性上限,但没必要建太多。我的习惯是:一个环境一个 Key,比如开发一个、生产一个,方便单独吊销和监控。但记住前面说的,它们共享项目配额,所以别指望用多 Key 来扩容。

如果你确实需要更大的配额,正规做法是申请配额提升,而不是堆 Key。配额提升需要在 Cloud Console 里提交申请,说明用途和预估用量,审核通过后免费额度也能往上调。

4. 第二步:在 Programmable Search Engine 里生成 CX Key

4.1 创建搜索引擎时的"搜索范围"选择

拿到 API Key 只是完成了一半,接下来去programmablesearchengine.google.com创建搜索引擎。点"添加"或"创建",第一步会让你填要搜索的站点。

这里有个关键选择:是搜整个网络,还是只搜指定站点

  • 如果你想做通用检索,在"要搜索的网站"里填*.com之类的通配,或者直接开启"搜索整个网络"选项。
  • 如果你只想要垂直结果,比如只搜自己公司的几个域名,就把这些域名逐个加进去。

我建议新手先用"搜索整个网络"跑通流程,确认接口能通之后,再回来收窄范围。因为范围设得太窄,测试时很可能搜不出结果,你会误以为是接口配错了,其实是范围里根本没内容。

4.2 开启"搜索整个网络"与图像搜索的取舍

创建完成后进入搜索引擎的配置页,找到"设置"里的"搜索整个网络"开关。如果你要做通用搜索,这个必须打开。默认情况下,新建的搜索引擎可能只搜你填的那几个站点,不打开这个开关,搜出来的结果会非常有限。

图像搜索是另一个可选开关。如果你只需要文本结果,建议关掉,因为开启后返回结构会变复杂,而且图像搜索的配额消耗逻辑和文本不完全一样。做纯文本检索的话,保持关闭最省心。

4.3 复制 CX Key 的正确位置

配置页里有一个"搜索引擎 ID",长得像a1b2c3d4e5f6g7h8i这样的一串字符,这就是 CX Key。注意它不在"设置"页,而是在"概览"或者"基本信息"区域,不同时期界面位置略有差异,找不到就用页面搜索功能搜"搜索引擎 ID"。

复制的时候要完整,别漏字符。CX Key 里可能包含数字和字母,肉眼复制容易出错,建议直接点旁边的复制按钮。我自己就干过手动选中结果少复制一位的事,然后对着 400 报错查了半天。

5. 第三步:把两个 Key 拼起来跑通第一次请求

5.1 最小可用请求的构造

拿到两个 Key 之后,最直接的验证方式就是用浏览器或者 curl 发一个 GET 请求。接口地址是:

https://www.googleapis.com/customsearch/v1?key=你的API_KEY&cx=你的CX_KEY&q=测试关键词

把三个参数替换成你自己的,丢进浏览器地址栏回车。如果返回一大段 JSON,里面有items数组,说明通了。如果返回错误,看error.message字段,它会告诉你具体是哪个参数有问题。

用 curl 的话是这样:

curl "https://www.googleapis.com/customsearch/v1?key=YOUR_API_KEY&cx=YOUR_CX_KEY&q=google"

5.2 常见报错对照表

第一次调用大概率不会一次成功,下面这几个错误我几乎都遇到过:

报错信息关键词大概率原因处理方式
API key not validAPI Key 复制错误或未启用重新复制,确认 Custom Search API 已启用
invalid key/ 403Key 限制配置过严或 API 选错检查 API 限制是否勾选了 Custom Search API
Invalid Value(cx)CX Key 错误或搜索引擎未开启全网搜索重新复制 CX Key,打开"搜索整个网络"
Daily Limit Exceeded当天 100 次配额用完等次日重置,或申请配额提升
403 forbidden项目未绑定结算或 API 未启用确认项目状态和 API 启用情况

这张表建议存下来,后面调试时能省不少时间。大部分问题都出在 Key 的复制和限制配置上,真正接口本身的问题反而很少。

5.3 用 Python 封装一个可复用的调用函数

浏览器验证通过后,实际项目里肯定要用代码调。下面这个 Python 函数是我常用的最小封装,把参数、异常处理和结果提取都包进去了:

import requests def custom_search(query, api_key, cx, num=10): url = "https://www.googleapis.com/customsearch/v1" params = { "key": api_key, "cx": cx, "q": query, "num": num } resp = requests.get(url, params=params, timeout=10) data = resp.json() if "error" in data: raise RuntimeError(data["error"].get("message", "unknown error")) results = [] for item in data.get("items", []): results.append({ "title": item.get("title"), "link": item.get("link"), "snippet": item.get("snippet") }) return results

这个函数里我特意做了两件事:一是把num参数暴露出来,方便控制返回条数;二是把错误信息提取出来直接抛异常,而不是让调用方去猜。实际用的时候,num最大是 10,想要更多结果得靠分页参数start,但记住每翻一页都算一次配额。

6. 那些文档里不会写的实操细节

6.1 配额消耗的真实计算方式

前面提过配额按查询算,这里展开说清楚。假设你搜一个词,返回 10 条结果,这是一次查询。如果你想拿 30 条,需要发三次请求(start=1、start=11、start=21),这就是三次查询。所以做批量任务时,先估算一下:100 个关键词,每个取 10 条,就是 100 次查询,刚好卡在免费额度边缘。如果每个取 30 条,直接 300 次,超了。

我的做法是给批量任务加一个计数器,每发一次请求就累加,接近 100 就停下来,避免超额产生费用。这个计数器逻辑很简单,但能帮你守住免费额度。

6.2 结果排序与相关性调优

Custom Search API 默认按相关性排序,但你可以通过参数微调。比如sort参数可以按日期排序(sort=date),做新闻聚合时很有用。dateRestrict可以限制时间范围,比如dateRestrict=d7表示只搜最近 7 天。

还有一个容易被忽略的参数是siteSearch,它可以在不改变 CX 配置的前提下,临时把搜索范围限定到某个站点。这个在做多站点聚合时特别方便,不用为每个站点单独建搜索引擎。

6.3 中文搜索的注意事项

如果你主要搜中文内容,有两点要注意。一是 CX 的"搜索整个网络"开启后,中文结果的质量取决于 Google 对该语言的索引情况,通常没问题,但某些垂直领域可能结果偏少。二是查询词里的空格和特殊字符要做 URL 编码,用 requests 库的话它会自动处理,手动拼 URL 时别忘了urllib.parse.quote

另外,中文分词对结果影响不大,因为 Google 自己会处理,你直接把整句话丢进去就行,不需要提前分词。我试过把长句拆成关键词组合,结果反而不如原句搜得准。

7. 从跑通到用好:几个进阶方向

7.1 把搜索结果接进自己的应用

跑通接口只是起点,真正有价值的是把它接进你的业务流。常见的几种用法:一是做站内搜索的补充,当自己的搜索索引覆盖不足时,用 API 兜底;二是做内容聚合,定时跑一批关键词,把结果存进数据库做分析;三是给对话式应用接实时检索,让模型能引用最新信息。

第三种用法现在特别多,思路是:用户提问 → 提取关键词 → 调 Custom Search API → 把返回的标题和摘要拼进上下文 → 交给模型生成回答。这样模型就能基于实时结果作答,而不是只靠训练数据。

7.2 缓存与去重,省配额的两个手段

配额有限,所以缓存很重要。同一个查询词在短时间内重复调用,完全可以把结果缓存起来,比如用 Redis 存 1 小时。这样既能省配额,又能加快响应。

去重是另一个手段。不同关键词可能返回相同的结果,尤其是做批量聚合时。我的做法是用结果的link字段做唯一键,存进集合里,重复的直接跳过。这样最终入库的都是新内容,避免后续分析时被重复数据干扰。

7.3 监控配额与异常告警

如果你把 API 用在了生产环境,建议加一个简单的监控:每次调用后记录剩余配额(响应头里有时会带相关信息),接近阈值时发告警。这样不会某天突然发现配额用完了,服务直接挂掉。

异常告警也要做。比如连续几次返回 403,可能是 Key 被限制或者项目出了问题,早点发现早点处理。我一般会在调用失败时记录完整的错误信息,方便回溯。

8. 我自己的几条经验总结

整个流程走下来,最耗时间的从来不是写代码,而是两个后台之间的来回切换和 Key 的对应关系。我的建议是:先把 API Key 和 CX Key 都拿到手,写在同一个地方,再去写调用代码。不要一边配一边写,那样很容易乱。

另外,限制配置一定要做。我见过太多人 Key 泄露后被刷爆配额,最后只能重新建项目。花两分钟设置应用限制和 API 限制,能省掉后面一堆麻烦。

最后说个心态问题:第一次配的时候报错很正常,别慌。按报错信息对照前面的表格排查,九成问题都能自己解决。真正需要查文档的,往往是配额和计费相关的边界情况,那些在官方文档里写得很清楚,遇到时再去看就行。

这套流程我前后给不同项目配过五六次,现在基本能在五分钟内搞定。你按这个顺序走一遍,应该也能达到同样的速度。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询