Skip to content

通过任务 ID 获取 Wp V2 HTML 结果

接口说明

使用任务 ID 获取已完成的 SERP HTML 结果。

请求方式: GET请求地址:

https://api.seermartech.cn/v3/serp/wp/v2/task_get/html/$id

该接口对已提交成功的任务返回结果。任务结果在生成后的 7 天 可重复获取。

计费说明

本接口本身不会重复计费。在创建任务时扣费,后续在 7 天拉取该任务结果。

扣费以响应头 X-SeerMarTech-Charge-CNY 为准。

路径参数

字段类型说明
idstring任务唯一标识,UUID 格式。可在任务创建后的 7 天随时用于获取结果。

返回结果

接口返回 JSON 数据,顶层 tasks 数组,每个任务对象中对应结果。

顶层字段

字段类型说明
versionstring当前 API 版本。
status_codeinteger通用状态码。完整错误码见 /v3/appendix/errors。建议业务侧做好异常处理。
status_messagestring通用状态信息。完整状态说明见 /v3/appendix/errors
timestring接口执行耗时,单位秒。
costfloat本次请求总成本,单位 USD。对于结果查询接口通常为 0
tasks_countintegertasks 数组中的任务数量。
tasks_errorinteger返回错误的任务数量。
tasksarray任务结果数组。

tasks[] 字段

字段类型说明
idstring任务唯一标识,UUID 格式。
status_codeinteger任务状态码,范围通常为 10000-60000。完整错误码见 /v3/appendix/errors
status_messagestring任务状态信息。
timestring该任务处理耗时,单位秒。
costfloat该任务成本,单位 USD。
result_countintegerresult 数组中的结果数量。
patharray当前请求的 URL 路径。
dataobject创建任务时传的原始参数。
resultarray获取结果数组。

result[] 字段

字段类型说明
keywordstring创建任务时的。返回时会对编码解码,+ 会被还原为空格。
typestringPOST 任务中指定的搜索引擎类型。
se_domainstringPOST 任务中指定的搜索引擎域名。
location_codeintegerPOST 任务中指定的位置编码。
language_codestringPOST 任务中指定的语言编码。
datetimestring结果获取时间,UTC 格式:yyyy-mm-dd hh-mm-ss +00:00
items_countintegeritems 数组中的结果数。
itemsarray返回的 SERP 结果项。

items[] 字段

字段类型说明
pageinteger返回的 HTML 页码序号。
datestringHTML 页面抓取时间,UTC 格式:yyyy-mm-dd hh-mm-ss +00:00
htmlstringHTML 页面原始。

调用方式

cURL

bash
id="02261816-2027-0066-0000-c27d02864073"

curl --location --request GET "https://api.seermartech.cn/v3/serp/wp/v2/task_get/html/${id}" \
--header "Authorization: Bearer smt_live_YOUR_KEY" \
--header "Content-Type: application/json"

Python

python
import requests

task_id = "02261816-2027-0066-0000-c27d02864073"
url = f"https://api.seermartech.cn/v3/serp/wp/v2/task_get/html/{task_id}"

headers = {
 "Authorization": "Bearer smt_live_YOUR_KEY",
 "Content-Type": "application/json"
}

response = requests.get(url, headers=headers)
print(response.json)

TypeScript

typescript
import axios from "axios";

const taskId = "02201650-1073-0066-2000-1d132bb28897";

axios({
 method: "get",
 url: `https://api.seermartech.cn/v3/serp/wp/v2/task_get/html/${taskId}`,
 headers: {
 Authorization: "Bearer smt_live_YOUR_KEY",
 "Content-Type": "application/json"
 }
})
 .then((response) => {
 // 输出结果数据
 console.log(response.data);
 })
 .catch((error) => {
 console.error(error.response?.data || error.message);
 });

结合 tasks_ready 获取已完成任务

生产环境中,通常调用已完成任务列表接口,再逐个拉取 HTML 结果。

Python 示例

python
import requests

headers = {
 "Authorization": "Bearer smt_live_YOUR_KEY",
 "Content-Type": "application/json"
}

# 1. 获取已完成任务列表
ready_url = "https://api.seermartech.cn/v3/serp/wp/v2/tasks_ready"
ready_response = requests.get(ready_url, headers=headers).json

results = []

