> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/products/es/web-scraper-api/features/custom-parser/parser-presets.md).

# Preajustes del parser

Descubre cómo funcionan los preajustes del parser y cómo usarlos en tus trabajos de scraping.

Puedes **guardar**, **reutilizar**, y **modificar** instrucciones personalizadas de análisis a través de Web Scraper API. Una vez que crees un preset de parser, lo alojaremos en nuestro sistema, lo que te permitirá referenciarlo en tus trabajos de scraping mediante el `parser_preset` parámetro en el payload.

Esta función ofrece varias **capacidades clave**:

* Guarda y administra tus propios parsers en nuestro sistema
* Reutiliza fácilmente los presets en múltiples trabajos de scraping
* Crear, recuperar, actualizar, eliminar y listar todos los presets
* Acceder a estadísticas de rendimiento y uso de un preset
* Adaptarse a sitios cambiantes usando presets con auto-reparación

## Referencia de API

**Endpoint:** `https://data.oxylabs.io/v1/parsers/presets`

La tabla enumera cada operación disponible y su ruta de endpoint:

<table><thead><tr><th width="247.30859375">Acción</th><th width="152.23828125">Método de solicitud</th><th>Ruta</th></tr></thead><tbody><tr><td><strong>Crear</strong> un preset</td><td><code>POST</code></td><td><code>/v1/parsers/presets</code></td></tr><tr><td><strong>Recuperar</strong> un preset</td><td><code>GET</code></td><td><code>/v1/parsers/presets/{preset_name}</code></td></tr><tr><td><strong>Actualizar</strong> un preset</td><td><code>PUT</code></td><td><code>/v1/parsers/presets/{preset_name}</code></td></tr><tr><td><strong>Eliminar</strong> un preset</td><td><code>DELETE</code></td><td><code>/v1/parsers/presets/{preset_name}</code></td></tr><tr><td><strong>Listar todos</strong> presets</td><td><code>GET</code></td><td><code>/v1/parsers/presets</code></td></tr><tr><td><strong>Ver uso</strong> y <strong>rendimiento</strong> estadísticas</td><td><code>GET</code></td><td><code>/v1/parsers/presets/{preset_name}/stats</code></td></tr><tr><td><strong>Rastrear la auto-reparación</strong> cambios</td><td><code>GET</code></td><td><code>/v1/parsers/presets/{preset_name}/changelog</code></td></tr></tbody></table>

## Activar la auto-reparación

Los presets de parser están equipados con la función de auto-reparación, que ayuda a mantener los parsers y sus tasas de éxito a medida que los sitios web cambian. Cuando está habilitada, los presets de parser **se reparan automáticamente** y ajustan las instrucciones de análisis en segundo plano sin entrada manual adicional.

Para **habilitar la auto-reparación** para tu preset de Custom Parser, incluye los siguientes parámetros obligatorios al crear o actualizar un preset:

<table><thead><tr><th width="222.90234375">Parámetro</th><th>Descripción</th></tr></thead><tbody><tr><td><code>self_heal</code></td><td>Activa la funcionalidad de auto-reparación cuando se establece en <code>True</code>.</td></tr><tr><td><code>prompt_schema</code></td><td>Un esquema JSON que describe la salida requerida del parser. Puedes crear automáticamente el esquema al <a href="/products/es/web-scraper-api/features/custom-parser/generating-parsing-instructions-via-api.md">generar parsers con API</a>.</td></tr><tr><td><code>urls</code></td><td>Una lista de hasta 5 URLs del mismo tipo de página. Recomendamos proporcionar de 3 a 5 URLs para ayudar al parser a adaptarse a diferentes diseños y mejorar la precisión del análisis.</td></tr></tbody></table>

<details>

<summary>Ejemplo de payload</summary>

El ejemplo de payload que se muestra aquí habilita la auto-reparación al actualizar un preset existente.

**Endpoint:** `PUT https://data.oxylabs.io/v1/parsers/presets/{preset_name}`

```json
{
    "self_heal": true,
    "urls": ["https://sandbox.oxylabs.io/products"],
    "prompt_schema": {
        "properties": {
            "product_titles": {
                "description": "Título de cada producto.",
                "items": {
                    "type": "string"
                },
                "maxItems": 5,
                "title": "Títulos de productos",
                "type": "array"
            }
        },
        "required": [
            "product_titles"
        ],
        "title": "Campos",
        "type": "object"
    }
}
```

</details>

## Ejemplos de uso

### Crear un preset

**Endpoint:** `POST https://data.oxylabs.io/v1/parsers/presets`

{% hint style="info" %}
Los nombres de los presets solo pueden contener letras, dígitos, guiones bajos y guiones, y deben ser únicos para tu cuenta. Crear un preset con un nombre existente devuelve `400 - El preset de parser ya existe`.
{% endhint %}

**Payload:**

