For the complete documentation index, see llms.txt. This page is also available as Markdown.

入门

学习使用 Oxylabs 自定义解析器。本页提供全面的示例、提示以及解析失败时会发生什么的详细说明。

如何使用自定义解析器

场景示例

解析 第一个产品的价格 在电商网站上列出的, https://sandbox.oxylabs.io/products?q=super+mario:

创建解析器有三种方式。本页将介绍最快的一种,OxyCopilot,另外两种则在各自的页面中说明:

使用 OxyCopilot 生成解析器

OxyCopilot 让你可以用简单英语描述需求, 自动创建爬虫和解析器 用于某个网站。按照下面的步骤学习基础知识,并查看 OxyCopilot 文档 了解更多信息。

1

输入 URL

点击 OxyCopilot 按钮 在左上角输入最多 3 个相同页面类型的 URL,然后点击 下一步。我们使用这个 sandbox URL: https://sandbox.oxylabs.io/products?q=super+mario.

你也可以通过填写以下内容手动配置爬虫: 网站, 爬虫、 URL 字段,并调整 其他参数 ,例如左侧菜单中的 JavaScript 渲染。

2

设置爬虫参数

接下来,指定爬虫参数、浏览器指令,并在目标网站需要时启用 JavaScript 渲染。

sandbox 页面不需要 JavaScript 渲染,因此保持默认设置并点击 下一步.

当你想要的数据不在服务器发送的 HTML 中,而是在页面加载后由 JavaScript 添加时,渲染就很重要,这在价格、商品列表和评论中很常见。如果没有渲染,自定义解析器只能看到初始 HTML,因此针对这些数据的指令不会返回任何内容。了解更多关于 JavaScript 渲染.

3

编写提示词

说明你想从页面中提取的数据。请尽量具体并提供最重要的信息。你可以在我们的 OxyCopilot 提示词库.

粘贴以下提示词以提取第一个产品的价格:

点击 生成指令 按钮发送你的提示词。

4

查看解析数据和指令

OxyCopilot 完成后,你会看到如下窗口,解析数据位于右侧:

如果你想进行任何调整,可以在这里完成。修改 URL、优化提示词、启用 JavaScript 渲染,或 编辑解析架构 以满足你的需求。更新此窗口中的任意字段后,你可以通过选择 开始新请求.

你也可以 查看并直接编辑解析指令 :

当你对结果满意后, 加载指令 继续。

5

将解析器保存为预设

你可以轻松将解析指令保存为 解析器预设。这样你就可以在 OxyCopilot 和 API 请求中重用该预设。

在网页爬虫API Playground 中,你可以选择为其保存预设的用户。设置完成后,只需点击 保存:

将弹出一个窗口,提示你为预设命名并添加可选描述:

6

在 API 请求中使用预设

要在你的网页爬虫API 请求中使用预设,请将 parse 设为 true 并使用 parser_preset 参数指定预设名称。

端点: POST https://realtime.oxylabs.io/v1/queries

运行请求将返回以下 JSON 输出:

高级用法

OxyCopilot 是创建解析器最快的方式,但其中每个步骤也都可以直接通过 API 实现:

  • 通过 API 生成解析指令 —发送提示词或 JSON schema,并附上几个示例 URL,即可获得可直接使用的指令。参见 通过 API 生成解析指令.

  • 通过 API 保存和管理预设 —创建、更新、列出和删除解析器预设,并启用自修复。参见 解析器预设.

  • 手动编写解析指令 —使用 XPath 和 CSS 选择器构建你自己的提取流程。先阅读 如何编写解析指令,然后浏览 解析指令示例.

使用自定义解析器时,如果解析失败会发生什么

如果自定义解析器无法应用你的某条指令,任务仍然会成功:结果会包含 parse_status_code 12005 (带警告解析)以及一个 _warnings 列表,说明哪条指令失败以及原因。此类结果会计费。

例如,此请求要求的字段的 XPath 在页面上没有匹配项:

价格会正常解析,失败的字段返回为 null,并带有警告:

如需忽略失败字段而不是接收警告,请参见 解析指令示例 › 错误处理.

如果自定义解析器在解析过程中遇到异常并中断,它可以返回状态码 12002, 12006、 12007。这些意外错误不会计费。

引用不存在函数的指令会在提交时被拒绝,不会创建任务。API 会返回 HTTP 400 错误,其中会指出缺失的函数及其路径:函数 not_a_real_fn 未定义。

状态码

查看我们列出的状态码 此处.

最后更新于

这有帮助吗?