SERP API· 谷歌搜索
谷歌搜索API为结构化,文本性SERP数据.
发送一个 Google 查询,包含定义观测的位置,设备,搜索表面和结果窗口. 接收记录的请求文本和解析的 JSON 结果集合,您的服务器端应用程序可以评估.
GET /v2 · engine=google·服务器端使用 ·讨论您的搜索数据工作流程
- 具体查询每个反应都从
q - 背景国家,语言,位置,设备
- 表面意识网页,图片,视频,新闻,购物,工作
- 解析输出JSON 结果收集和元数据
如何选择鞋子
最好的步行鞋
G ⌕
domain google
.com gl / hl us / en device mobile start / num 0 / 10
From query to usable objects
保持谷歌搜索的背景与其产生的结果相关.
搜索引擎搜索引擎的有用性不仅仅仅是链接列表.
定义
建立一个准确的请求指纹
描述查询,Google域名,编码位置,界面语言,国家,设备,表面和工作流所需的结果窗口.
消费
分析的集合工作
阅读记录的元数据和结果阵列,而不是将应用程序连接到搜索页面的表达标记.
03 · 解释
模型选择性诚实
根据请求背景和Google的表面,它们的存在会有所不同.
04 · 进行比较
保持类似的分析可能
在计算位置,变化,出版商覆盖范围或特定产品信号之前,将请求文本放在结果旁边.
- 01
问问最好的步行鞋
- 02
域名谷歌.com
- 03
位置美国 · 编码地点
- 04
语言en
- 05
演讲移动 · 网络
- 06
窗户开始 0 · 号 10
- 07
产量转载数据
文件的谷歌表面
在设计消费者之前,选择搜索面.
常规的网页结果使用谷歌引擎,没有垂直选择器. 文件控制扩展到媒体,商业和工作面的相同请求模型.
默认表面
网页搜索
发送engine=google及所需的q离开tbm对于常规的谷歌搜索结果未设置.
生物[] +返回模块
视觉发现
图片
设置记录的垂直选择器为tbm=isch.
观察意图
视频
设置记录的垂直选择器为tbm=vid.
目前的覆盖范围
新闻
设置记录的垂直选择器为tbm=nws.
产品发现
购物
设置记录的垂直选择器为tbm=shop.
发现角色
工作
使用记录的职位值ibp=htl;jobs.
实践真理的来源
验证输入和返回模块谷歌搜索API文件您的工作流程中代表性查询.
要求控制
让Google的每一个观察都明确且可复制.
开始使用所需查询参数. 添加文件可选控制,只需要工作流需要特定的表面,演示,局域或结果窗口.
要求查询
q
在谷歌搜索的关键字.
需要的字符串
搜索表面
tbm ibp
tbm选择记录的图像,视频,新闻或购物垂直.ibp支持记录的求职值.
字符串 · 选择性
演讲
device
选择支持桌面,手机或平板电脑搜索演示.
字符串 · 选择性
谷歌主机
domain
选择用于搜索的谷歌域名.
字符串 · 选择性
编码位置
uule
通过Google编码的位置为搜索文本.
字符串 · 选择性
语言和国家
hl gl
hl设置接口语言;gl提供用于本地搜索的国家代码.
字符串 · 选择性
结果窗口
start num
start是结果被抵消过错;num要求每个页面的结果数量.
整数 · 选择性
说明性要求GET /v2?engine=google&api_key=…&q=best%20trail%20shoes&domain=google.com&gl=us&hl=en&device=mobile&start=0&num=10
分析谷歌的响应
设计围绕稳定含义和条件模块.
记录的响应包含搜索元数据和解析的JSON结果集合.在特定响应中存在的块取决于查询,本地,设备和搜索垂直.
01 · context
general
搜索引擎,结果数量,语言,位置,演示,搜索类型,页面标题和时间标签,以记录的响应示例显示.
02 · request trace
input
要求信息,如在记录响应示例中显示的原始URL和用户代理字段.
03 · discovery paths
navigation
返回导航输入可以识别查询的其他谷歌搜索面.
04 · parsed results
organic[]
记录的有机物体包括链接,显示链接,标题,描述,排名和返回时的全球排名等领域.
答案.jsonillustrative
{
"general": {
"search_engine": "google",
"language": "en",
"location": "United States",
"mobile": true
},
"organic": [
{
"rank": 1,
"title": "Trail footwear guide",
"link": "https://example.org/guide"
}
],
"navigation": []
}选择性规则
结果模块是可选的.一个缺失的区块与一个失败的HTTP请求不同,并且空的集合应在请求的确切背景中解释,而不是作为普遍的缺失.
一个文本要求
在三个步骤中从搜索意图转向验证的JSON.
您的应用程序定义了观察并消耗了响应. WebScrapingAPI运行了文档的谷歌搜索检索和它们之间的解析路径.
- 01
制观察
选择查询,搜索面,谷歌域名,编码位置,语言,国家,设备和页面窗口,该决定要求.
- 02
调用服务器端点
发送一个GET请求给
https://serpapi.webscrapingapi.com/v2withapi_key,engine=google其他q. - 03
使用前验证
检查HTTP结果,解析JSON,阅读您的工作流需要的集合,并保存存储的结果的请求文本.
排队检索
engine=google_async
通过Snapshot API提交一个谷歌搜索,然后通过Snapshot API获取完成的SERP有效载荷.
整合
首先要做一个有限的,无法实现的谷歌请求.
保持API键在服务器侧配置中,编码查询值,设置明确的时间限,并在解析响应之前表现出未成功的HTTP结果.
- 终点
https://serpapi.webscrapingapi.com/v2- 要求
api_key+engine=google+q- 环境
gl=us+hl=en+device=mobile- 边界
- 120秒客户端时间停止和明确的HTTP错误处理
: "${WSA_API_KEY:?WSA_API_KEY is required}"
curl --get --fail-with-body --max-time 120 \
"https://serpapi.webscrapingapi.com/v2" \
--data-urlencode "api_key=$WSA_API_KEY" \
--data-urlencode "engine=google" \
--data-urlencode "q=best trail shoes" \
--data-urlencode "gl=us" \
--data-urlencode "hl=en" \
--data-urlencode "device=mobile"import os
import requests
api_key = os.environ.get("WSA_API_KEY")
if not api_key:
raise RuntimeError("WSA_API_KEY is required")
response = requests.get(
"https://serpapi.webscrapingapi.com/v2",
params={
"api_key": api_key,
"engine": "google",
"q": "best trail shoes",
"gl": "us",
"hl": "en",
"device": "mobile",
},
timeout=120,
)
response.raise_for_status()
print(response.json())const apiKey = process.env.WSA_API_KEY;
if (!apiKey) throw new Error("WSA_API_KEY is required");
const parameters = new URLSearchParams({
"api_key": apiKey,
"engine": "google",
"q": "best trail shoes",
"gl": "us",
"hl": "en",
"device": "mobile",
});
const response = await fetch(
"https://serpapi.webscrapingapi.com/v2?" + parameters,
{ signal: AbortSignal.timeout(120_000) }
);
if (!response.ok) {
throw new Error("Google Search API status " + response.status);
}
console.log(await response.json());<?php
$apiKey = getenv("WSA_API_KEY");
if ($apiKey === false || $apiKey === "") {
throw new RuntimeException("WSA_API_KEY is required");
}
$endpoint = "https://serpapi.webscrapingapi.com/v2"
. "?engine=google"
. "&api_key=" . rawurlencode($apiKey)
. "&q=" . rawurlencode("best trail shoes")
. "&gl=us&hl=en&device=mobile";
$client = curl_init($endpoint);
curl_setopt_array($client, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($client);
$status = curl_getinfo($client, CURLINFO_RESPONSE_CODE);
$error = curl_error($client);
curl_close($client);
if ($body === false) throw new RuntimeException($error);
if ($status >= 400) throw new RuntimeException("API status " . $status);
echo $body;package main
import (
"fmt"
"io"
"net/http"
"net/url"
"os"
"time"
)
func main() {
apiKey := os.Getenv("WSA_API_KEY")
if apiKey == "" { panic("WSA_API_KEY is required") }
endpoint := "https://serpapi.webscrapingapi.com/v2?engine=google" +
"&api_key=" + url.QueryEscape(apiKey) +
"&q=" + url.QueryEscape("best trail shoes") +
"&gl=us&hl=en&device=mobile"
client := &http.Client{Timeout: 120 * time.Second}
response, err := client.Get(endpoint)
if err != nil { panic(err) }
defer response.Body.Close()
if response.StatusCode >= 400 {
panic(fmt.Sprintf("API status %d", response.StatusCode))
}
body, err := io.ReadAll(response.Body)
if err != nil { panic(err) }
fmt.Println(string(body))
}import java.net.URI;
import java.net.URLEncoder;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
public final class GoogleSearchApiExample {
public static void main(String[] args) throws Exception {
String apiKey = System.getenv("WSA_API_KEY");
if (apiKey == null || apiKey.isBlank()) {
throw new IllegalStateException("WSA_API_KEY is required");
}
String endpoint = "https://serpapi.webscrapingapi.com/v2"
+ "?engine=google"
+ "&api_key=" + URLEncoder.encode(
apiKey, StandardCharsets.UTF_8)
+ "&q=" + URLEncoder.encode(
"best trail shoes", StandardCharsets.UTF_8)
+ "&gl=us&hl=en&device=mobile";
var request = HttpRequest.newBuilder(URI.create(endpoint))
.timeout(Duration.ofSeconds(120))
.GET().build();
var response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300) {
throw new RuntimeException("API status " + response.statusCode());
}
System.out.println(response.body());
}
}
using System;
using System.Net;
using System.Net.Http;
var rawApiKey = Environment.GetEnvironmentVariable("WSA_API_KEY");
if (string.IsNullOrWhiteSpace(rawApiKey)) {
throw new InvalidOperationException("WSA_API_KEY is required");
}
var apiKey = WebUtility.UrlEncode(rawApiKey);
var query = WebUtility.UrlEncode("best trail shoes");
var endpoint = "https://serpapi.webscrapingapi.com/v2"
+ "?engine=google&api_key=" + apiKey
+ "&q=" + query
+ "&gl=us&hl=en&device=mobile";
using var client = new HttpClient();
client.Timeout = TimeSpan.FromSeconds(120);
var response = await client.GetAsync(endpoint);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());require "net/http"
require "uri"
api_key = ENV["WSA_API_KEY"]
raise "WSA_API_KEY is required" if api_key.nil? || api_key.empty?
api_key = URI.encode_www_form_component(api_key)
query = URI.encode_www_form_component("best trail shoes")
uri = URI("https://serpapi.webscrapingapi.com/v2" +
"?engine=google&api_key=#{api_key}&q=#{query}" +
"&gl=us&hl=en&device=mobile")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.open_timeout = 10
http.read_timeout = 120
response = http.get(uri.request_uri)
unless response.is_a?(Net::HTTPSuccess)
raise "API status #{response.code}"
end
puts response.body买家工作流程
将可比较的谷歌观察转化为特定产品的信号.
首先保存查询指纹,然后将合适的工作流量的存储,计算,审查规则和决策逻辑应用.
产品选择
选择符合您的所有权模式的层次.
谷歌搜索API是文件化谷歌请求和解析响应的引擎特定选项. 邻近产品转移取取,提取或交付的所有权.
Network access
代理人
你的团队拥有搜索客户端,检索逻辑,分析,响应模型和维护.
基础设施
Page retrieval
抓取 API
申请符合条件的公开页面,而您的应用程序拥有提取和下游方案.
网络访问 API
Current product
谷歌搜索 API
发送一个文本性谷歌查询,并使用记录的元数据 plus解析结果收集.
引擎特定的SERP响应
Interactive retrieval
浏览器 API
使用浏览器支持的REST请求,在 Google 搜索参数不合适时,使用记录的等待和交互步骤.
网络访问 API
Operated delivery
托管数据
同意查询集,随机,方案,质量流程和交付与WebScrapingAPI
数据程序
FAQ
谷歌搜索API问题进行基层评估.
根据这些答案,选择产品,然后将当前的文档和代表性请求视为实践的真相来源.
谷歌搜索API返回什么?
谷歌搜索API返回请求文本和解析的JSON结果集合.有机结果被记录,而导航和其他响应模块取决于查询,本地,设备和请求搜索表面.
我可以控制哪些谷歌搜索参数?
需要的查询使用q. 文件可选控制包括 tbm,ibp,设备,域名,uule,hl,gl,start和num用于搜索表面,演示,本地化和页面化.
哪些谷歌搜索面是记录的?
让 tbm 不设置用于常规的网页搜索,或使用记录的 tbm值用于图像,视频,新闻和购物. 乔布斯使用记录的 ibp 控制. 验证返回的形状为您的应用需要的表面.
每个反应都应该包含相同的结果模块吗?
没有.谷歌结果模块根据查询,本地,设备和搜索垂直变化. 处理响应区块是可选的,区分一个缺失的集合和一个失败的HTTP请求,只阅读您的应用程序需要的模块.
我应该使用什么时候Google_async?
在您的工作流程提交谷歌搜索时,使用分别记录的 google_async 引擎,并通过Snapshot API 检索完成的 SERP 实用载荷.
如何安全地集成Google搜索API?
保存 api_key 在服务器端环境变量中,编码URL查询值,设置明确的时间限,并在解析 JSON之前检查HTTP状态.