Skip to content

on_page/resources:获取页面资源列表

POST /v3/on_page/resources

POST /v3/on_page/resources 用于获取网站爬取页面中的资源列表图片、脚本、样式表及失效资源,并返回每个资源的详细信息。如需查询指定资源的页面,请使用 Pages By Resource 接口。

请求信息

  • 请求方法POST
  • 请求路径/v3/on_page/resources
  • 请求地址https://api.seermartech.cn/v3/on_page/resources
  • 请求格式application/json
  • 字符编码:UTF-8
  • 请求体:JSON 数组,格式为 [{ ... }]

计费说明

本接口不收取费用,任务结果可在提交后的 30 天获取。

  • 参考价约 ¥0.0000 / 次
  • 实扣费以响应头 X-SeerMarTech-Charge-CNY 为准。

请求参数

请求体中的每个数组代表一个任务。

参数类型说明
idstring任务 ID。通过 /v3/on_page/task_post 提交任务后,可从响应中获取。示例:07131248-1535-0216-1000-17384017ad04
urlstring指定页面 URL获取该页面中的资源。若要获取某个 URL 下资源的 meta 信息,在此字段中传该 URL。未指定时,响应中的 meta 基于爬虫首次发现该资源的页面数据。
limitinteger返回资源的最大数量。默认值:100;最大值:1000
offsetinteger结果偏移量。默认值:0;最大值:2000000。例如设置为 10,将跳过前 10 条结果。
filtersarray资源筛选条件,最多同时设置 8 个过滤条件。
relevant_pages_filtersarray根据页面属性筛选资源。支持与页面接口相同的过滤条件,最多同时设置 8 个过滤条件。
order_byarray结果排序规则。最多设置 3 条排序规则。
search_after_tokenstring获取后续结果的令牌。当单次请求需要获取 20,000 条结果时,可使用该参数时。该值由上一次响应返回。使用时,请求参数与上一次请求保持一致。
tagstring自定义任务标识,最长 255 个字符。该值会原样出现在响应的 data 对象中,便于匹任务与结果。

filtersrelevant_pages_filters

支持以下逻辑运算符:

  • regex
  • not_regex
  • <
  • <=
  • >
  • >=
  • =
  • <>
  • in
  • not_in
  • like
  • not_like

多个条件之间使用逻辑运算符 andor。在 likenot_like 中可以使用 % 匹零个或多个字符。

示例:

json
[
  ["resource_type", "=", "image"],
  "and",
  ["size", ">", 100000]
]

order_by

排序格式为:

json
["size,desc"]

  • asc:升序
  • desc:降序

多条排序规则示例:

json
["resource_type,asc", "size,desc"]

请求示例

cURL

bash
curl --location --request POST \
  "https://api.seermartech.cn/v3/on_page/resources" \
  --header "Authorization: Bearer smt_live_YOUR_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '[
    {
      "id": "07281559-0695-0216-0000-c269be8b7592",
      "filters": [
        ["resource_type", "=", "image"],
        "and",
        ["size", ">", 100000]
      ],
      "order_by": ["size,desc"],
      "limit": 10
    }
  ]'

Python

python
import requests

url = "https://api.seermartech.cn/v3/on_page/resources"

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

post_data = [
    {
        "id": "07281559-0695-0216-0000-c269be8b7592",
        "filters": [
            ["resource_type", "=", "image"],
            "and",
            ["size", ">", 100000],
        ],
        "order_by": ["size,desc"],
        "limit": 10,
    }
]

response = requests.post(url, headers=headers, json=post_data)
result = response.json()

if result.get("status_code") == 20000:
    print(result)
else:
    print(
        "错误。代码:%s,消息:%s"
        % (result.get("status_code"), result.get("status_message"))
    )

TypeScript

typescript
import axios from "axios";

const postData = [
  {
    id: "07281559-0695-0216-0000-c269be8b7592",
    filters: [
      ["resource_type", "=", "image"],
      "and",
      ["size", ">", 100000],
    ],
    order_by: ["size,desc"],
    limit: 10,
  },
];

axios
  .post(
    "https://api.seermartech.cn/v3/on_page/resources",
    postData,
    {
      headers: {
        Authorization: "Bearer smt_live_YOUR_KEY",
        "Content-Type": "application/json",
      },
    }
  )
  .then((response) => {
    // 处理响应结果
    console.log(response.data);
  })
  .catch((error) => {
    console.error(error);
  });

C#

csharp
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

