Nstproxy 现已升级为 Nstdata。了解此次变化。
周一至周五 09:00 - 18:00(UTC+08:00) 公司地址
19H MAXGRAND PLAZA NO.3 TAI YAU STREET SAN PO KONG, KOWLOON HONG KONG ©2026 NST LABS TECH LTD. 保留所有权利。
Google SERP 数据收集:终端和 cURL 替代方案
Kai Watanabe Scraping Infrastructure Evangelist
Google SERP 数据收集替代方案:终端和 cURL 技术 TL;DR
cURL 是一种传输工具,而不是 Google SERP 数据产品。 一个成功的 HTTP 响应仍然可以是一个同意页面、挑战、重定向、部分文档或不适合排名跟踪的结果布局。
在未获得明确许可的情况下,不要自动对 Google 搜索 HTML 发起查询。 Google 将自动搜索结果收集,包括排名检查抓取,归类为机器生成的流量,违反其搜索垃圾邮件政策和服务条款。
Google 官方的定制搜索 JSON API 仅对现有客户可用。 新客户无法使用该服务,且计划于 2027 年 1 月 1 日停止服务。
对于可重复的终端工作流,调用文档化的 SERP API 并解析其 JSON。 然后使用单独的爬虫抓取您有权分析的结果页面。
Google SERP 抓取替代方案:快速比较
正确的替代方案取决于您是否需要学习 HTTP、收集一小组搜索结果或操作一个定期的 SEO 数据集。这些方法不可互换:
方法 您实际获得的 结构化数据 主要限制 最佳适配 对公共页面进行 cURL 一个 HTTP 响应体和头部 不,除非您自己解析 HTML 直接的自动 Google 搜索查询受限;响应内容可能不完整或变化 在您被允许请求的网站上学习 HTTP 诊断 Google 定制搜索 JSON API 从配置的可编程搜索引擎获取的结果 JSON 仅限现有客户;不是消费者 Google SERP 的完整复制品;计划于 2027 年 1 月 1 日结束 已有访问权限且符合 API 范围的现有应用 第三方 SERP API 供应商规范化的 Google 结果特征 通常为 JSON 计划限制、地理位置、设备覆盖和结果字段因供应商而异 SEO 研究、定期关键词检查和可重复的终端任务 Python requests / HTTPX HTTP 请求加上您自己的解析和存储 您构建它 与 cURL 相同的访问政策和响应格式限制 授权的 API 和具有稳定、允许访问的公共页面 Playwright 或其他浏览器工具 渲染的浏览器状态和交互 您构建它或导出它 更多的运行时和维护;浏览器自动化并不自动授予访问服务的权限 测试您自己的搜索 UI 或需要 JavaScript 的页面
一个实际的 SEO 管道通常结合两个服务:一个 SERP 提供者返回结果 URL,一个网页抓取 API 抓取这些 URL 后面允许的页面。爬虫不提供 Google 排名,而 SERP API 不会自动提取每个页面的主要内容。Nstdata Crawl 是用于授权页面提取步骤的单独选项。
您可以使用 cURL 抓取 Google 搜索结果吗?
从技术上讲,cURL 可以向 URL 发送 HTTP 请求并保存响应。但这并不能使其成为一个稳定的、被允许的或完整的 Google SERP 接口。Google 明确表示,未经明确许可对搜索进行自动查询——包括抓取排名检查结果——违反其政策。在构建工作流之前,请查看 。
Google 搜索结果是如何交付的 搜索结果页面并不是一个固定的数据合同。可见页面可能因查询、语言、位置、设备、时间和页面特征而异。自然列表可以与广告、地图、答案模块或其他专用元素一起出现。原始 HTML 解析器必须识别这些结构,并能够适应标记的变化。
即使响应中包含类似结果的 HTML,也无法告诉您这些结果是否符合您打算测量的市场。对于 SEO 跟踪,至少记录查询、市场、语言、设备、收集时间、结果深度和提供者。将位置视为来自该配置的观察,而不是通用排名。
为什么直接的 cURL 请求经常失败 非零或成功的 HTTP 状态只是一个信号。请求可能返回一个同意屏幕、重定向、拒绝访问的响应、一个期望客户端侧渲染的空壳,或不包含预期结果卡片的内容。200 状态并不能证明响应是一个可用的 SERP。
请勿通过轮换身份或尝试击败挑战来回应阻止。如果您的用例需要自动化的 SERP 数据,请使用授权的 API 或获得许可。如果您正在调试对您控制的网站的请求,请检查重定向和主体,而不是假设第一个响应就是最终页面。
方法 1:从终端请求 Google 搜索页面 对于正常的 HTTP 调试练习,cURL 可以从您有权请求的 URL 保存响应头和响应主体。以下示例使用一个文档网站,而不是 Google 搜索:
curl --silent --show-error --location --connect-timeout 10 --max-time 30 --dump-header response-headers.txt --output response.html --write-out 'status=%{http_code} content_type=%{content_type} bytes=%{size_download} final_url=%{url_effective}\n' 'https://example.com/'
--location 标志跟随重定向,--dump-header 写入响应头,--output 保存主体,--write-out 打印紧凑摘要。此模式对于理解传输行为很有用。它并不是反复查询 Google 搜索的食谱。
搜索请求的基本 cURL 命令 对于支持的搜索端点,优先考虑文档化的 API。例如,合格的现有自定义搜索 JSON API 客户可以使用配置的搜索引擎 ID (cx) 和 API 密钥调用官方端点:
curl --get 'https://www.googleapis.com/customsearch/v1' --data-urlencode "key= $GOOGLE_API_KEY " --data-urlencode "cx= $GOOGLE_CSE_ID " --data-urlencode 'q=python pagination' --data-urlencode 'num=10' --output results.json
将密钥保存在环境变量或密钥管理器中。请勿将其提交到代码库或粘贴到公共问题中。该端点搜索配置的可编程搜索引擎;它不是每个消费者 Google 搜索功能的即插即用源,也不能保证普通 SERP 的完整查看。官方 API 参考 文档介绍了其参数和响应。
检查 HTTP 状态代码和响应内容 对于 API 请求,在解析之前检查状态、内容类型和主体:
curl --silent --show-error --location --dump-header response-headers.txt --output results.json --write-out 'status=%{http_code} type=%{content_type} bytes=%{size_download}\n' --get 'https://www.googleapis.com/customsearch/v1' --data-urlencode "key= $GOOGLE_API_KEY " --data-urlencode "cx= $GOOGLE_CSE_ID " --data-urlencode 'q=python pagination'
jq '{kind, queries, searchInformation, items}' results.json
在出现错误时,请检查 JSON 错误对象和响应头。401 通常指向凭据或项目配置;403 表示权限、配额或 API 配置;429 表示服务正在应用速率限制。请检查提供者的当前文档和控制台,而不是无休止地重试每次故障。
方法 2:使用官方 Google 搜索 API Google 的自定义搜索 JSON API 为可编程搜索引擎返回 JSON。它需要 API 密钥和配置的搜索引擎 ID。Google 的当前概述表示该 API 对新客户不可用;现有客户必须在 2027 年 1 月 1 日之前过渡。现有账户每天可免费获得 100 次查询,额外查询的费用为每 1,000 次 5 美元,最多可达每天 10,000 次查询,具体情况根据当前概述而定。在预算之前,请确认Google API 可用性和定价通知 中的当前条款。
API 设置、身份验证和查询参数 在已经具有 API 访问权限的 Google 账户中创建可编程搜索引擎配置和 API 密钥。请求使用 key 作为 API 密钥,使用 cx 作为搜索引擎标识符,使用 q 作为查询。num 控制在端点限制内请求的结果数量;当结果可用时,响应包含 items 数组。
将凭据视为机密,并在项目控制台中监控配额。如果您尚未获得访问权限,请勿围绕此 API 构建新产品:Google 表示它对新客户不可用。
SEO 研究的官方 API 限制 该 API 代表配置的可编程搜索引擎,而不是 Google 消费者结果页面上的每个功能。请勿假设它暴露您在浏览器中看到的相同广告、本地包、还要问人们或其他 SERP 模块。它对现有应用非常有用,其配置引擎与预期的搜索范围相匹配,但对于新排名跟踪产品来说,效果不佳。
方法 3:使用第三方 API 收集结构化 SERP 数据 A SERP API 接受查询和市场设置,并返回提供者规范化的结果。在选择之前,请验证当前计划是否涵盖您的目标国家、设备类型、结果深度、刷新频率、数据保留和允许的下游使用。费用是提供者和计划特定的,因此请使用当前的定价页面,而不是一般的每查询费用估算。
使用 cURL 调用 SERP API 此示例遵循 SerpApi 文档中的 Google 搜索端点。将令牌存储为 SERPAPI_KEY;gl、hl、google_domain 和 device 值使请求的市场明确:
curl --silent --show-error --get 'https://serpapi.com/search.json' --data-urlencode 'engine=google' --data-urlencode 'q=python pagination' --data-urlencode 'google_domain=google.com' --data-urlencode 'gl=us' --data-urlencode 'hl=en' --data-urlencode 'device=desktop' --data-urlencode "api_key= $SERPAPI_KEY " --output serp.json
使用 jq 解析 SERP JSON 检查服务状态,然后进行防御性地提取字段。当查询没有自然排名或上游请求失败时,结果数组可能不存在:
jq -e '.search_metadata.status == "Success"' serp.json
jq -r '.organic_results[]? | [.position, .title, .link, (.snippet // "")] | @tsv' serp.json
对于定时作业,请保留原始响应作为审计记录,并单独存储规范化的行。如果您的解析器发生变化,可以在不支付重复查询费用的情况下重新处理响应。
导出搜索结果至 CSV 以下命令发出带有固定市场标签和收集时间戳的 CSV 标头和行。 jq @csv 处理标题和摘要中的逗号和引号:
collected_at = $( date -u '+%Y-%m-%dT%H:%M:%SZ' )
printf '%s\n' 'query,market,device,collected_at,position,title,url,snippet'
jq -r --arg q 'python pagination' --arg market 'US' --arg device 'desktop' --arg collected_at " $collected_at " '.organic_results[]? | [$q, $market, $device, $collected_at, .position, .title, .link, (.snippet // "")] | @csv' serp.json
对于多关键词作业,向模式中添加作业 ID 和提供商名称。还要存储结果是否来自自然列表或特殊功能;混合这些类别可能会使排名比较产生误导。
方法 4:使用 Python 或浏览器自动化进行搜索研究 Python 在调用 API、验证 JSON、安排运行和将记录写入数据库方面很有用。它不会改变适用端点的访问规则。Requests 或 HTTPX 是支持的 REST API 的不错选择;Playwright 适用于您拥有或被授权检查的系统上的浏览器测试。无头浏览器并不授予自动化 Google 搜索的权限,并且会增加浏览器安装、运行时和故障模式。
一个合理的工作流程是原型一个 API 调用,保存其原始响应,验证所需字段,然后再添加队列或调度程序。设置明确的超时,对瞬态错误的有界重试政策,以及对模式更改的警报。不要盲目重试 401 或 403;首先解决授权或配置问题。
SERP 数据 API 与网络爬虫 API:有什么区别? SERP API 回答“此查询为此市场和设备返回了什么搜索结果?”网络爬虫 API 回答“此 URL 可用的内容是什么,并且是否可以以可用格式返回?”这两个是 SEO 工作流中的不同阶段。
从搜索结果到整页内容分析
向允许的 SERP 数据源提交关键字和市场配置。
保存响应并规范化自然结果 URL。
去重 URL,并应用您允许访问的爬取范围。
获取页面并提取标题、标题标签、链接和主要文本。
存储源 URL、收集时间、解析器版本和内容哈希。
成本比较:直接请求与 SERP API 当来源禁止自动查询或响应不可靠时,“免费”直接请求并不是一个合理的成本基础。比较 有效的、正确范围结果 的全部成本,而不仅仅是 HTTP 请求的价格:
成本组件 直接页面请求 SERP API 查询访问 可能会被阻止或不允许自动化 列在提供商的计划和配额中 解析器维护 你的团队负责 HTML 更改和边缘情况 提供商规范化字段,但架构仍需监控 市场控制 难以一致再现 通常是明确的参数;验证准确覆盖范围 浏览器计算 可能需要用于渲染的页面 通常不需要用于 API 响应 数据清理 你的解析器的责任 对于功能类型、重复项和空字段仍然需要 合规性审查 如果工作流与源规则冲突则较高 审查提供商条款和基础数据使用条款
为了进行公平测试,请通过候选提供商运行相同的关键字集、国家、语言、设备和结果深度。衡量成功响应、缺失字段、延迟和总计费查询。如果最低单价返回不完整的架构或需要大量工程来清理,则可能会失去优势。
常见 cURL 和 SERP API 错误 症状 可能原因 实际后续步骤 400 缺少或格式错误的参数 将请求与端点的当前参考进行比较 401 缺少、无效或过期的凭证 检查密钥注入和密钥状态 403 权限、配额、账户或配置问题 阅读错误主体和账户控制台;不要更改身份以规避它 429 限速或配额限制 如果提供了,请遵循 Retry-After;减少请求速率或审查配额 超时 网络延迟或提供商延迟 设置连接和总超时;对临时错误进行重试,并有上限 200 无预期字段 结果为空、响应已更改或错误封装 在接受记录之前验证架构和状态 jq 解析错误 HTML 或截断的主体保存为 JSON 检查 Content-Type、主体大小和响应前缀
一个强大的工作区分“请求成功”与“返回有用结果”。同时跟踪两者。
你应该选择哪种 Google SERP 收集方法? 用例 推荐路线 了解终端 HTTP 行为 对你控制或被允许请求的网站进行 cURL 现有应用程序已使用自定义搜索 JSON API 仅在它符合配置的引擎和过渡截止日期时继续 新的 SEO 关键字研究或重复排名观察 根据你的市场和数据需求评估第三方 SERP API 在发现结果 URL 后需要页面文本 对这些 URL 使用授权爬虫 需要测试自己的渲染搜索 UI 在测试环境中使用 Playwright
关键的架构选择是将结果发现与页面提取分开。这使得供应商变更更容易,每个系统都能完成它实际支持的工作。Nstdata 的 自动化数据收集概述 解释了该管道的下游收集侧。
结论 cURL 非常适合检查允许的 HTTP 请求,但它不是一个稳定的 Google SERP 服务。Google 的官方搜索 API 限制为现有客户,并且有发布结束日期。对于可重复的 SEO 数据,请使用记录在案的 SERP API,定义市场参数,验证响应并跟踪提供商成本。然后在适用的权限和条款下单独爬取结果页面。
体验 Nstdata — 今天开始你的免费试用 当你从授权的 SERP 来源获得结果 URL 时,Nstdata Crawl 可以帮助收集允许的页面内容供你分析。它不提供 Google 排名。
常见问题 问:cURL 可以抓取 Google 搜索结果吗?
cURL 可以发送 HTTP 请求,但 Google 表示,未经明确许可的自动化查询违反其政策。请使用授权的数据源进行自动化 SERP 收集。
问:如何在终端中获取 Google SERP 数据?
通过 cURL 调用文档化的 API,将凭证保存在环境变量中,保存 JSON 响应,并验证其状态和架构。对于 Google SERP 功能,请验证第三方提供商的市场和设备支持。
Google 的自定义搜索 JSON API 是针对配置的可编程搜索引擎的官方 API。对新客户不可用,并计划在 2027 年 1 月 1 日停止使用。
问:最好的 SERP 抓取替代方案是什么?
最佳选择通常是一个SERP API,其国家、语言、设备、结果深度和数据使用条款与您的工作流程相匹配。在提交之前,请使用您自己的查询集进行测试。
可以。如果您的允许的SERP API返回JSON,请使用JSON解析器,例如jq或Python的csv模块来导出标准化字段。每行都要保留查询、市场、设备和收集时间。
Marcus Chen
Oct. 19th 2026
支持 JavaScript 渲染,成功率达 99.8%
将任意网站转换为 Markdown、HTML、JSON、链接、PDF 等格式,无需管理爬取基础设施。 开始免费爬取 →