# OxyCopilot

**OxyCopilot** es una función gratuita [**Web Scraper API** ](/products/es/web-scraper-api.md)que hace que la incorporación sea más fácil y ayuda a los usuarios a encontrar soluciones eficaces para casos de uso complejos, todo sin necesidad de conocimientos de programación. OxyCopilot actualmente incluye tres funciones separadas:

* **Generador de scraper**
* [**Custom Parser**](/products/es/web-scraper-api/features/custom-parser.md) **generador**
* **Generador de instrucciones de navegador**

{% hint style="success" %}
OxyCopilot está disponible en el [**Web** **Scraper API Playground**](https://dashboard.oxylabs.io/?route=/api-playground) en el panel de Oxylabs.
{% endhint %}

{% embed url="<https://youtu.be/9JoF8_5r5HY?si=61c3Zkx6FrH06PVa>" %}

## Generador de scraper

OxyCopilot te ayuda a configurar un scraper (y a formar el cuerpo de la solicitud) para Web Scraper API sin necesidad de entender la documentación ni la lógica de los campos.

### Cómo funciona

#### **Paso 1: Proporciona una URL y un prompt**

* **URL:** Proporciona la URL que quieres extraer.
* **Prompt:** Describe tus requisitos (por ejemplo, localización, renderizado con JS, etc.).

<figure><img src="/files/b5d8373c29aecd6719d218e70f82f23ceebdfc39" alt="" width="563"><figcaption></figcaption></figure>

**Paso 2: Análisis**

Tienes tres opciones para gestionar el análisis:

1. **Custom Parser**: Selecciona "Agregar instrucciones de análisis" para crear tu propia lógica de análisis usando el [**Custom Parser builder**](#custom-parser-builder).
2. **Parser dedicado**: Si la URL es de un sitio web para el que proporcionamos un parser dedicado y quieres usarlo, selecciona "Continuar con el parser dedicado".
3. **Sin análisis**: Elige continuar sin análisis si no necesitas datos estructurados.

{% hint style="warning" %}
Si la URL pertenece a un sitio web para el que tenemos un parser dedicado, pero no necesitas datos estructurados, selecciona "Continuar con el parser dedicado" y desactiva el parámetro parse en la configuración del playground. Evita usar el botón de salida, ya que no guardará los parámetros rellenados previamente.
{% endhint %}

<div><figure><img src="/files/3a35aa37e069bbc274945dea95306737ef4793ba" alt="" width="375"><figcaption><p>Si no tenemos un parser dedicado</p></figcaption></figure> <figure><img src="/files/11b95d107a5831ef8314053bdca9c5443951fefb" alt="" width="375"><figcaption><p>Si tenemos un parser dedicado</p></figcaption></figure></div>

#### **Paso 3: Revisa la solicitud**

Según tu prompt, OxyCopilot rellenará previamente los parámetros necesarios en el Web Scraper API Playground. Verás el código de solicitud específico y los parámetros para tu caso de uso, y podrás ajustar los parámetros si es necesario.

**Paso 4: Envía la solicitud y copia**

Si todo se ve bien, envía la solicitud para ver cómo se ve la salida y comprobar si funciona como esperas. Luego, copia el código de la solicitud para usarlo en tus tareas de extracción posteriores con Web Scraper API.

### Ejemplo

#### URL

```
https://www.amazon.de/s?k=adidas
```

#### Prompt

{% code overflow="wrap" %}

```
Extrae la página de resultados de Amazon de la URL proporcionada y localiza los resultados para Polonia.
```

{% endcode %}

#### Parámetros generados por IA (JSON)

```json
{
        "source": "amazon_search",
        "query": "adidas",
        "geo_location": "PL",
        "domain": "de"
}
```

#### Códigos de solicitud generados por IA

<figure><img src="/files/87ce319dc75e24a0c59b3393b1e27a4e5e9ae3ed" alt=""><figcaption></figcaption></figure>

## Custom Parser builder

Aprovecha la función [**Custom Parser**](/products/es/web-scraper-api/features/custom-parser.md) con OxyCopilot para crear un parser sin necesidad de escribir código ni analizar manualmente la estructura del sitio web.

### Cómo funciona

#### **Paso 1: Proporciona URL(s) y prompt**

* **URL(s):** Puedes proporcionar hasta **3 URLs** para las que quieres generar instrucciones de análisis. OxyCopilot usa el HTML de las URL proporcionadas para determinar la mejor lógica para extraer los campos requeridos.&#x20;

{% hint style="info" %}
Cuantas más URLs proporciones, más robustas serán las instrucciones de análisis, ya que OxyCopilot identifica patrones comunes entre páginas similares. Ten en cuenta que URLs adicionales pueden aumentar el tiempo de espera para obtener resultados.
{% endhint %}

* **Prompt:** El prompt es el componente clave para construir un esquema en lenguaje natural, que sirve como base para generar las instrucciones de análisis reales. El prompt debe describir claramente los campos que necesitan ser analizados.

<figure><img src="/files/2eb0a74829d5d5e4e7b3b9e4f2f8dc7e9cd9e886" alt=""><figcaption></figcaption></figure>

#### **Paso 2 \[Opcional]: Ajustar el esquema de análisis**

Este paso te permite afinar el esquema de análisis para adaptarlo mejor a tus necesidades o solucionar cualquier problema.

#### **Resumen del esquema de análisis**

<figure><img src="/files/94c1220bfea918ee1466e73f357435c76ffbf928" alt=""><figcaption></figcaption></figure>

Esta tabla visualiza la entrada utilizada por la IA para generar instrucciones de análisis. El esquema define qué campos necesitan ser analizados y consiste en varios tipos de objeto (explicados en la [**tabla**](#object-type-explanations) a continuación).

Cada elemento del esquema debe tener:

* **Nombre**: Esto se usará como la clave del objeto en las instrucciones de análisis y será visible en los datos analizados.
* **Descripción** (opcional pero recomendado): Ayuda a mejorar la precisión del análisis.

### **Ajustes del esquema**

* **Reordenar elementos**: Arrastra y suelta elementos usando los puntos del lado izquierdo para cambiar su orden (solo se pueden mover elementos dentro del mismo nivel de anidación).
* **Editar elementos**: Haz clic en el icono de edición para modificar cualquier campo.
* **Eliminar elementos**: Puedes eliminar cualquier elemento en el nivel superior.
* **Añadir nuevos elementos**: Añade nuevos elementos al nivel superior.

Una vez que actualices el esquema, haz clic en el **"Refresh output"** botón para regenerar las instrucciones y previsualizar los datos analizados.

### Explicaciones de tipos de objeto

<table><thead><tr><th width="208">Tipo de objeto</th><th width="243">Descripción</th><th>Ejemplo de datos analizados</th></tr></thead><tbody><tr><td>Cadena</td><td>Una sola salida de texto</td><td><code>“title”: “Ejemplo de título de producto”</code></td></tr><tr><td>Número</td><td>Un solo número</td><td><code>“price”: 9.99</code></td></tr><tr><td>Array de cadenas</td><td>Una lista de salidas de texto</td><td><code>“products”: [“product 1”, “product 2”, “product 3”]</code></td></tr><tr><td>Array de números</td><td>Una lista de números</td><td><code>“pages”: [1, 2, 3]</code></td></tr><tr><td>Array de objetos</td><td>Una lista de objetos/elementos, cada uno con sus propios objetos dentro (<code>_items</code> bloque en las instrucciones de análisis)</td><td><p></p><pre class="language-json"><code class="lang-json">“related_items”: [
  {
    “title”: “product 1”,
    “price”: 9.99
  },
  {
    “title”: “product 2”,
    “price”: 15.99
  }
]
</code></pre></td></tr></tbody></table>

### Trabajar con un array de objetos

1. **Selecciona "Array of objects"**: Esta opción añade un objeto hijo y un botón.

<figure><img src="https://lh7-qw.googleusercontent.com/docsz/AD_4nXcnZ-xxFBAjZPzSJesa5bjbUj7wOQlGn7Ut4bxQzrRNbUmN0CkcfOZa23QRLma2vUsINNl6c5TOixopuBGdIk9iKFvWNpfpkF5s-zL9CKWxEEeJ40yZc6n2eqRsUw45HcWJjZikl4pERT-8-nF5Pno7kpQ?key=TW5rMlJ-s_BzFm7nRv1Dlw" alt=""><figcaption></figcaption></figure>

2. **Completar los nombres de los objetos**: Para guardar el elemento en el esquema, debes completar los nombres de los objetos padre e hijo. Una vez hecho, la marca de verificación se volverá verde.

<figure><img src="https://lh7-qw.googleusercontent.com/docsz/AD_4nXffrjzhyFW4oiVj6MHaRGp7ysfkC1cVR4viQEWM5FBE3vhElH-ZRL5B796G6cfK5dNMvLtXafioTUoQaG-3QQTuaPLcq4UcsmA524hNW_IMjvw6pUdY-CRAHaYvyMkctNX0pp9qmWrxoOR3sNAwqwc8OpVT?key=TW5rMlJ-s_BzFm7nRv1Dlw" alt=""><figcaption></figcaption></figure>

3. **Requisito del objeto hijo**: Un "Array of objects" debe tener al menos un hijo.

### Probar las instrucciones

De forma predeterminada, los datos analizados se basan en la primera URL proporcionada en **Paso 1**. También puedes proporcionar una URL diferente para probar las instrucciones de análisis:

<figure><img src="/files/53e59e97a09704c23fc79cb21671960542839798" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Las instrucciones se generan basándose en las URLs iniciales y no tienen en cuenta las URLs de prueba. Editar el prompt o las URLs restablecerá el esquema, lo que requerirá una regeneración completa.
{% endhint %}

#### **Paso 3: Copia/guarda las instrucciones e intégralas en trabajos de extracción**

Una vez que las instrucciones sean satisfactorias:

* Use el **"Copy"** botón para copiar las instrucciones y pegarlas en el código de tu scraper.
* Alternativamente, guarda las instrucciones en tu sesión de Web Scraper API Playground, ajusta otros parámetros de la solicitud, prueba y luego copia el código completo de la solicitud en tu lenguaje de programación preferido.

<figure><img src="/files/515433eccfbaa5da24fe1f30a2ea20659d5e438a" alt=""><figcaption></figcaption></figure>

### Ejemplo

#### URL

```
https://sandbox.oxylabs.io/products/1
```

#### Prompt

{% code overflow="wrap" %}

```
Quiero analizar una página de producto. Los datos analizados deben incluir los siguientes campos:

- product_title: un campo de texto que contiene el título del producto
- price: un campo numérico que contiene el precio del producto
- related_products: una lista que contiene los títulos de productos relacionados que se muestran debajo de la información principal del producto
```

{% endcode %}

#### Esquema de análisis

<table><thead><tr><th width="214">Tipo de objeto</th><th width="209">Nombre*</th><th>Descripción</th></tr></thead><tbody><tr><td>Cadena</td><td>product_title</td><td>Título del producto</td></tr><tr><td>Número</td><td>price</td><td>Precio del producto</td></tr><tr><td>Array de cadenas</td><td>related_products</td><td>Títulos de productos relacionados debajo de la información principal del producto</td></tr></tbody></table>

#### Instrucciones de análisis

```json
{
    "product_title": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [
                    "//h2[@class=\"title css-1k75zwy e1pl6npa11\"]/text()",
                    "//div[@class=\"product-info-wrapper css-m2w3q2 emlf3670\"]/h2/text()",
                    "//div[@id=\"__next\"]/main/div/div/div/div[2]/div[1]/div[2]/div[2]/h2/text()"
                ]
            },
            {
                "_fn": "regex_search",
                "_args": [
                    "^\\s*(.[\\s\\S]*?)\\s*$",
                    1
                ]
            }
        ]
    },
    "price": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [
                    "//div[@class=\"price css-o7uf8d e1pl6npa6\"]/text()",
                    "//div[@class=\"product-info-wrapper css-m2w3q2 emlf3670\"]/div[4]/text()",
                    "//div[@id=\"__next\"]/main/div/div/div/div[2]/div[1]/div[2]/div[2]/div[4]/text()"
                ]
            },
            {
                "_fn": "amount_from_string"
            }
        ]
    },
    "related_products": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [
                    "//div/div[@class=\"product-card css-e8at8d eag3qlw10\"]/a[1]/h4/text()",
                    "//div[@id=\"__next\"]/main/div/div/div/div[2]/div[2]/div/a[1]/h4/text()",
                    "//div[@class=\"related-products css-1rinft1 emlf3670\"]/div/a[1]/h4/text()",
                    "//html[@lang=\"en\"]/body/div/main/div/div/div/div[2]/div[2]/div/a[1]/h4/text()",
                    "//div/div[@class=\"product-card css-e8at8d eag3qlw10\"]//h4[@class=\"title css-7u5e79 eag3qlw7\"]/text()",
                    "//div[@id=\"__next\"]/main/div/div/div/div[2]/div[2]/div//h4[@class=\"title css-7u5e79 eag3qlw7\"]/text()",
                    "//div[@class=\"related-products css-1rinft1 emlf3670\"]/div//h4[@class=\"title css-7u5e79 eag3qlw7\"]/text()",
                    "//div/div[@class=\"product-card css-e8at8d eag3qlw10\"]//a[@class=\"card-header css-o171kl eag3qlw2\"]/h4/text()",
                    "//html[@lang=\"en\"]/body/div/main/div/div/div/div[2]/div[2]/div//h4[@class=\"title css-7u5e79 eag3qlw7\"]/text()",
                    "//div[@id=\"__next\"]/main/div/div/div/div[2]/div[2]/div//a[@class=\"card-header css-o171kl eag3qlw2\"]/h4/text()",
                    "//div[@class=\"related-products css-1rinft1 emlf3670\"]/div//a[@class=\"card-header css-o171kl eag3qlw2\"]/h4/text()",
                    "//html[@lang=\"en\"]/body/div/main/div/div/div/div[2]/div[2]/div//a[@class=\"card-header css-o171kl eag3qlw2\"]/h4/text()"
                ]
            },
            {
                "_fn": "regex_search",
                "_args": [
                    "^\\s*(.[\\s\\S]*?)\\s*$",
                    1
                ]
            }
        ]
    }
}
```

#### Datos analizados

```json
{
    "price": 91.99,
    "product_title": "The Legend of Zelda: Ocarina of Time",
    "related_products": [
        "The Legend of Zelda: Majora's Mask",
        "Indiana Jones and the Infernal Machine"
    ],
    "parse_status_code": 12000
}
```

### Generación de instrucciones de análisis mediante una API

Si quieres generar un gran número de conjuntos diferentes de instrucciones de análisis para cubrir la variedad de sitios web con los que trabajas, puedes crear instrucciones de análisis mediante una API; consulta [API generadora de instrucciones de análisis](/products/es/web-scraper-api/features/custom-parser/generating-parsing-instructions-via-api.md) para ver cómo se hace.

## Generador de instrucciones de navegador

Puedes usar OxyCopilot para crear scripts complejos de interacción con páginas sin analizar la estructura del sitio ni escribir manualmente la configuración para tus [Instrucciones del navegador](/products/es/web-scraper-api/features/js-rendering-and-browser-control.md).

### Cómo funciona

#### **Paso 1: Proporciona una URL y un prompt**

* **URL:** Proporciona una sola URL para generar instrucciones de navegador. OxyCopilot utiliza el HTML de la URL proporcionada para determinar cómo programar las interacciones de la página web que necesitas.&#x20;
* **Prompt:** El prompt es crucial para construir las instrucciones del navegador. Indica claramente qué acciones te gustaría que se realizaran en la página web una vez abierta (por ejemplo, "Desplázate hasta la parte inferior, espera a que cargue el botón 'next page', haz clic en el botón 'next page'").

<figure><img src="/files/86ada09c692fe3768555e5aec43a683c0f137721" alt=""><figcaption></figcaption></figure>

#### **Paso 2 \[Opcional]: Ajustar las instrucciones del navegador**

Este paso te permite afinar la secuencia de instrucciones del navegador para adaptarla mejor a tus necesidades o solucionar cualquier problema.

#### **Resumen de instrucciones del navegador**

<figure><img src="/files/56602eb72264dc06589a7220f7cadb9f0b4f590e" alt=""><figcaption></figcaption></figure>

Una vez que OxyCopilot termine de procesar tu entrada, mostrará la secuencia de instrucciones del navegador que ha creado.

Puedes ajustar la secuencia editando, añadiendo o eliminando pasos.

#### **Paso 3: Copia/guarda las instrucciones e intégralas en trabajos de extracción**

Una vez que las instrucciones sean satisfactorias, puedes guardarlas en tu sesión de Web Scraper API Playground, ajustar otros parámetros de la solicitud, probar y luego copiar el código completo de la solicitud en tu lenguaje de programación preferido.

<figure><img src="/files/7005931aa32d1e1fb6b3d118556c686abb14100c" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Agradecemos tus comentarios y sugerencias de mejora. No dudes en contactarnos en <support@oxylabs.io> o conéctate con nuestro soporte de chat en vivo 24/7.
{% endhint %}


---

# Agent Instructions: 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:

```
GET https://developers.oxylabs.io/products/es/web-scraper-api/web-scraper-api-playground/oxycopilot.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