public static class OnPageResourcesDemo
{
    public static async Task GetResourcesAsync()
    {
        using var httpClient = new HttpClient();

        httpClient.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("Bearer", "smt_live_YOUR_KEY");

        var postData = new List<object>
        {
            new
            {
                id = "07281559-0695-0216-0000-c269be8b7592",
                filters = new object[]
                {
                    new object[] { "resource_type", "=", "image" },
                    "and",
                    new object[] { "size", ">", 100000 }
                },
                order_by = new[] { "size,desc" },
                limit = 10
            }
        };

        var content = new StringContent(
            JsonConvert.SerializeObject(postData),
            Encoding.UTF8,
            "application/json"
        );

        var response = await httpClient.PostAsync(
            "https://api.seermartech.cn/v3/on_page/resources",
            content
        );

        var result = JsonConvert.DeserializeObject<dynamic>(
            await response.Content.ReadAsStringAsync()
        );

        if (result.status_code == 20000)
        {
            Console.WriteLine(result);
        }
        else
        {
            Console.WriteLine(
                $"错误。代码:{result.status_code},消息:{result.status_message}"
            );
        }
    }
}

响应结构

接口返回 JSON 数据,顶层 tasks 数组。

json
{
  "version": "0.1.20200805",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "4.8323 sec.",
  "cost": 0,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "07281559-0695-0216-0000-c269be8b7592",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "4.8323 sec.",
      "cost": 0,
      "result_count": 1,
      "path": [
        "v3",
        "on_page",
        "resources"
      ],
      "data": {
        "api": "on_page",
        "function": "resources",
        "limit": 100
      },
      "result": [
        {
          "crawl_progress": "finished",
          "crawl_status": {
            "max_crawl_pages": 100,
            "pages_in_queue": 0,
            "pages_crawled": 100,
            "total_items_count": 10,
            "items_count": 10
          },
          "items": []
        }
      ]
    }
  ]
}

响应字段

顶层字段

字段类型说明
versionstring当前 API 版本。
status_codeinteger通用响应状态码。成功时通常为 20000
status_messagestring通用响应说明。
timestring接口执行耗时,单位为秒。
costfloat平台原始 USD 成本兼容字段;人民币实扣以 X-SeerMarTech-Charge-CNY 为准。
tasks_countintegertasks 数组中的任务总数。
tasks_errorintegertasks 数组中返回错误的任务数量。
tasksarray任务结果数组。

tasks 字段

字段类型说明
idstring任务唯一标识,采用 UUID 格式。
status_codeinteger任务状态码,通常位于 1000060000 范围。
status_messagestring任务状态说明。
timestring任务执行耗时,单位为秒。
costfloat平台原始 USD 成本兼容字段;人民币实扣以 X-SeerMarTech-Charge-CNY 为准。
result_countintegerresult 数组中的数量。
patharray请求路径。
dataobject提交任务时使用的参数。
resultarray任务结果数组。

result 与爬取状态字段

字段类型说明
crawl_progressstring爬取状态。可选值:in_progressfinished
crawl_statusobject爬取会话。
max_crawl_pagesinteger创建任务时设置的最大爬取页面数。
pages_in_queueinteger当前仍在爬取队列中的页面数量。
pages_crawledinteger已爬取页面数量。
total_items_countinteger爬取到的资源总数。
items_countinteger当前结果中的资源数量。
itemsarray资源数组。

资源字段

基础资源信息

字段类型说明
resource_typestring资源类型。可选值:scriptimagestylesheetbroken
metaobject资源属性,取决于 resource_type。未指定请求参数 url 时,基于爬虫首次发现该资源的页面返回。
urlstring资源 URL。
status_codeinteger资源所在页面的状态码。
locationstringLocation 响应头,表示页面重定向目标 URL。
content_encodingstring编码类型。
media_typestring用于呈现资源的媒体类型。
accept_typestring期望的资源类型。可选值:anynoneimagesitemaprobotsscriptstylesheetredirecthtmltextotherfont。对于 resource_type=broken 的资源,该字段表示失效资源的类型。
serverstring服务器版本。
from_sitemapboolean资源是否在网站站点地图中被发现。

图片与标题信息

以下字段主要适用于 image 类型资源:

字段类型说明
alternative_textstring图片 alt 属性。
alternative_text_variationsarray同一图片资源出现过的不同 alt 属性值。
titlestring标题。
alternative_title_variationsarray同一图片出现过的不同 title 属性值。
original_widthinteger图片原始宽度,单位为像素。
original_heightinteger图片原始高度,单位为像素。
widthinteger图片显示宽度,单位为像素。
heightinteger图片显示高度,单位为像素。

