Skip to content

OnPage解析

接口说明

/v3/on_page/content_parsing 用于解析指定网页的页面,并返回结构化结果:

  • 链接 URL
  • 锚文本
  • 标题层级
  • 正文文本
  • 表格
  • 页眉与页脚
  • 主题块信息
  • 评论、商品、联系方式等页面可见结构化
  • 可选返回 Markdown 版本页面

请求方式: POST接口地址: https://api.seermartech.cn/v3/on_page/content_parsing

使用前提

调用本接口前,通过 /v3/on_page/task_post//v3/on_page/task_post 创建对应的 OnPage 任务,并在创建任务时将 enable_content_parsing 设置为 true

随后,你需要在本接口请求中传该任务的 id

计费说明

该功能本身不会额外收费。在任务创建后的 30 天,可获取该任务的解析结果。

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

请求体格式

所有 POST 数据需使用 UTF-8 编码的 JSON 格式提交。 请求体为 JSON 数组

json
[
 {
 "url": "https://example.com/page",
 "id": "07131248-1535-0216-1000-17384017ad04",
 "markdown_view": true
 }
]

请求参数

字段名类型说明
urlstring需要解析的页面 URL
idstring任务 ID,可从 /v3/on_page/task_post/ 的响应中获取;对应任务的 enable_content_parsing须为 true
markdown_viewboolean是否返回 Markdown 格式页面;设为 true 时,响应中会在 page_as_markdown 字段返回页面 Markdown;默认值:false

参数示例

  • urlhttps://example.com/blog/post
  • id07131248-1535-0216-1000-17384017ad04

响应结构

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

顶层响应字段

字段名类型说明
versionstring当前 API 版本
status_codeinteger通用状态码
status_messagestring通用状态消息
timestring执行时间,单位秒
costfloat本次请求总成本,单位 USD
tasks_countintegertasks 数组中的任务数量
tasks_errorinteger返回错误的任务数量
tasksarray任务结果数组

建议为状态码与异常设计完整的错误处理机制。错误码可参考 /v3/appendix/errors

tasks[] 字段

字段名类型说明
idstring任务唯一标识,UUID 格式
status_codeinteger任务状态码,范围通常为 10000-60000
status_messagestring任务状态消息
timestring任务执行时间
costfloat单任务成本,单位 USD
result_countintegerresult 数组数量
patharrayURL 路径
dataobject与请求体中提交参数一致
resultarray结果数组

result[] 字段

字段名类型说明
crawl_progressstring抓取进度,可能值:in_progressfinished
crawl_statusobject抓取会话
items_countinteger结果项数量
itemsarray结果项数组

##解析结果项

items[] 中的 content_parsing_element

字段名类型说明
typestring返回项类型,固定为 content_parsing_element
fetch_timestring抓取页面的时间,例如:2022-11-01 10:02:52 +00:00
status_codeinteger页面状态码
page_contentobject页面解析后的
page_as_markdownstring页面 Markdown 文本;当请求中 markdown_view=true 时返回

page_content 字段说明

1) header

页面页眉。

字段名类型说明
primary_contentarray主要
secondary_contentarray次要
table_contentarray页眉中表格

页面页脚。

字段名类型说明
primary_contentarray主要
secondary_contentarray次要
table_contentarray页脚中表格

3)块通用结构

适用于 primary_contentsecondary_content 中的:

字段名类型说明
textstring文本
urlstring若该文本是链接锚文本,则返回对应页面 URL
urlsarray该中发现的链接与锚文本

urls[]

字段名类型说明
urlstring发现的 URL
anchor_textstringURL 对应的锚文本

4) table_content

页面中的表格。

字段名类型说明
headerarray表头
bodyarray表体
footerarray表尾

表格行结构

字段名类型说明
row_cellsarray单行单格数组

表格单格结构

字段名类型说明
textstring单格文本
urlsarray单格中发现的链接与锚文本
is_headerboolean是否属于表头文本

5) main_topic

页面主主题块数组。

字段名类型说明
h_titlestringmeta title
main_titlestring该块主标题
authorstring名称
languagestring语言
levelstringHTML 层级
primary_contentarray主题块主要
secondary_contentarray主题块次要
table_contentarray主题块中的表格

6) secondary_topic

页面次主题块数组,字段结构与 main_topic 相同:

字段名类型说明
h_titlestringmeta title
main_titlestring块主标题
authorstring名称
languagestring语言
levelstringHTML 层级
primary_contentarray次主题主要
secondary_contentarray次主题次要
table_contentarray次主题中的表格

7) ratings

页面中商品评分信息数组。

字段名类型说明
namestring评分名称;该对象中通常固定为 null
rating_valueinteger评分值
max_rating_valueinteger最大评分值
rating_countinteger反馈数量
relative_ratingfloat相对评分,范围 01

8) offers

页面中展示的商品数组。

字段名类型说明
namestring商品名称
priceinteger商品价格
price_currencystring价格币种
price_valid_untilinteger价格有效截止时间,UTC 格式,如 2022-11-01 10:02:52 +00:00

9) comments