```json
{
    "name": "my_new_parser",
    "description": "Extrae texto de todos los elementos H4 de la página.",
    "parsing_instructions": {
        "titles": {
            "_fns": [
                {
                    "_args": ["//h4/text()"],
                    "_fn": "xpath"
                }
            ]
        }
    }
}
```

<details>

<summary>Salida</summary>

```json
{
    "id": 424707,
    "name": "my_new_parser",
    "description": "Extrae texto de todos los elementos H4 de la página.",
    "prompt_text": null,
    "prompt_schema": null,
    "urls": [],
    "render": false,
    "parsing_instructions": {
        "titles": {
            "_fns": [
                {
                    "_args": [
                        "//h4/text()"
                    ],
                    "_fn": "xpath"
                }
            ]
        }
    },
    "self_heal": false,
    "heal_status": "disabled",
    "last_healed_at": null,
    "last_used_at": null,
    "total_results": null,
    "success_rate": null,
    "created_at": "2026-09-08 08:26:02",
    "updated_at": "2026-09-08 08:26:02"
}
```

</details>

### Usar un preset

**Endpoint:** `POST https://realtime.oxylabs.io/v1/queries`

{% hint style="info" %}
Un preset recién creado puede tardar hasta aproximadamente un minuto en estar disponible para los trabajos de scraping tanto en Realtime como en Push-Pull. Hasta entonces, las solicitudes que lo referencian se rechazan con `400 - El parser_preset proporcionado no existe.`
{% endhint %}

**Payload:**

```json
{
    "source": "universal",
    "url": "https://sandbox.oxylabs.io/products",
    "parse": true,
    "parser_preset": "my_new_parser"
}
```

<details>

<summary>Salida</summary>

```json
{
    "results": [
        {
            "content": {
                "titles": [
                    "The Legend of Zelda: Ocarina of Time",
                    "Super Mario Galaxy",
                    "Super Mario Galaxy 2",
                    "Metroid Prime",
                    "Super Mario Odyssey",
                    "Halo: Combat Evolved",
                    "The House in Fata Morgana - Dreams of the Revenants Edition -",
                    "NFL 2K1",
                    "Uncharted 2: Among Thieves",
                    "Tekken 3",
                    "The Legend of Zelda: The Wind Waker",
                    "Gran Turismo",
                    "Metal Gear Solid 2: Sons of Liberty",
                    "Grand Theft Auto Double Pack",
                    "Baldur's Gate II: Shadows of Amn",
                    "Tetris Effect: Connected",
                    "The Legend of Zelda Collector's Edition",
                    "Gran Turismo 3: A-Spec",
                    "The Legend of Zelda: A Link to the Past",
                    "The Legend of Zelda: Majora's Mask",
                    "The Last of Us",
                    "Persona 5 Royal",
                    "The Last of Us Remastered",
                    "The Legend of Zelda: Ocarina of Time 3D",
                    "Chrono Cross",
                    "Gears of War",
                    "Sid Meier's Civilization II",
                    "Halo 3",
                    "Ninja Gaiden Black",
                    "Super Mario Advance 4: Super Mario Bros. 3",
                    "Jet Grind Radio",
                    "Grim Fandango"
                ],
                "parse_status_code": 12000
            },
            "created_at": "2025-10-27 11:41:18",
            "updated_at": "2025-10-27 11:41:19",
            "page": 1,
            "url": "https://sandbox.oxylabs.io/products",
            "job_id": "7388540292158203905",
            "is_render_forced": false,
            "status_code": 200,
            "type": "parsed",
            "parser_type": "preset",
            "parser_preset": "my_new_parser"
        }
    ]
}
```

</details>

### Recuperar un preset

**Endpoint:** `GET https://data.oxylabs.io/v1/parsers/presets/{preset_name}`

<details>

<summary>Salida</summary>

```json
{
    "id": 424707,
    "name": "my_new_parser",
    "description": "Extrae texto de todos los elementos H4 de la página.",
    "prompt_text": null,
    "prompt_schema": null,
    "urls": [],
    "render": false,
    "parsing_instructions": {
        "titles": {
            "_fns": [
                {
                    "_args": [
                        "//h4/text()"
                    ],
                    "_fn": "xpath"
                }
            ]
        }
    },
    "self_heal": false,
    "heal_status": "disabled",
    "last_healed_at": null,
    "last_used_at": null,
    "total_results": null,
    "success_rate": null,
    "created_at": "2026-09-08 08:26:02",
    "updated_at": "2026-09-08 08:26:02"
}
```

</details>

### Actualizar un preset

**Endpoint:** `PUT https://data.oxylabs.io/v1/parsers/presets/{preset_name}`

Define los campos del preset que quieres actualizar. En el siguiente ejemplo, solo las `parsing_instructions` se actualizarán.

**Payload:**

