Documentation has been updated: see help center and changelog in one place.

快速开始

学习使用 Oxylabs 自定义解析器。在此页面,您将找到全面的示例、提示以及解析失败时的处理细节。

如何使用自定义解析器

场景示例

假设您想要解析 总结果数 Bing 搜索使用搜索词时返回的结果 test:

我们将概述实现此目标的三种主要方法:

使用 OxyCopilot 生成解析器

OxyCopilot 允许您用简明英文描述需求, 自动为网站创建爬虫和解析器 了解基础步骤,请按照下面概述的步骤操作,并查看 OxyCopilot 文档 以获取更多信息。

1

输入 URL(或多个 URL)

点击 OxyCopilot 按钮 在左上角并输入最多 3 个相同页面类型的 URL。我们以此 Bing 搜索 URL 为例: https://www.bing.com/search?q=test.

您还可以通过填写以下字段手动配置爬虫: 网站, 爬虫,以及 URL 字段在顶部,并在左侧菜单中调整 其他参数 例如如果目标网站需要,可启用 JavaScript 渲染。

2

设置爬虫参数

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

对于 Bing 搜索, 启用 JavaScript 渲染 然后点击 下一步.

3

编写提示语

说明您希望从页面中提取的数据。请尽量描述清楚并提供最重要的信息。您可以在我们的 OxyCopilot 提示库.

中找到流行网站的提示示例。将以下提示粘贴以从 Bing 搜索页面提取总结果数:

解析搜索结果的总数量。

点击 生成指令 按钮以发送您的提示。

4

查看解析的数据和指令

当 OxyCopilot 完成后,您会看到如下窗口,解析的数据显示在右侧:

如果您想进行任何调整,可以在此处操作。修改 URL(或多个 URL)、优化提示、启用 JavaScript 渲染,或 编辑解析 schema 以适应您的需求。在此窗口中更新任何字段后,您可以通过选择重新运行请求 开始新请求.

您也可以 在此处查看并直接编辑解析指令

一旦对结果满意, 加载指令 以继续。

5

将解析器保存为预设

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

在网页爬虫 API Playground 中,您可以选择将预设保存到哪个用户。设置完成后,点击 保存:

会弹出一个对话框,提示您为预设命名并添加可选描述:

6

在 API 请求中使用预设

要在 Web Scraper API 请求中使用预设,请将 parse 设置为 true 并使用 parser_preset 参数指定预设名称。

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

{
    "source": "bing_search",
    "query": "test",
    "render": "html",
    "parse": true,
    "parser_preset": "Bing_total_results"
}

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

{
    "results": [
        {
            "content": {
                "parse_status_code": 12000,
                "total_search_results": 12000000
            },
            "created_at": "2025-10-24 09:29:28",
            "updated_at": "2025-10-24 09:30:42",
            "page": 1,
            "url": "https://www.bing.com/search?q=test",
            "job_id": "7387419953164488705",
            "is_render_forced": false,
            "status_code": 200,
            "type": "parsed",
            "parser_type": "preset",
            "parser_preset": "Bing_total_results"
        }
    ]
}

高级用法

通过 API 生成解析器

除了在 Playground 中使用 OxyCopilot,您还可以将提示直接发送到 Web Scraper API 来生成解析器。请参阅 通过 API 生成解析指令 文档页面以了解更多信息。

端点: POST https://data.oxylabs.io/v1/parsers/generate-instructions/prompt

{
    "prompt_text": "解析搜索结果的总数量。",
    "urls": ["https://www.bing.com/search?q=test"],
    "render": true
}
输出
{
    "parsing_instructions": {
        "total_search_results": {
            "_fns": [
                {
                    "_args": [
                        "//span[contains(@class, 'count')]/text()"
                    ],
                    "_fn": "xpath_one"
                },
                {
                    "_fn": "amount_from_string"
                }
            ]
        }
    },
    "prompt_schema": {
        "properties": {
            "total_search_results": {
                "description": "搜索结果总数。",
                "title": "总搜索结果",
                "type": "number"
            }
        },
        "required": [
            "total_search_results"
        ],
        "title": "字段",
        "type": "object"
    }
}

通过 API 保存解析器预设

Web Scraper API 允许您将解析指令保存为可重用的解析器预设。请查看 解析器预设 文档以获取可用操作列表和完整代码示例。

端点: POST https://data.oxylabs.io/v1/parsers/presets

{
    "name": "Bing_total_results",
    "parsing_instructions": {
        "total_search_results": {
            "_fns": [
                {
                    "_fn": "xpath_one",
                    "_args": [
                        "//span[contains(@class, 'count')]/text()"
                    ]
                },
                {
                    "_fn": "amount_from_string"
                }
            ]
        }
    }
}
输出
{
    "id": 421938,
    "name": "Bing_total_results",
    "description": null,
    "prompt_text": null,
    "prompt_schema": null,
    "urls": [],
    "render": false,
    "parsing_instructions": {
        "total_search_results": {
            "_fns": [
                {
                    "_args": [
                        "//span[contains(@class, 'count')]/text()"
                    ],
                    "_fn": "xpath_one"
                },
                {
                    "_fn": "amount_from_string"
                }
            ]
        }
    },
    "self_heal": false,
    "heal_status": "disabled",
    "last_healed_at": null,
    "created_at": "2025-10-27 09:28:37",
    "updated_at": "2025-10-27 09:28:37"
}

