> 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/getting-started.md).

# Primeros pasos

Aprende a usar Oxylabs Custom Parser. En esta página encontrarás ejemplos completos, consejos y detalles sobre qué ocurre si el análisis falla.

## Cómo usar Custom Parser <a href="#how-to-use-custom-parser" id="how-to-use-custom-parser"></a>

### Ejemplo de escenario

Extrae el **precio del primer producto** publicado en un sitio de comercio electrónico, **`https://sandbox.oxylabs.io/products?q=super+mario`**:

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2FsyYKUF76MWH5no3UxjZW%2Fimage.png?alt=media&amp;token=9b40f065-61e3-447a-b72e-a68d1cdd385e" alt="" width="375"><figcaption></figcaption></figure>

Hay tres formas de crear un parser. Esta página recorre la más rápida, OxyCopilot, y las otras dos se tratan en sus propias páginas:

* [Genera analizadores con OxyCopilot](#generate-parsers-with-oxycopilot)
* [Genera analizadores mediante API](/products/es/web-scraper-api/features/custom-parser/generating-parsing-instructions-via-api.md)
* [Escribe instrucciones de análisis manualmente](/products/es/web-scraper-api/features/custom-parser/writing-instructions-manually/tips-for-writing-xpath-expressions.md#how-to-write-parsing-instructions-inlineextension)

### Genera analizadores con OxyCopilot

OxyCopilot te permite describir tus necesidades en inglés sencillo para **crear automáticamente raspadores y analizadores** para un sitio web. Aprende los conceptos básicos siguiendo los pasos descritos a continuación y consulta [la documentación de OxyCopilot](/products/es/web-scraper-api/web-scraper-api-playground/oxycopilot.md#custom-parser-builder) para más información.

{% hint style="success" %}
Abre el [**Web Scraper API Playground**](https://dashboard.oxylabs.io/en/api-playground) en nuestro panel para acceder a OxyCopilot.
{% endhint %}

{% stepper %}
{% step %}

#### Introduce la(s) URL(s)

Haz clic en el **botón de OxyCopilot** en la parte superior izquierda e introduce hasta 3 URL del mismo tipo de página y haz clic en **Siguiente**. Usemos esta URL de sandbox: **`https://sandbox.oxylabs.io/products?q=super+mario`**.

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2FFmFBG02HI7hRLK7L2cj5%2Fimage.png?alt=media&amp;token=9aaeebfb-2bad-443e-be66-2570235f3299" alt="" width="545"><figcaption></figcaption></figure>

{% hint style="info" %}
También puedes configurar el raspador manualmente rellenando los **Sitio web**, **Raspador**, y **URL** campos de la parte superior, y ajustando **parámetros adicionales** como el renderizado de JavaScript en el menú de la izquierda.
{% endhint %}
{% endstep %}

{% step %}

#### Configura los parámetros del raspador

A continuación, especifica los parámetros del raspador, las instrucciones del navegador y activa el renderizado de JavaScript si tu sitio web objetivo lo requiere.

La página de sandbox no necesita renderizado de JavaScript, así que deja los valores predeterminados y haz clic en **Siguiente**.&#x20;

{% hint style="info" %}
El renderizado importa cuando los datos que quieres no están en el HTML que envía el servidor, sino que JavaScript los añade después de que carga la página, como ocurre a menudo con precios, listados de productos y reseñas. Sin renderizado, Custom Parser solo ve el HTML inicial, así que las instrucciones que apuntan a esos datos no devuelven nada. Lee más sobre [**renderizado de JavaScript**](/products/es/web-scraper-api/features/js-rendering-and-browser-control.md#javascript-rendering).
{% endhint %}

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2FnywZ0UXzVmsthQQmIbht%2Fimage.png?alt=media&amp;token=9be92716-53c5-4230-a6ba-b1484c532be7" alt="" width="470"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Escribe el prompt

Explica los datos que quieres extraer de una página. Asegúrate de ser descriptivo y proporcionar la información más importante. Puedes encontrar ejemplos de prompts para sitios web populares en nuestra [biblioteca de prompts de OxyCopilot](https://oxylabs.io/resources/prompts-code-samples).

Pega el siguiente prompt para extraer el precio del primer producto:

```
Analiza el precio del primer producto en la página.
```

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2FOG3MoIvtLoulTzaPFq26%2Fimage.png?alt=media&amp;token=3565708a-082c-4e42-b62c-98f60ff73a73" alt="" width="470"><figcaption></figcaption></figure>

Haz clic en el **Genera instrucciones** botón para enviar tu prompt.
{% endstep %}

{% step %}

#### Revisa los datos analizados y las instrucciones

Cuando OxyCopilot termine, verás la siguiente ventana, donde los datos analizados están a la derecha:

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2F8Yd8bNBQXPwscHKdSK1U%2Fimage.png?alt=media&amp;token=ce799a13-a229-43b6-9de9-36cfd4873990" alt=""><figcaption></figcaption></figure>

Si quieres hacer algún ajuste, puedes hacerlo aquí. Modifica la(s) URL(s), ajusta el prompt, activa el renderizado de JavaScript o [edita el esquema de análisis](/products/es/web-scraper-api/web-scraper-api-playground/oxycopilot.md#step-2-optional-adjust-parsing-schema) para adaptarlo a tus necesidades. Cuando actualices cualquier campo en esta ventana, puedes volver a ejecutar la solicitud seleccionando **Iniciar nueva solicitud**.

También puedes **ver y editar directamente las instrucciones de análisis** aquí:

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2FvW521rQpr277NpSDPSP8%2Fimage.png?alt=media&amp;token=ecf24ec7-a5b6-42bc-877e-79d9187dcf39" alt=""><figcaption></figcaption></figure>

Cuando estés satisfecho con el resultado, **Cargar instrucciones** para continuar.

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2F2bVplkgKW67lmAd7zWS9%2Fimage.png?alt=media&amp;token=5c067a5e-0b0e-4d47-b28d-c96e07deedcf" alt="" width="469"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Guardar el analizador como un preset

Puedes guardar fácilmente tus instrucciones de análisis como un [preset de analizador](/products/es/web-scraper-api/features/custom-parser/parser-presets.md). Esto te permite reutilizar el preset en OxyCopilot y con tus solicitudes de API.

En el Web Scraper API Playground, puedes elegir opcionalmente el usuario para el que guardar el preset. Cuando todo esté listo, simplemente haz clic en **Guardar**:

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2FKuZLB7HY6298sZhClts8%2Fimage.png?alt=media&amp;token=f0429fc1-ad0a-4159-bf23-60b0bcccc25e" alt=""><figcaption></figcaption></figure>

Aparecerá una ventana emergente que te pedirá que nombres el preset y añadas una descripción opcional:

<figure><img src="https://2786356907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBQ7Zf9paoN3FTeGcyfY1%2Fuploads%2FnpBJz2wlknd0kfAR1ayx%2Fimage.png?alt=media&amp;token=3e031dc5-3bd1-49a3-bdb8-81cb1473adc2" alt="" width="333"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Usa el preset con solicitudes de API

Para usar un preset con tus solicitudes de Web Scraper API, establece `parse` a `true` y especifica el nombre del preset con el parámetro `parser_preset` parameter.

**Punto de conexión:** `POST https://realtime.oxylabs.io/v1/queries`

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

Al ejecutar la solicitud, obtendrás la siguiente salida JSON:

```json
{
    "results": [
        {
            "_request": {...},
            "_response": {...},
            "content": {
                "parse_status_code": 12000,
                "price": 91.99
            },
            "created_at": "2026-09-08 11:21:03",
            "is_render_forced": false,
            "job_id": "7503049765014236161",
            "page": 1,
            "parser_preset": "sandbox_first_product_price",
            "parser_type": "preset",
            "session_info": {...},
            "status_code": 200,
            "type": "parsed",
            "updated_at": "2026-09-08 11:21:09",
            "url": "https://sandbox.oxylabs.io/products"
        }
    ]
}

```

{% endstep %}
{% endstepper %}

## Uso avanzado

OxyCopilot es la forma más rápida de crear un parser, pero cada paso también está disponible directamente a través de la API:

* **Genera instrucciones de análisis mediante API** – envía un prompt o un esquema JSON junto con algunas URL de ejemplo y recibe instrucciones listas para usar. Consulta [**Generación de instrucciones de análisis mediante API**](/products/es/web-scraper-api/features/custom-parser/generating-parsing-instructions-via-api.md).
* **Guarda y gestiona presets mediante API** – crea, actualiza, lista y elimina presets de analizador, y activa la autorreparación. Consulta [**Presets de analizador**](/products/es/web-scraper-api/features/custom-parser/parser-presets.md).
* **Escribe instrucciones de análisis manualmente** – construye tu propio flujo de extracción con XPath y selectores CSS. Empieza con [**Cómo escribir instrucciones de análisis**](/products/es/web-scraper-api/features/custom-parser/writing-instructions-manually.md), luego explora los [**Ejemplos de instrucciones de análisis**](/products/es/web-scraper-api/features/custom-parser/writing-instructions-manually/parsing-instruction-examples.md).

## Qué pasa si el análisis falla al usar Custom Parser <a href="#what-happens-if-parsing-fails-when-using-custom-parser" id="what-happens-if-parsing-fails-when-using-custom-parser"></a>

Si Custom Parser no puede aplicar una de tus instrucciones, el trabajo sigue teniendo éxito: el resultado lleva `parse_status_code` `12005` (analizado con advertencias) y una `_warnings` lista que describe qué instrucción falló y por qué. Se te cobra por esos resultados.&#x20;

Por ejemplo, esta solicitud pide un campo cuyo XPath no coincide con nada en la página:

```json
{
    "source": "universal",
    "url": "https://sandbox.oxylabs.io/products",
    "parse": true,
    "parsing_instructions": {
        "first_product_price": {
            "_fns": [
                {
                    "_fn": "xpath_one",
                    "_args": [
                        "//div[contains(@class, 'price-wrapper')]/text()"
                    ]
                },
                {
                    "_fn": "amount_from_string"
                }
            ]
        },
        "number_of_reviews": {
            "_fns": [
                {
                    "_fn": "xpath",
                    "_args": [
                        "//this-will-not-match-anything"
                    ]
                },
                {
                    "_fn": "length"
                }
            ]
        }
    }
}
```

El precio se analiza normalmente, el campo que falla se devuelve como `null`, con una advertencia:

```json
{
    "results": [
        {
            "_request": {...},
            "_response": {...},
            "content": {
                "_warnings": [
                    {
                        "_fn": "xpath",
                        "_fn_idx": 0,
                        "_msg": "XPath expressions did not match any data.",
                        "_path": ".number_of_reviews"
                    }
                ],
                "first_product_price": 91.99,
                "number_of_reviews": null,
                "parse_status_code": 12005
            },
            "created_at": "2026-09-08 09:00:40",
            "is_render_forced": false,
            "job_id": "7503014433245923329",
            "page": 1,
            "parser_preset": null,
            "parser_type": "custom",
            "session_info": {...},
            "status_code": 200,
            "type": "parsed",
            "updated_at": "2026-09-08 09:00:44",
            "url": "https://sandbox.oxylabs.io/products"
        }
    ]
}
```

Para ignorar un campo que falla en lugar de recibir una advertencia, consulta [**Ejemplos de instrucciones de análisis › Manejo de errores**](/products/es/web-scraper-api/features/custom-parser/writing-instructions-manually/parsing-instruction-examples.md#error-handling).

Si Custom Parser encuentra una excepción y falla durante la operación de análisis, puede devolver códigos de estado `12002`, `12006`, y `12007`. No se te cobrará por estos errores inesperados.

Las instrucciones que hacen referencia a una función inexistente se rechazan al enviarlas y no se crea ningún trabajo. La API devuelve un error HTTP `400` que indica la función que falta y su ruta: function `not_a_real_fn` no está definida.

## Códigos de estado <a href="#status-codes" id="status-codes"></a>

Consulta nuestros códigos de estado detallados [**aquí**](/products/es/web-scraper-api/response-codes.md#parsers).


---

# 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/getting-started.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.
