Construire une empreinte digitale précise de la demande
Décrivez la requête, le domaine Google, l'emplacement codé, la langue d'interface, le pays, l'appareil, la surface et la fenêtre de résultats requises par le flux de travail.
Collectez les résultats Google en JSON structuré pour suivre les positions, analyser les concurrents et créer des outils de recherche. Définissez lieu, langue, appareil et type de recherche.
From query to usable objects
Décrivez la requête, le domaine Google, l'emplacement codé, la langue d'interface, le pays, l'appareil, la surface et la fenêtre de résultats requises par le flux de travail.
Lisez les métadonnées documentées et les matrices de résultats au lieu de lier votre application à la marque de présentation d'une page de recherche.
Traiter les modules de recherche comme conditionnels. leur présence varie selon le contexte de la demande et la surface Google retournée pour cette observation.
Conserver le contexte de la demande à côté des résultats avant de calculer les positions, les changements, la couverture de l'éditeur ou les signaux spécifiques au produit.
Conservez cette empreinte digitale avec la réponse analysée avant de comparer les positions, modules ou éditeurs au fil du temps.
Surfaces Google documentées
Les résultats web classiques utilisent le moteur Google sans sélecteur de verticale. Des paramètres documentés étendent le même modèle de requête aux surfaces média, commerce et emploi.
Envoyez-moi . engine=google et les exigences q - Je vous en prie . tbm démarré pour les résultats de recherche Google réguliers.
Réglez le sélecteur vertical documenté à TBC = ISC.
Réglez le sélecteur vertical documenté à tbm=vid.
Réglez le sélecteur vertical documenté à TBC = nouveautés.
Réglez le sélecteur vertical documenté à TBM = magasin.
Utiliser la valeur des emplois documentés ibp=htl;jobs.
Paramètres de requête
Commencez par le paramètre de requête requis. Ajoutez des commandes optionnelles documentées uniquement lorsque le flux de travail a besoin d'une surface, d'une présentation, d'une localité ou d'une fenêtre de résultats particulières.
qLes mots clés à rechercher sur Google.
chaîne · requisetbm ibptbm sélectionne des images, vidéos, nouvelles ou verticales d'achat documentées. ibp Il prend en charge la valeur de recherche d'emploi documentée.
deviceSélectionnez une présentation de recherche supportée sur ordinateur de bureau, mobile ou tablette.
chaîne · facultativedomainChoisissez le domaine Google utilisé pour la recherche.
chaîne · facultativeuulePasser une localisation codée par Google pour le contexte de recherche.
chaîne · facultativehl glhl définit la langue de l' interface; gl fournit le code du pays utilisé pour localiser la recherche.
start numstart est le résultat compensé pour sauter; num demande le nombre de résultats sur chaque page.
Réponse paralysée par Google
La réponse documentée contient des métadonnées de recherche et des collections de résultats JSON analysées. Les blocs présents dans une réponse spécifique dépendent de la requête, du lieu, du dispositif et de la verticale de recherche.
01 · contexte
generalMoteur de recherche, nombre de résultats, langue, emplacement, présentation, type de recherche, titre de page et champs d'étemples de temps indiqués par l'exemple de réponse documenté.
02 · demande de trace
inputDemandez des informations telles que l'URL originale et les champs de l'agent utilisateur indiqués dans l'exemple de réponse documenté.
03 · parcours de découverte
navigationLes entrées de navigation retournées peuvent identifier d'autres surfaces de recherche Google pour la requête.
04 · résultats analysés
organic[]Les objets organiques documentés comprennent des champs tels que le lien, le lien d'affichage, le titre, la description, le rang et le rang mondial lorsqu'ils sont retournés.
Une demande contextuelle
Choisissez la requête, la surface de recherche, le domaine Google, l'emplacement codé, la langue, le pays, l'appareil et la fenêtre de page requises par la décision.
Envoyez une demande de GET à https://serpapi.webscrapingapi.com/v2 with api_key, engine=google, et q.
Inspectez le résultat HTTP, analysez JSON, lisez les collections dont vous avez besoin dans votre flux de travail et préservez le contexte de la demande avec les résultats stockés.
Demande synchrone
engine=googleUtilisez le chemin standard lorsque l'application doit attendre la réponse Google paralysée actuelle.
Retour en file d'attente
engine=google_asyncSoumettez une recherche Google et récupérez la charge utile SERP finie plus tard via l'API Snapshot.
L'intégration
Gardez la clé API dans la configuration côté serveur, cochez les valeurs de requête, définissez un délai explicite et faites apparaître les résultats HTTP infructueux avant de parser la réponse.
: "${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"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());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())<?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.bodyhttps://serpapi.webscrapingapi.com/v2
api_key + engine=google + q
gl=us + hl=en + device=mobile
Temps de délais de 120 secondes pour le client et traitement explicite des erreurs HTTP
Flux de travail des acheteurs
Comparer les positions organiques retournées et les modules optionnels à travers les requêtes contrôlées, les lieux, les appareils et les fenêtres de résultats.
Observez les domaines retournés pour les groupes de requêtes approuvés tout en gardant les règles d'absence et de signification dans votre application.
La carte a renvoyé les éditeurs, les titres et les descriptions dans des contextes de recherche comparables et des périodes de révision.
Définir le schéma, l'horodatage d'observation, l'empreinte digitale requise, les états de validation et le modèle de rétention nécessaires au-delà du JSON de la demande.
Choix de produit
Votre équipe possède le client de recherche, la logique de récupération, le parsing, le modèle de réponse et la maintenance.
Infrastructure Récupération de pageDemandez une page publique admissible si votre demande possède l'extraction et son schéma en aval.
API d'accès au WebEnvoyez une requête contextuelle Google et consommez des métadonnées documentées plus collections de résultats analysés.
Utilisez une demande REST soutenue par le navigateur avec des attentes documentées et des étapes d'interaction lorsque les paramètres de recherche Google ne conviennent pas.
API d'accès au Web Livraison opéréeAccordez l'ensemble de requêtes, la cadence, le schéma, le processus de qualité et la livraison avec WebScrapingAPI.
Programme de donnéesÉvaluation de la production
Les prix actuels et les termes du plan restent la source commerciale de vérité.
FAQ
L'API de recherche Google renvoie le contexte de la demande et les collections de résultats JSON analysées. Les résultats organiques sont documentés, tandis que la navigation et d'autres modules de réponse dépendent de la requête, du lieu, du périphérique et de la surface de recherche demandée.
Utilisez q pour la requête requise. Les contrôles optionnels documentés comprennent tbm, ibp, appareil, domaine, uule, hl, gl, start et num pour la surface de recherche, la présentation, la localisation et la pagination.
Laissez TBM non réglé pour la recherche Web régulière, ou utilisez des valeurs TBM documentées pour les images, vidéos, nouvelles et achats. Jobs utilise le contrôle IBP documenté. Validez la forme retournée pour les surfaces dont votre application a besoin.
Non. Les modules de résultats Google varient selon la requête, la langue, l’appareil et la verticale de recherche. Considérez les blocs de réponse comme facultatifs, distinguez une collection absente d’une requête HTTP en échec, et ne lisez que les modules dont votre application a besoin.
Utilisez le moteur google_async documenté séparément lorsque votre flux de travail doit soumettre une recherche Google et récupérer la charge utile SERP finie via l'API Snapshot. Le moteur google standard est le chemin de demande synchrone indiqué sur cette page.
Gardez api_key dans une variable de l'environnement côté serveur, les valeurs de requête de code URL, définissez un délai explicite et inspectez l'état HTTP avant de parser JSON. Préservez le contexte de la demande à côté des observations stockées.
Votre première observation sur Google
Utilisez l’essai Google de 100 requêtes pour vérifier mots-clés, lieux et sortie avant de choisir un forfait mensuel.