if ready_response.get("status_code") == 20000:
 for task_group in ready_response.get("tasks", []):
 for task_info in task_group.get("result", []) or []:
 # 2. 使用 endpoint_html 直接拉取 HTML 结果
 endpoint = task_info.get("endpoint_html")
 if endpoint:
 full_url = f"https://api.seermartech.cn{endpoint}" if endpoint.startswith("/v3/") else endpoint
 task_result = requests.get(full_url, headers=headers).json
 results.append(task_result)

 # 3. 或使用任务 id 拼接接口地址查询
 # task_id = task_info.get("id")
 # if task_id:
 # url = f"https://api.seermartech.cn/v3/serp/wp/v2/task_get/html/{task_id}"
 # task_result = requests.get(url, headers=headers).json
 # results.append(task_result)

print(results)

TypeScript 示例

typescript
import axios from "axios";

const headers = {
 Authorization: "Bearer smt_live_YOUR_KEY",
 "Content-Type": "application/json"
};

async function fetchCompletedHtmlTasks {
 const readyResponse = await axios.get(
 "https://api.seermartech.cn/v3/serp/wp/v2/tasks_ready",
 { headers }
 );

 const tasksResponses: any[] = [];

 if (readyResponse.data.status_code === 20000) {
 for (const taskGroup of readyResponse.data.tasks || []) {
 for (const task of taskGroup.result || []) {
 if (task.endpoint_html) {
 const endpoint = task.endpoint_html.startsWith("/v3/")
 ? `https://api.seermartech.cn${task.endpoint_html}`
 : task.endpoint_html;

 const taskResult = await axios.get(endpoint, { headers });

 const firstTask = taskResult.data.tasks?.[0];
 if (firstTask?.status_code >= 40000 || !firstTask?.result) {
 console.error(
 `error. Code: ${firstTask?.status_code} Message: ${firstTask?.status_message}`
 );
 } else {
 tasksResponses.push(firstTask.result);
 }
 }

 // 也可以通过 task.id 直接查询
 /*
 if (task.id) {
 const taskResult = await axios.get(
 `https://api.seermartech.cn/v3/serp/wp/v2/task_get/html/${task.id}`,
 { headers }
 );
 tasksResponses.push(taskResult.data);
 }
 */
 }
 }
 } else {
 console.error(
 `error. Code: ${readyResponse.data.status_code} Message: ${readyResponse.data.status_message}`
 );
 }

 console.log(tasksResponses);
}

fetchCompletedHtmlTasks.catch(console.error);

响应示例

json
{
 "version": "0.1.20200129",
 "status_code": 20000,
 "status_message": "Ok.",
 "time": "0.3212 sec.",
 "cost": 0,
 "tasks_count": 1,
 "tasks_error": 0,
 "tasks": [
 {
 "data": {
 "api": "serp",
 "function": "task_get",
 "se": "wp",
 "se_type": "v2",
 "language_name": "English",
 "location_code": 2840,
 "keyword": "flight ticket new york san francisco",
 "tag": "tag1",
 "device": "desktop",
 "os": "windows"
 },
 "result": [
 {
 }
 ]
 }
 ]
}

错误处理建议

  • 优检查顶层 status_code 是否为 20000
  • 再逐个检查 tasks[].status_code
  • tasks[].status_code >= 40000,通常表示任务级错误
  • result 为空,可能表示任务尚未完成、任务不存在,或结果已出可获取时效
  • 详细错误码与说明请参考 /v3/appendix/errors

注意事项

  • 本接口只能按任务 ID 获取结果,不能直接用于发起采集。
  • 结果保留时间为 7 天,建议在任务完成后尽快归档 HTML。
  • html 字段返回原始页面,体积可能较大,建议做好存储压缩与解析策略。
  • data 字段会原样返回创建任务时的核心参数,便于做结果归因与审计。

实用场景

  • 归档搜索结果页原始 HTML:保存指定在特定地区、语言和设备下的 SERP 原始页面,便于后续复盘搜索环境变化。
  • 解析尚未结构化:针对知识卡片、实验性模块或自定义版位,直接基于 HTML 做二次解析,补标准结果字段无法覆盖的信息。
  • 排查排名波动原因:当结构化结果与预期不一致时,回查原始 HTML,定位是页面渲染变化、地区差异还是搜索结果模块调整导致。
  • 训练自定义 SERP 解析器:批量获取 HTML 样本,用于训练规则引擎或模型,提高对特殊 SERP素的识别能力。
  • 做竞品展示监控:抓取目标的完整 SERP 页面,分析竞品在广告位、自然位、富媒体模块中的露出。

统一入口:官网 · LLM API · 控制台