```json
{
    "parsing_instructions": {
        "titles": {
            "_fns": [
                {
                    "_args": ["//h4/text()"],
                    "_fn": "xpath"
                }
            ]
        },
        "prices": {
            "_fns": [
                {
                    "_args": [".price-wrapper"],
                    "_fn": "css"
                },
                {"_fn": "element_text"}
            ]
        }
    }
}
```

<details>

<summary>Salida</summary>

```json
{
    "id": 424707,
    "name": "my_new_parser",
    "description": "Extrae texto de todos los elementos H4 de la página.",
    "prompt_text": null,
    "prompt_schema": null,
    "urls": [],
    "render": false,
    "parsing_instructions": {
        "prices": {
            "_fns": [
                {
                    "_args": [
                        ".price-wrapper"
                    ],
                    "_fn": "css"
                },
                {
                    "_fn": "element_text"
                }
            ]
        },
        "titles": {
            "_fns": [
                {
                    "_args": [
                        "//h4/text()"
                    ],
                    "_fn": "xpath"
                }
            ]
        }
    },
    "self_heal": false,
    "heal_status": "disabled",
    "last_healed_at": null,
    "last_used_at": null,
    "total_results": null,
    "success_rate": null,
    "created_at": "2026-09-08 08:26:02",
    "updated_at": "2026-09-08 08:26:27"
}
```

</details>

### Eliminar un preset

**Endpoint:** `DELETE https://data.oxylabs.io/v1/parsers/presets/{preset_name}`

{% hint style="info" %}
Una eliminación exitosa devuelve `204 No Content`. Luego, recuperar el preset devuelve `404`.
{% endhint %}

### Listar todos los presets

**Endpoint:** `GET https://data.oxylabs.io/v1/parsers/presets`

<details>

<summary>Salida</summary>

```json
[
    {
        "id": 424710,
        "name": "books_parser",
        "description": "Analiza todos los títulos de libros en la página.",
        "prompt_text": null,
        "prompt_schema": null,
        "urls": [],
        "render": false,
        "parsing_instructions": {
            "titles": {
                "_fns": [
                    {
                        "_args": [
                            "//h3//text()"
                        ],
                        "_fn": "xpath"
                    }
                ]
            }
        },
        "self_heal": false,
        "heal_status": "disabled",
        "last_healed_at": null,
        "last_used_at": null,
        "total_results": null,
        "success_rate": null,
        "created_at": "2026-09-08 08:26:02",
        "updated_at": "2026-09-08 08:26:02"
    },
    {
        "id": 424707,
        "name": "my_new_parser",
        "description": "Extrae texto de todos los elementos H4 de la página.",
        "prompt_text": null,
        "prompt_schema": null,
        "urls": [],
        "render": false,
        "parsing_instructions": {
            "prices": {
                "_fns": [
                    {
                        "_args": [
                            ".price-wrapper"
                        ],
                        "_fn": "css"
                    },
                    {
                        "_fn": "element_text"
                    }
                ]
            },
            "titles": {
                "_fns": [
                    {
                        "_args": [
                            "//h4/text()"
                        ],
                        "_fn": "xpath"
                    }
                ]
            }
        },
        "self_heal": false,
        "heal_status": "disabled",
        "last_healed_at": null,
        "last_used_at": null,
        "total_results": null,
        "success_rate": null,
        "created_at": "2026-09-08 08:26:02",
        "updated_at": "2026-09-08 08:26:27"
    }
]
```

</details>

### Ver estadísticas

**Endpoint:** `GET https://data.oxylabs.io/v1/parsers/presets/{preset_name}/stats`

<details>

<summary>Salida</summary>

```json
{
    "total_results": 9,
    "successful_results": 9,
    "success_rate": 100,
    "success_rate_by_path": {
        "titles": 100
    }
}
```

</details>

Puedes **filtrar los resultados por fecha y hora** usando los `date_from` y/o `date_to` parámetros de URL. Usa el formato `YYYY-MM-DDTHH`, donde `T` indica la hora, y `HH` es la hora en formato de 24 horas.

Por ejemplo, para obtener estadísticas de 9 a. m. a 2 p. m. el 5 de agosto de 2025:

```url
https://data.oxylabs.io/v1/parsers/presets/{preset_name}/stats?date_from=2025-08-05T9&date_to=2025-08-05T14
```

### Rastrear los cambios de auto-reparación

**Endpoint:** `GET https://data.oxylabs.io/v1/parsers/presets/{preset_name}/changelog`

Nuestro sistema registra automáticamente la actividad de auto-reparación. Puedes acceder a este registro histórico para revisar todas las modificaciones realizadas por la función de auto-reparación. Un preset que nunca ha sido reparado devuelve un registro vacío:

<pre><code>{
    "log": []
<strong>}
</strong></code></pre>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers.oxylabs.io/products/es/web-scraper-api/features/custom-parser/parser-presets.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
