Skip to content

获取 Google 以图搜图任务的 HTML 结果

通过本接口,可根据任务 id 获取 Google 以图搜图任务的 HTML 原始页面结果。

接口说明

请求方式: GET请求地址: /v3/serp/google/search_by_image/task_get/html/$id

说明:

  • $id:任务唯一标识,UUID 格式
  • 任务结果在任务创建后的 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
tasks_countintegertasks 数组中的任务数量
tasks_errorintegertasks 数组中返回错误的任务数量
tasksarray任务结果数组

tasks[] 字段

字段类型说明
idstring任务唯一标识,UUID 格式
status_codeinteger任务状态码,范围通常为 10000-60000,完整列表参考 /v3/appendix/errors
status_messagestring任务状态信息
timestring任务执行耗时,单位:秒
costfloat该任务成本,单位:USD
result_countintegerresult 数组中的数量
patharray请求路径
dataobject与创建任务时传的参数一致
resultarray结果数组

tasks[].result[] 字段

字段类型说明
image_urlstringPOST 提交时指定的图片地址
keywordstring搜索引擎为该图片的
typestring创建任务时指定的搜索类型
se_domainstring创建任务时指定的搜索引擎域名
location_codeinteger创建任务时指定的地区编码
language_codestring创建任务时指定的语言编码
datetimestring结果获取时间,UTC 格式:yyyy-mm-dd hh-mm-ss +00:00
items_countintegeritems 数组中的结果数量
itemsarraySERP 中解析出的结果项

tasks[].result[].items[] 字段

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

计费说明

  • 本接口用于获取已完成任务结果
  • 创建任务时计费,结果拉取在 7 天
  • 响应中的 cost 通常为 0
  • 实扣费以响应头 X-SeerMarTech-Charge-CNY 为准

使用说明

通常建议按以下流程调用:

  1. 通过 /v3/serp/google/search_by_image/tasks_ready 获取已完成任务列表
  2. 从返回结果中拿到任务结果地址或任务 id
  3. 调用 /v3/serp/google/search_by_image/task_get/html/$id 获取 HTML 页面结果

请求示例

cURL

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

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

Python

python
import requests

task_id = "02231934-2604-0066-2000-570459f04879"

url = f"https://api.seermartech.cn/v3/serp/google/search_by_image/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
const taskId = '02231934-2604-0066-2000-570459f04879';

fetch(`https://api.seermartech.cn/v3/serp/google/search_by_image/task_get/html/${taskId}`, {
 method: 'GET',
 headers: {
 'Authorization': 'Bearer smt_live_YOUR_KEY',
 'Content-Type': 'application/json'
 }
})
 .then(res => res.json)
 .then(data => {
 // 输出结果数据
 console.log(data);
 })
 .catch(err => {
 console.error(err);
 });

获取已完成任务后再获取结果示例

Python

python
import requests

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

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

results = []

if ready_response.get("status_code") == 20000:
 tasks = ready_response.get("tasks", [])
 for task in tasks:
 for item in task.get("result", []) or []:
 # 某些返回中会直接提供结果端点
 endpoint = item.get("endpoint_html")
 task_id = item.get("id")

 # 2. 优使用返回的结果地址
 if endpoint:
 result_url = f"https://api.seermartech.cn{endpoint}"
 result_response = requests.get(result_url, headers=headers).json
 results.append(result_response)

 # 3. 或使用任务 id 手动拼接结果地址
 elif task_id:
 result_url = f"https://api.seermartech.cn/v3/serp/google/search_by_image/task_get/html/{task_id}"
 result_response = requests.get(result_url, headers=headers).json
 results.append(result_response)

print(results)

TypeScript

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

async function getCompletedTaskResults {
 const readyRes = await fetch(
 'https://api.seermartech.cn/v3/serp/google/search_by_image/tasks_ready',
 { method: 'GET', headers }
 );
 const readyData = await readyRes.json;

 const results: any[] = [];

 if (readyData.status_code === 20000) {
 for (const task of readyData.tasks || []) {
 for (const item of task.result || []) {
 const endpoint = item.endpoint_html;
 const taskId = item.id;

 if (endpoint) {
 const res = await fetch(`https://api.seermartech.cn${endpoint}`, {
 method: 'GET',
 headers
 });
 results.push(await res.json);
 } else if (taskId) {
 const res = await fetch(
 `https://api.seermartech.cn/v3/serp/google/search_by_image/task_get/html/${taskId}`,
 {
 method: 'GET',
 headers
 }
 );
 results.push(await res.json);
 }
 }
 }
 }

 console.log(results);
}

getCompletedTaskResults.catch(console.error);

响应示例

json
{
 "version": "0.1.20200923",
 "status_code": 20000,
 "status_message": "Ok.",
 "time": "0.2669 sec.",
 "cost": 0,
 "tasks_count": 1,
 "tasks_error": 0,
 "tasks": [
 {
 "data": {
 "api": "serp",
 "function": "task_get",
 "se": "google",
 "se_type": "search_by_image",
 "image_url": "https://d.wattpad.com/story_parts/947637531/images/1631a35e92e45956824754475017.jpg",
 "language_name": "English",
 "location_name": "United States",
 "priority": 2,
 "device": "desktop",
 "os": "windows"
 },
 "result": [
 {
 }
 ]
 }
 ]
}

状态码与异常处理

  • 顶层 status_code 表示整次请求处理状态
  • tasks[].status_code 表示任务状态
  • 建议同时检查:
  • 顶层 status_code
  • tasks_error
  • 每个任务的 tasks[].status_code
  • result 是否为空

常见判断方式:

  • 20000:请求成功
  • 40000 及以上:通常表示任务级错误或请求异常
  • 详细错误码与说明参考 /v3/appendix/errors

建议在生产环境中建立完整的异常处理机制:

  • 任务未完成时重试
  • 任务结果为空时记录日志
  • 状态码异常时告警 -时与网络错误自动重试

注意事项

  1. 本接口返回的是 HTML 原始页面,适合需要保留页面结构、样式片段或做自定义解析的场景
  2. 任务 id 可在创建后 7 天 用于结果查询
  3. 返回中的 data 对象会回显创建任务时的参数,便于核对查询上下文
  4. 若只需要结构化 SERP 数据,应优使用相应的结构化结果接口;本接口更适合抓取原始 HTML

实用场景

  • 复核识图结果页样式:获取原始 HTML,核验图片搜索结果页的真实呈现方式,便于排查结构化字段与前端展示不一致的问题。
  • 构建自定义解析器:基于 HTML 自行提取页面模块、、图片卡片等,满足标准字段之外的定制化采集需求。
  • 追踪图像:结合 keyword 字段和页面 HTML,分析搜索引擎如何理解品牌图、商品图或素材图,图片 SEO 优化。
  • 监控不同地区语言下的识图结果差异:按 location_codelanguage_code 获取结果页 HTML,对比不同市场中的识图表现与页面布局。
  • 定位采集异常与解析失败原因:在结构化结果缺失或字段异常时,直接查看原始 HTML,帮助技术团队快速排查页面变更、反爬或解析规则失效问题。

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