手动编写指令

要手动使用自定义解析器,请在创建任务时包含一组 parsing_instructions 。您可以使用 CSS 和 XPath 选择器 来定位 DOM 中的元素。

按照下面的逐步示例了解基础知识,然后浏览我们关于 手动编写指令 的深入指南以获取高级技巧和详细文档。

我们以 Bing 搜索场景为例。作业参数如下所示:

{
    "source": "bing_search",
    "query": "test",
    "render": "html",
    "parse": true,
    "parsing_instructions": {
        "number_of_results": {
            "_fns": [
                {
                    "_fn": "xpath_one",
                    "_args": [".//span[@class='sb_count']/text()"]
                }
            ]
        }
    }
}

第 1 步。 您必须提供 "parse": true 参数指定预设名称。

第 2 步。 解析指令必须在 "parsing_instructions" 字段中描述。

上面的示例解析指令指定目标是从抓取的文档中解析搜索结果数量,并将结果放入 number_of_results 字段中。如何通过定义“管道”来解析该字段的指令如下所示:

"_fns": [
    {
        "_fn": "xpath_one",
        "_args": [".//span[@class='sb_count']/text()"]
    }
]

该管道描述要执行的数据处理函数列表。函数按列表中出现的顺序执行,并将上一个函数的输出作为输入。

在上面的示例管道中,使用了 xpath_one 函数(可用函数的完整列表)。它允许您使用 XPath 表达式和 XSLT 函数处理 HTML 文档。作为函数参数,指定可以找到目标元素的精确路径: .//span[@class='sb_count']。您也可以指示解析器选择目标元素中找到的 text()

上述示例任务的解析结果应如下所示:

{
    "results": [
        {
            "content": {
                "number_of_results": "About 16,700,000 results",
                "parse_status_code": 12000
            },
            "created_at": "2025-10-27 09:48:04",
            "updated_at": "2025-10-27 09:48:38",
            "page": 1,
            "url": "https://www.bing.com/search?q=test",
            "job_id": "7388511797231226881",
            "is_render_forced": false,
            "status_code": 200,
            "type": "parsed",
            "parser_type": "custom",
            "parser_preset": null
        }
    ]
}

自定义解析器不仅提供从抓取的 HTML 中提取文本,还可以执行基本的数据处理函数。

例如,上述解析指令提取的是 number_of_results 作为带有额外关键字的文本,您可能并不需要这些关键字。如果您想获取给定查询的结果数量并以数字类型返回,您可以重用相同的解析指令并在现有管道中添加 query=test ,将 amount_from_string 函数添加到现有管道:

{
    "source": "bing_search",
    "query": "test",
    "render": "html",
    "parse": true,
    "parsing_instructions": {
        "number_of_results": {
            "_fns": [
                {
                    "_fn": "xpath_one",
                    "_args": [".//span[@class='sb_count']/text()"]
                },
                {
                    "_fn": "amount_from_string"
                }
            ]
        }
    }
}

上述示例任务的解析结果应如下所示:

{
    "results": [
        {
            "content": {
                "number_of_results": 14200000,
                "parse_status_code": 12000
            },
            "created_at": "2025-10-27 10:00:36",
            "updated_at": "2025-10-27 10:01:05",
            "page": 1,
            "url": "https://www.bing.com/search?q=test",
            "job_id": "7388514950961963009",
            "is_render_forced": false,
            "status_code": 200,
            "type": "parsed",
            "parser_type": "custom",
            "parser_preset": null
        }
    ]
}

当使用自定义解析器时如果解析失败会怎样

如果自定义解析器未能处理客户端定义的解析指令,我们将返回 12005 状态代码(解析但有警告)。

{
    "source": "bing_search",
    "query": "test",
    "render": "html",
    "parse": true,
    "parsing_instructions": {
        "number_of_results": {
            "_fns": [
                {
                    "_fn": "xpath_one",
                    "_args": [".//span[@class='sb_count']/text()"]
                },
                {
                    "_fn": "amount_from_string"
                }
            ]
        },
        "number_of_organics": {
            "_fns": [
                {
                    "_fn": "xpath",
                    "_args": ["//this-will-not-match-anything"]
                },
                {
                    "_fn": "length"
                }
            ]
        }
    }
}

您将为此类结果付费:

{
    "results": [
        {
            "content": {
                "_warnings": [
                    {
                        "_fn": "xpath",
                        "_msg": "XPath 表达式未匹配到任何数据。",
                        "_path": ".number_of_organics",
                        "_fn_idx": 0
                    }
                ],
                "number_of_results": 14200000,
                "parse_status_code": 12005,
                "number_of_organics": null
            },
            "created_at": "2025-10-27 10:03:54",
            "updated_at": "2025-10-27 10:04:22",
            "page": 1,
            "url": "https://www.bing.com/search?q=test",
            "job_id": "7388515782126234625",
            "is_render_forced": false,
            "status_code": 200,
            "type": "parsed",
            "parser_type": "custom",
            "parser_preset": null
        }
    ]
}

如果自定义解析器在解析操作中遇到异常并中断,它可能返回以下这些状态代码: 12002, 12006, 12007。对于这些意外错误,您不会被收费。

状态代码

请在此处查看我们的状态代码概述 这里.

最后更新于

这有帮助吗?