主题
不可抓取资源
接口说明
该接口用于返回目标网站中被检测为不可抓取资源的列表。所谓“不可抓取”,是指页面 HTML 中对某个资源的引用方式所对应的预期类型,与服务器返回的 Content-Type 不一致。
例如:页面把某资源当作图片引用,但服务器返回的却是类型,此类资源会被识别为不可抓取资源。
注意:
- 检查返回
200HTTP 状态码的资源; - 该接口基于已创建的 On-Page 抓取任务结果进行查询,因此请求中传任务
id。
请求地址
POST https://api.seermartech.cn/v3/on_page/uncrawlable_resources
计费说明
调用该接口不额外收费。任务结果可在接下来的 30 天获取。
参考价约 ¥0.0000 / 次 扣费以响应头 X-SeerMarTech-Charge-CNY 为准。
请求格式
所有 POST 数据均需使用 JSON(UTF-8 编码)提交。
POST 请求体为 JSON 数组格式:
json
[
{
"id": "07131248-1535-0216-1000-17384017ad04",
"limit": 10
}
]请求参数
| 字段名 | 类型 | 说明 |
|---|---|---|
id | string | 填。任务 ID。可从 /v3/on_page/task_post/ 接口的响应中获取。示例:07131248-1535-0216-1000-17384017ad04 |
limit | integer | 可选。返回的不可抓取资源最大数量。默认值:100;最大值:1000 |
offset | integer | 可选。结果数组中的偏移量。默认值:0;最大值:2000000。例如设置为 10 时,将跳过前 10 条资源,从后续结果开始返回 |
order_by | array | 可选。结果排序规则。可使用与 filters 相同的字段作为排序键。排序方式支持:asc(升序)、desc(降序)。单次请求最多支持 3 条排序规则 |
filters | array | 可选。结果过滤条件数组。最多支持 8 个过滤条件;多个条件之间需使用逻辑操作符 and 或 or 连接 |
filters 支持的运算符
regexnot_regex<<=>>==<>innot_inlikenot_like
使用 like / not_like 时,可通过 % 匹任意长度字符串(空字符串)。
可用过滤字段请参考 /v3/on_page/filters_and_thresholds/。
过滤示例
json
[
{
"id": "07281559-0695-0216-0000-c269be8b7592",
"filters": [
["meta.content_type", "=", "image/jpeg"],
"and",
["url", "like", "%go%"]
],
"limit": 10
}
]排序说明示例
json
[
{
"id": "07281559-0695-0216-0000-c269be8b7592",
"order_by": ["fetch_time,desc"],
"limit": 10
}
]响应结构
接口返回 JSON 数据,顶层 tasks 数组,每个任务对应获取结果。
顶层字段
| 字段名 | 类型 | 说明 |
|---|---|---|
version | string | 当前 API 版本 |
status_code | integer | 通用状态码。完整错误码列表见 /v3/appendix/errors |
status_message | string | 通用状态信息 |
time | string | 执行耗时,单位:秒 |
cost | float | 本次请求总费用 |
tasks_count | integer | tasks 数组中的任务数量 |
tasks_error | integer | 返回错误的任务数量 |
tasks | array | 任务结果数组 |
tasks[] 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
id | string | 任务唯一标识,UUID 格式 |
status_code | integer | 任务状态码,范围通常为 10000–60000 |
status_message | string | 任务状态说明 |
time | string | 任务执行耗时 |
cost | float | 任务费用 |
result_count | integer | result 数组数量 |
path | array | 请求路径 |
data | object | 与请求中提交参数一致的数据对象 |
result | array | 结果数组 |
result[] 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
crawl_progress | string | 抓取会话状态。可选值:in_progress、finished |
crawl_status | object | 抓取会话 |
total_items_count | integer | 在目标域名抓取过程中发现的不可抓取资源总数 |
items_count | integer | 当前 items 数组中的资源数量 |
items | array | 不可抓取资源列表 |
crawl_status 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
max_crawl_pages | integer | 最大抓取页面数,对应创建任务时设置的 max_crawl_pages |
pages_in_queue | integer | 当前仍在抓取队列中的页面数量 |
pages_crawled | integer | 已抓取页面数量 |
items[] 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
url | string | 不可抓取资源的 URL |
reason | string | 资源不可抓取的原因。当前固定为:content_type_inconsistency |
status_code | integer | 该资源返回的 HTTP 状态码。当前固定为:200 |
fetch_time | string | 抓取该资源的时间,UTC 格式:yyyy-mm-dd hh-mm-ss +00:00 |
meta | object | 资源数据 |
meta 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
content_type | string | 资源返回的类型 |
expected_content_types | array | 抓取器基于页面引用方式推断出的预期类型列表 |
请求示例
cURL
bash
curl --location --request POST "https://api.seermartech.cn/v3/on_page/uncrawlable_resources" \
--header "Authorization: Bearer smt_live_YOUR_KEY" \
--header "Content-Type: application/json" \
--data-raw '[
{
"id": "07281559-0695-0216-0000-c269be8b7592",
"filters": [
["meta.content_type", "=", "image/jpeg"],
"and",
["url", "like", "%go%"]
],
"limit": 10
}
]'Python
python
import requests
url = "https://api.seermartech.cn/v3/on_page/uncrawlable_resources"
headers = {
"Authorization": "Bearer smt_live_YOUR_KEY",
"Content-Type": "application/json"
}
data = [
{
"id": "07281559-0695-0216-0000-c269be8b7592",
"filters": [
["meta.content_type", "=", "image/jpeg"],
"and",
["url", "like", "%go%"]
],
"limit": 10
}
]
response = requests.post(url, headers=headers, json=data)
print(response.json)TypeScript
typescript
import axios from "axios";
const postData = [
{
id: "07281559-0695-0216-0000-c269be8b7592",
filters: [
["meta.content_type", "=", "image/jpeg"],
"and",
["url", "like", "%go%"]
],
limit: 10
}
];
axios({
method: "post",
url: "https://api.seermartech.cn/v3/on_page/uncrawlable_resources",
headers: {
Authorization: "Bearer smt_live_YOUR_KEY",
"Content-Type": "application/json"
},
data: postData
})
.then((response) => {
// 输出接口结果
console.log(response.data);
})
.catch((error) => {
console.error(error);
});响应示例
json
{
"version": "0.1.20260223",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.3232 sec.",
"cost": 0,
"tasks_count": 1,
"tasks_error": 0,
"tasks": [
{
"id": "07281559-0695-0216-0000-c269be8b7592",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.0211 sec.",
"cost": 0,
"result_count": 1,
"path": [
"v3",
"on_page",
"uncrawlable_resources"
],
"data": {
"api": "on_page",
"function": "uncrawlable_resources",
"target": "univers-pc.fr",
"max_crawl_pages": 2500,
"max_crawl_depth": null
},
"result": [
{
"crawl_progress": "finished",
"crawl_status": {
"max_crawl_pages": 2500,
"pages_in_queue": 0,
"pages_crawled": 2500
},
"total_items_count": 4,
"items_count": 4,
"items": [
{
"url": "https://univers-pc.fr/wp-content/uploads/2024/11/MFC-J5740DW-4.png",
"reason": "content_type_inconsistency",
"status_code": 200,
"fetch_time": "2026-03-09 18:20:36 +00:00",
"meta": {
"content_type": "image/png",
"expected_content_types": [
"image/jpeg"
]
}
},
{
"url": "https://univers-pc.fr/wp-content/uploads/2025/12/asus-expertbook-b3605cva-mb0197x-1.jpg",
"reason": "content_type_inconsistency",
"status_code": 200,
"fetch_time": "2026-03-09 18:27:28 +00:00",
"meta": {
"content_type": "image/jpeg",
"expected_content_types": [
"image/png"
]
}
},
{
"url": "https://univers-pc.fr/wp-content/uploads/2025/12/asus-vivobook-flip-tp3407sa-flip-ql131x-3.jpg",
"reason": "content_type_inconsistency",
"status_code": 200,
"fetch_time": "2026-03-09 18:28:35 +00:00",
"meta": {
"content_type": "image/jpeg",
"expected_content_types": [
"image/webp"
]
}
}
]
}
]
}
]
}状态码与异常处理
- 顶层
status_code表示本次 API 请求的整体状态; tasks[].status_code表示单个任务的执行状态;- 建议同时检查这两个层级的状态码;
- 完整错误码与状态说明请参考
/v3/appendix/errors。
常见处理建议:
- 确认顶层
status_code是否为20000; - 再检查
tasks_error是否为0; - 最后遍历
tasks[],确认每个任务的status_code是否正常; - 若
crawl_progress为in_progress,说明抓取尚未完成,此时结果可能不完整,建议稍后重试。
使用说明
该接口通常用于分析页面资源引用是否存在异常,特别适合排查以下问题:
- 图片、脚本、样式等资源链接指向了错误的类型;
- 资源可访问,但因响应头异常导致搜索引擎或抓取器无法正确处理;
- 迁移站点、改版站点或 CDN置调整后出现的资源类型错问题。
如果你需要基于特定资源类型、URL 片段或抓取时间进行筛选,建议结合 filters 与 order_by 使用。
实用场景
- 排查资源类型错误:识别图片、样式表、脚本等资源的返回类型与页面引用类型不一致的问题,减少搜索引擎抓取异常。
- 定位 CDN 或服务器响应头异常:发现因 CDN、对象存储或反向代理错误导致的
Content-Type错,提升资源可解析性。 - 审计站点改版后的静态资源健康度:在域名迁移、模板升级或媒体库替换后,快速筛出异常资源,降低页面展示和抓取风险。
- 筛选高风险资源进行修复:通过
filters过滤特定content_type、URL 路径或时间范围,优处理目录下的问题资源。 - 监控大规模抓取任务中的异常分布:结合
total_items_count、pages_crawled和items数据,评估整站资源引用规范性并指导技术 SEO 优化。