区域意图仍然可见
保存Yandex区域ID和语言,以便后来的比较保留其市场背景.
收获合同的买家可以评估
保存Yandex区域ID和语言,以便后来的比较保留其市场背景.
选择记录的设备配置文件和页面号码,而不是把每一个Yandex响应都视为可替换的.
计划包含源SERPHTML有效载荷的JSON包裹,而不是假设下游记录模型.
仅提取您的工作流需要的字段,版本该方案,并决定页面变更应该如何处理.
存储这张指纹和有效载荷,以便团队可以比较相似的捕获,
文件载载的Yandex表面
亚当德克斯终端点接受一个搜索查询 plus 选项背景.开始使用代表请求,以您的应用程序实际使用的国家,语言,设备,页面和时间窗口.
使用Yandex预期的区域标识符,以影响预期位置的结果页面.
要求的背景 · lr添加文档语言值到观察中,并通过区域和查询集验证.
请求背景 · lang要求桌面,手机或平板电脑的表现,
请求背景 · 设备选择基于零的结果页面,并在需要时,记录时间范围值.
要求背景 · p / 在内请求参数
基本请求指南使用下面所示的查询参数. 只有支持明确的产品或研究要求时添加可选的文本.
在文档化基本请求领域和URL编码空间或特殊字符中传递搜索文本.
设置Yandex位置区域ID,搜索语言,以及文档桌面,手机或平板电脑配置文件.
使用p=0为第一页,并添加支持的时间值,例如过去24小时的77或过去两周的1.
源有效载荷响应
亚兰德克斯搜索API返回响应元数据和源页面表示. 在添加存储,监测或衍生搜索记录之前,设计消费者围绕该边界.
API 响应
包裹包括 search_parameters 对于提交的搜索背景和 search_results 对于源SERPHTML有效载荷.
在阅读身体之前检查HTTP状态.
仅存储您工作流需要的请求背景和源数据.
处理页面布局变化作为抽取和方案事件.
{
"search_parameters": {
"search_engine": "yandex",
"yandex_url": "https://www.yandex.com/search/?text=pizza",
"query": "pizza"
},
"search_results": "<html>...</html>"
}您的申请
您的应用程序拥有从返回的HTML中提取. 当Yandex更新其页面时,您的团队定义衍生的字段,验证规则,方案版本和维护响应.
一个文本捕捉
选择查询,并添加记录区域,语言,设备,基于零的页面和时间范围输入,您需要观察.
调用一个受保护的API键和引擎设置到yandex的SERP终端点.设置时间限并显示失败的HTTP状态.
阅读JSON封面,保存其请求文本,并通过团队的提取和方案过程运行源 HTML.
整合
这些起点将API键存储在环境变量中,发送基本请求查询,使用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=yandex" \
--data-urlencode "q=pizza"// engine=yandex; q=pizza
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: "yandex",
q: "pizza",
});
const url = new URL(
"https://serpapi.webscrapingapi.com/v2?" + parameters,
);
const response = await fetch(url, {
signal: AbortSignal.timeout(120_000),
});
if (!response.ok) {
throw new Error("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")
# engine=yandex; q=pizza
response = requests.get(
"https://serpapi.webscrapingapi.com/v2",
params={
"api_key": api_key,
"engine": "yandex",
"q": "pizza",
},
timeout=120,
)
response.raise_for_status()
print(response.json())<?php
// engine=yandex; q=pizza
$apiKey = getenv("WSA_API_KEY");
if ($apiKey === false || $apiKey === "") {
throw new RuntimeException("WSA_API_KEY is required");
}
$parameters = http_build_query([
"api_key" => $apiKey,
"engine" => "yandex",
"q" => "pizza",
]);
$client = curl_init(
"https://serpapi.webscrapingapi.com/v2?" . $parameters
);
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 < 200 || $status >= 300) {
throw new RuntimeException("API status " . $status . ": " . $body);
}
echo $body;package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
"os"
"time"
)
func main() {
// engine=yandex; q=pizza
apiKey := os.Getenv("WSA_API_KEY")
if apiKey == "" { panic("WSA_API_KEY is required") }
query := url.Values{
"api_key": {apiKey},
"engine": {"yandex"},
"q": {"pizza"},
}
client := &http.Client{Timeout: 120 * time.Second}
response, err := client.Get(
"https://serpapi.webscrapingapi.com/v2?" + query.Encode(),
)
if err != nil { log.Fatal(err) }
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil { log.Fatal(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
log.Fatalf("API status %d: %s", response.StatusCode, body)
}
fmt.Println(string(body))
}import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
public final class YandexSearchApiExample {
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";
String query = "api_key=" + URLEncoder.encode(
apiKey, StandardCharsets.UTF_8
) + "&engine=yandex&q=pizza";
var client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(120))
.build();
var request = HttpRequest.newBuilder(URI.create(endpoint + "?" + query))
.timeout(Duration.ofSeconds(120))
.GET()
.build();
var response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
if (response.statusCode() < 200 || response.statusCode() >= 300) {
throw new IllegalStateException(
"API status " + response.statusCode()
);
}
System.out.println(response.body());
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
// engine=yandex; q=pizza
var rawApiKey = Environment.GetEnvironmentVariable("WSA_API_KEY");
if (string.IsNullOrWhiteSpace(rawApiKey)) {
throw new InvalidOperationException("WSA_API_KEY is required");
}
var apiKey = rawApiKey;
using var client = new HttpClient {
Timeout = TimeSpan.FromSeconds(120)
};
var parameters = new Dictionary<string, string> {
["api_key"] = apiKey,
["engine"] = "yandex",
["q"] = "pizza"
};
var query = string.Join("&", parameters.Select(item =>
$"{WebUtility.UrlEncode(item.Key)}={WebUtility.UrlEncode(item.Value)}"));
using var response = await client.GetAsync(
"https://serpapi.webscrapingapi.com/v2?" + query
);
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?
# engine=yandex; q=pizza
uri = URI("https://serpapi.webscrapingapi.com/v2")
uri.query = URI.encode_www_form(
api_key: api_key,
engine: "yandex",
q: "pizza"
)
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}: #{response.body}"
end
puts response.body/v2
api_key + engine=yandex + q
WSA_API_KEY 服务器侧
检查状态,然后读取JSON
使用情况
产品选择
进行数据分析,并进行分析.
引擎特定的反应发送本地化Yandex查询,并在JSON中收到本文 plus的源SERPHTML有效载荷.
如果您的 target 没有被Yandex 搜索控制器表示,请检索符合条件的公开网页.
公共页面的响应 管理的交付将查询集,随机,方案,质量过程和交付移动到达成的重复数据程序中.
运营数据合同FAQ
Yandex Search API 返回一个 JSON 封装,其中包含请求元数据,以及位于 search_results 中的来源 SERP HTML 内容。它不会定义您下游记录的架构。
发送服务器侧 API 键,设置引擎到yandex,并在q. URL 编码查询文本中传递搜索查询,当它包含空格或特殊字符时.
对于搜索语言使用 lr, Yandex 位置区域 ID 和 lang. 文件文件中也可以选择 Yandex 域名; 在生产使用之前,验证与代表搜索的组合.
结果页面使用p.页面计数从0开始,因此p=0请求第一个页面.在比较捕获时,请将p与其余的请求文本保持.
您的应用程序拥有从源 SERP HTML 实用载荷中提取,您的团队拥有衍生式方案和随着Yandex页面布局变化的维护.
设置明确的客户端截止时间,在使用响应器之前检查HTTP状态,保留足够的请求文本来诊断故障,并且只应适用于工作流的限度复试.