主题
获取 Google 以图搜图任务的 HTML 结果
通过本接口,可根据任务 id 获取 Google 以图搜图任务的 HTML 原始页面结果。
接口说明
请求方式: GET请求地址: /v3/serp/google/search_by_image/task_get/html/$id
说明:
$id:任务唯一标识,UUID 格式- 任务结果在任务创建后的 7 天 可随时拉取
- 账户在创建任务时扣费,获取结果本身不重复收费
- 实扣费以响应头
X-SeerMarTech-Charge-CNY为准
路径参数
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务唯一标识,UUID 格式;可在任务创建后的 7 天用于获取结果 |
返回结构
接口返回标准 JSON,对应顶层 tasks 数组。
顶层字段
| 字段 | 类型 | 说明 |
|---|---|---|
version | string | 当前 API 版本 |
status_code | integer | 通用状态码,完整列表参考 /v3/appendix/errors |
status_message | string | 通用状态信息,完整列表参考 /v3/appendix/errors |
time | string | 执行耗时,单位:秒 |
cost | float | 本次请求总成本,单位:USD |
tasks_count | integer | tasks 数组中的任务数量 |
tasks_error | integer | tasks 数组中返回错误的任务数量 |
tasks | array | 任务结果数组 |
tasks[] 字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 任务唯一标识,UUID 格式 |
status_code | integer | 任务状态码,范围通常为 10000-60000,完整列表参考 /v3/appendix/errors |
status_message | string | 任务状态信息 |
time | string | 任务执行耗时,单位:秒 |
cost | float | 该任务成本,单位:USD |
result_count | integer | result 数组中的数量 |
path | array | 请求路径 |
data | object | 与创建任务时传的参数一致 |
result | array | 结果数组 |
tasks[].result[] 字段
| 字段 | 类型 | 说明 |
|---|---|---|
image_url | string | POST 提交时指定的图片地址 |
keyword | string | 搜索引擎为该图片的 |
type | string | 创建任务时指定的搜索类型 |
se_domain | string | 创建任务时指定的搜索引擎域名 |
location_code | integer | 创建任务时指定的地区编码 |
language_code | string | 创建任务时指定的语言编码 |
datetime | string | 结果获取时间,UTC 格式:yyyy-mm-dd hh-mm-ss +00:00 |
items_count | integer | items 数组中的结果数量 |
items | array | SERP 中解析出的结果项 |
tasks[].result[].items[] 字段
| 字段 | 类型 | 说明 |
|---|---|---|
page | integer | 返回的 HTML 页序号 |
date | string | HTML 页面抓取时间,UTC 格式:yyyy-mm-dd hh-mm-ss +00:00 |
html | string | HTML 原始 |
计费说明
- 本接口用于获取已完成任务结果
- 在创建任务时计费,结果拉取在 7 天
- 响应中的
cost通常为0 - 实扣费以响应头
X-SeerMarTech-Charge-CNY为准
使用说明
通常建议按以下流程调用:
- 通过
/v3/serp/google/search_by_image/tasks_ready获取已完成任务列表 - 从返回结果中拿到任务结果地址或任务
id - 调用
/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
建议在生产环境中建立完整的异常处理机制:
- 任务未完成时重试
- 任务结果为空时记录日志
- 状态码异常时告警 -时与网络错误自动重试
注意事项
- 本接口返回的是 HTML 原始页面,适合需要保留页面结构、样式片段或做自定义解析的场景
- 任务
id可在创建后 7 天 用于结果查询 - 返回中的
data对象会回显创建任务时的参数,便于核对查询上下文 - 若只需要结构化 SERP 数据,应优使用相应的结构化结果接口;本接口更适合抓取原始 HTML
实用场景
- 复核识图结果页样式:获取原始 HTML,核验图片搜索结果页的真实呈现方式,便于排查结构化字段与前端展示不一致的问题。
- 构建自定义解析器:基于 HTML 自行提取页面模块、、图片卡片等,满足标准字段之外的定制化采集需求。
- 追踪图像:结合
keyword字段和页面 HTML,分析搜索引擎如何理解品牌图、商品图或素材图,图片 SEO 优化。 - 监控不同地区语言下的识图结果差异:按
location_code、language_code获取结果页 HTML,对比不同市场中的识图表现与页面布局。 - 定位采集异常与解析失败原因:在结构化结果缺失或字段异常时,直接查看原始 HTML,帮助技术团队快速排查页面变更、反爬或解析规则失效问题。