# Preajustes de parser

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

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

* Guarda y administra tus propios parsers en nuestro sistema
* Reutiliza presets fácilmente en múltiples trabajos de scraping
* Crea, recupera, actualiza, elimina y lista todos los presets
* Accede a estadísticas de rendimiento y uso de un preset
* Adáptate a sitios cambiantes usando presets de autocuración

## Referencia de la API

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

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

<table><thead><tr><th width="247.30859375">La 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 autocuración</strong> cambios</td><td><code>GET</code></td><td><code>/v1/parsers/presets/{parser_name}/changelog</code></td></tr></tbody></table>

## Habilitar autocuración

Los parser presets están equipados con la función de autocuració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 intervención manual adicional.

Para **habilitar la autocuración** para tu preset de parser personalizado, 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 autocuració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="generating-parsing-instructions-via-api">generar parsers con la 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 3-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 carga útil</summary>

El ejemplo de payload mostrado aquí habilita la autocuración actualizando 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 producto",
                "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`

**Carga útil:**

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

<details>

<summary>Salida</summary>

```json
{
    "id": 421947,
    "name": "my_new_parser",
    "description": "Extrae texto de todos los elementos H4 en 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,
    "created_at": "2025-10-27 11:40:22",
    "updated_at": "2025-10-27 11:40:22"
}
```

</details>

### Usar un preset

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

**Carga útil:**

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

<details>

<summary>Salida</summary>

```json
{
    "results": [
        {
            salida estructurada
                "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",
            "content": {
            "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": 421947,
    "name": "my_new_parser",
    "description": "Extrae texto de todos los elementos H4 en 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,
    "created_at": "2025-10-27 11:40:22",
    "updated_at": "2025-10-27 11:40:22"
}
```

</details>

### Actualizar un preset

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

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

**Carga útil:**

```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": 421947,
    "name": "my_new_parser",
    "description": "Extrae texto de todos los elementos H4 en 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,
    "created_at": "2025-10-27 11:40:22",
    "updated_at": "2025-10-27 11:44:24"
}
```

</details>

### Eliminar un preset

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

### Listar todos los presets

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

<details>

<summary>Salida</summary>

```json
[
    {
        "id": 421950,
        "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,
        "created_at": "2025-10-27 11:46:59",
        "updated_at": "2025-10-27 11:46:59"
    },
    {
        "id": 421947,
        "name": "my_new_parser",
        "description": "Extrae texto de todos los elementos H4 en 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,
        "created_at": "2025-10-27 11:40:22",
        "updated_at": "2025-10-27 11:45:20"
    }
]
```

</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 resultados por fecha y hora** usando los `date_from` y/o `date_to` parámetros 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 AM a 2 PM 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 cambios de autocuración

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

Nuestro sistema registra automáticamente la actividad de autocuración. Puedes acceder a este registro histórico para revisar todas las modificaciones realizadas por la función de autocuración.