资源大小与加载信息

字段类型说明
sizeinteger资源大小,单位为字节。
encoded_sizeinteger编码后的资源大小,单位为字节。
total_transfer_sizeinteger压缩后的资源传输大小,单位为字节。
fetch_timestring获取资源的日期和时间,使用 UTC 格式:yyyy-mm-dd hh-mm-ss +00:00
fetch_timingobject资源获取时间范围。
duration_timeinteger获取资源耗时,单位为毫秒。
fetch_startinteger开始下载资源所需的时间。
fetch_endinteger完成资源下载所需的时间。

cache_control

缓存控制信息。

字段类型说明
cachableboolean资源是否可缓存。
ttlinteger缓存有效期,单位为毫秒。

checks

资源检查结果。字段会根据资源类型变化。

字段类型说明
no_content_encodingboolean资源是否未使用压缩编码。适用于 scriptimagestylesheetbroken
high_loading_timeboolean资源加载时间是否 3 秒。
is_redirectboolean资源所在页面是否发生 3XX 重定向。
is_4xx_codeboolean资源所在页面是否返回 4XX 状态码。
is_5xx_codeboolean资源所在页面是否返回 5XX 状态码。
is_brokenboolean资源是否失效。资源所在页面返回 4XX5XX,或资源损坏时为 true
is_wwwboolean资源所在页面是否位于 www 子域名。
is_httpsboolean资源所在页面是否使用 HTTPS 协议。
is_httpboolean资源所在页面是否使用 HTTP 协议。
original_size_displayedboolean图片是否以原始尺寸显示。适用于 image
is_minifiedboolean样式表或脚本是否已压缩。适用于 stylesheetscript
has_redirectboolean资源是否重定向。适用于 scriptimage。对于图片,表示页面或资源是否重定向到该图片;对于脚本,表示脚本是否重定向。
has_subrequestsboolean样式表或脚本是否额外请求。适用于 stylesheetscript

resource_errors

资源错误和警告信息。

errors

字段类型说明
lineinteger发现错误的行号。
columninteger发现错误的列号。
messagestring错误文本信息。
status_codeinteger错误状态码。

错误状态码:

状态码含义
0未识别错误
501HTML 解析错误
1501JavaScript 解析错误
2501CSS 解析错误
3501图片解析错误
3502图片缩放值为 0
3503图片尺寸为 0
3504图片格式无效

warnings

字段类型说明
lineinteger警告对应的行号。为 0 时表示警告涉及整个页面。
columninteger警告对应的列号。为 0 时表示警告涉及整个页面。
messagestring警告文本。
status_codeinteger警告状态码。

常见警告信息:

  • Has node with more than 60 childs.:HTML 页面中至少存在一处同级标签嵌套 60 层。
  • Has more that 1500 nodes.:DOM 树 1,500 个。
  • HTML depth more than 32 tags.:HTML DOM 深度 32 层。

警告状态码:

状态码含义
0未识别警告
1节点 60 个子节点
2节点数量 1,500 个
3HTML 深度 32 层

last_modified

资源变更信息。如果没有对应数据,字段值为 null

字段类型说明
headerstring/nullHTTP 头部记录的最后修改时间,使用 UTC 格式。
sitemapstring/null站点地图记录的最后修改时间,使用 UTC 格式。
meta_tagstring/nullMeta 标签记录的最后修改时间,使用 UTC 格式。

时间格式示例:

text
2019-11-15 12:57:46 +00:00

状态码与错误处理

请根据顶层 status_code 和任务级 tasks[].status_code 判断请求及任务是否成功。建议在客户端实现错误处理机制,覆盖 HTTP 异常、任务状态异常及结果为空等。

完整状态码请参考错误码文档。

实用场景

  • 识别失效图片、脚本和样式表,减少 4XX/5XX 资源错误对抓取与页面体验的影响。
  • 筛选指定大小的图片资源,定位影响页面加载速度的文件并指导压缩优化。
  • 检查脚本和样式表是否完成压缩,降低静态资源体积并改善核心网页指标。
  • 分析资源加载耗时与传输大小,定位高加载时间资源并优化前端性能。
  • 核查图片 alt、标题及显示尺寸,批量发现无障碍和图片 SEO 优化问题。

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