页面评论数组,通常为商品评论。

字段名类型说明
ratingobject用户给商品的评分信息
titlestring评论标题
publish_datestring发布时间
authorstring评论
primary_contentarray评论正文主要

comments[].rating

字段名类型说明
namestring评分名称;该对象中通常为 null
rating_valueinteger评分值
max_rating_valueinteger最大评分值
rating_countinteger该对象中通常固定为 null
relative ratingfloat相对评分,范围 01

10) contacts

页面中的联系方式信息。

字段名类型说明
telephonesarray电话号码数组
emailsarray邮箱数组

请求示例

cURL

bash
curl --location --request POST "https://api.seermartech.cn/v3/on_page/content_parsing" \
--header "Authorization: Bearer smt_live_YOUR_KEY" \
--header "Content-Type: application/json" \
--data-raw '[
 {
 "url": "https://example.com/blog/post",
 "id": "11161551-1535-0216-0000-500b3f307f92",
 "markdown_view": true
 }
]'

Python

python
import requests

url = "https://api.seermartech.cn/v3/on_page/content_parsing"
headers = {
 "Authorization": "Bearer smt_live_YOUR_KEY",
 "Content-Type": "application/json"
}
data = [
 {
 "url": "https://example.com/blog/post",
 "id": "11161551-1535-0216-0000-500b3f307f92",
 "markdown_view": True
 }
]

response = requests.post(url, headers=headers, json=data)
print(response.json)

TypeScript

typescript
import axios from "axios";

const postArray = [
 {
 url: "https://example.com/blog/post",
 id: "11161551-1535-0216-0000-500b3f307f92",
 markdown_view: true
 }
];

axios({
 method: "post",
 url: "https://api.seermartech.cn/v3/on_page/content_parsing",
 headers: {
 Authorization: "Bearer smt_live_YOUR_KEY",
 "Content-Type": "application/json"
 },
 data: postArray
})
 .then((response) => {
 console.log(response.data);
 })
 .catch((error) => {
 console.error(error);
 });

响应示例

以下为精简后的响应示例,便于理解结构:

json
{
 "version": "0.1.20240422",
 "status_code": 20000,
 "status_message": "Ok.",
 "time": "0.2569 sec.",
 "cost": 0.000125,
 "tasks_count": 1,
 "tasks_error": 0,
 "tasks": [
 {
 "id": "11161551-1535-0216-0000-500b3f307f92",
 "status_code": 20000,
 "status_message": "Ok.",
 "time": "0.1801 sec.",
 "cost": 0,
 "result_count": 1,
 "path": [
 "v3",
 "on_page",
 "content_parsing"
 ],
 "data": {
 "api": "on_page",
 "function": "content_parsing",
 "url": "https://example.com/blog/post",
 "markdown_view": true
 },
 "result": [
 {
 "crawl_progress": "finished",
 "crawl_status": {},
 "items_count": 1,
 "items": [
 {
 "type": "content_parsing_element",
 "fetch_time": "2022-11-01 10:02:52 +00:00",
 "status_code": 200,
 "page_content": {
 "header": {
 "primary_content": [],
 "secondary_content": [],
 "table_content": null
 },
 "footer": {
 "primary_content": [],
 "secondary_content": [],
 "table_content": null
 },
 "main_topic": [],
 "secondary_topic": [],
 "ratings": null,
 "offers": null,
 "comments": null,
 "contacts": {
 "telephones": [],
 "emails": []
 }
 },
 "page_as_markdown": "# 示例页面标题\n\n这里是页面的 Markdown。"
 }
 ]
 }
 ]
 }
 ]
}

状态码与错误处理

  • 顶层 status_code 表示整个请求状态
  • tasks[].status_code 表示单个任务状态
  • 页面级状态可参考 items[].status_code

常见成功状态:

状态码含义
20000请求成功

完整错误码与说明请参考 /v3/appendix/errors。建议重点处理以下:

  • 任务 ID 不存在
  • 对应任务未开启 enable_content_parsing
  • 页面尚未抓取完成,crawl_progress 仍为 in_progress
  • 目标页面返回异常 HTTP 状态码
  • 请求参数缺失或格式错误

使用建议

  1. 调用 /v3/on_page/task_post/ 创建任务,并启用 enable_content_parsing=true
  2. 使用返回的任务 id 调用本接口
  3. crawl_progressin_progress,建议稍后重试
  4. 若需要将页面用于摘要、库、知识抽取或 LLM,建议启用 markdown_view=true

实用场景

  • 提取正文结构:解析文章页的主、次、标题层级与表格,便于做 SEO审计与页面质量评估。
  • 识别外链布局:提取页面中的链接 URL 与锚文本,用于分析链结构、导航设计和导流路径。
  • 监控页面模板变化:定期解析页眉、页脚、主与主题块,快速发现模板更新对 SEO分布的影响。
  • 抽取商品与评论信息:从商品页中识别报价、评分、评论和联系方式,支持电商落地页分析与竞品监测。
  • 生成标准化文本:返回 Markdown 格式页面,便于接知识库、分类、摘要生成或大模型处理流程。

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