# OxyCopilot

**OxyCopilot** es una función gratuita [**Web Scraper API** ](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api)función que facilita la incorporación y ayuda a los usuarios a encontrar soluciones efectivas para casos de uso complejos, todo sin necesidad de conocimientos de programación. OxyCopilot incluye actualmente tres funciones separadas:

* **Constructor de scrapers**
* [**Analizador personalizado**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/features/custom-parser) **constructor**
* **Constructor de instrucciones del navegador**

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

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

## Constructor de scrapers

OxyCopilot te ayuda a configurar un scraper (y a formar la carga útil de la petición) para la Web Scraper API sin necesidad de entender la documentación o la lógica de los campos.

### Cómo funciona

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

* **URL:** Proporciona la URL que deseas extraer.
* **Prompt:** Describe tus requisitos (p. ej., localización, renderizado JS, etc.).

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2F8us2o21uKCH3bWvBzsuD%2FScreenshot%202024-09-24%20at%2016.19.08.png?alt=media&#x26;token=5e596058-5b7a-4b50-8066-6a1a753f51b2" alt="" width="563"><figcaption></figcaption></figure>

**Paso 2: Analizar**

Tienes tres opciones para manejar el análisis:

1. **Analizador personalizado**: Selecciona "Agregar instrucciones de análisis" para crear tu propia lógica de análisis usando el [**Constructor de Parser personalizado**](#custom-parser-builder).
2. **Parser dedicado**: Si la URL proviene de un sitio web para el que ofrecemos un parser dedicado y quieres usarlo, selecciona "Continuar con Parser dedicado".
3. **Sin análisis**: Elige continuar sin análisis si no se necesitan 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 Parser dedicado" y desactiva el parámetro parse en la configuración del playground. Evita usar el botón de salir, ya que no guardará los parámetros prellenados.
{% endhint %}

<div><figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2Fm5u1SlidrTSQEilFuIau%2FScreenshot%202024-09-24%20at%2016.20.09.png?alt=media&#x26;token=18797e40-0e87-4cbf-8c85-7858e6a04ae6" alt="" width="375"><figcaption><p>Si no tenemos un parser dedicado</p></figcaption></figure> <figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FqpGMYN6v7I3qDSLv8U7e%2FScreenshot%202024-09-24%20at%2016.19.36.png?alt=media&#x26;token=c20a3576-aa02-4e02-947f-d59a89059f6e" alt="" width="375"><figcaption><p>Si tenemos un parser dedicado</p></figcaption></figure></div>

#### **Paso 3: Revisa la petición**

Según tu prompt, OxyCopilot rellenará previamente los parámetros necesarios en el Web Scraper API Playground. Verás el código de petición 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 petición y copia**

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

### Ejemplo

#### URL

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

#### Prompt

{% code overflow="wrap" %}

```
Extrae la página de búsqueda de Amazon desde la URL proporcionada y localiza los resultados a Polonia.
```

{% endcode %}

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

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

#### Códigos de petición generados por IA

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FyIuCJsCNXCjX37tb7LkI%2FScreenshot%202024-09-24%20at%2016.44.00.png?alt=media&#x26;token=707d951c-7443-4937-beae-a6624ce67780" alt=""><figcaption></figcaption></figure>

## Constructor de Parser personalizado

Aprovecha la [**Analizador personalizado**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/features/custom-parser) función con OxyCopilot para construir un parser sin necesidad de escribir código ni analizar manualmente las estructuras del sitio web.

### Cómo funciona

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

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

{% hint style="info" %}
Cuantas más URL 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 URL adicionales pueden aumentar el tiempo de espera para los 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 deben ser analizados.

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FenZwnLUhIiYFHIKwD4ix%2FScreenshot%202024-09-24%20at%2017.57.15.png?alt=media&#x26;token=eca0603b-1451-40d0-b0c1-32c19f5b6644" alt=""><figcaption></figcaption></figure>

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

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

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

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FaUeqARjA3AyoIAqGXppw%2FScreenshot%202024-09-24%20at%2017.59.27.png?alt=media&#x26;token=9274f830-c944-423f-9995-eb1f882f1e47" alt=""><figcaption></figcaption></figure>

Esta tabla visualiza la entrada usada por la IA para generar las instrucciones de análisis. El esquema define qué campos deben analizarse y consiste en varios tipos de objetos (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 los elementos usando los puntos en el 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 editar para modificar cualquier campo.
* **Eliminar elementos**: Puedes eliminar cualquier elemento en el nivel padre.
* **Agregar nuevos elementos**: Añade nuevos elementos al nivel padre.

Una vez que actualices el esquema, haz clic en el **"Actualizar salida"** 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>String</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”: [“producto 1”, “producto 2”, “producto 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”: “producto 1”,
    “price”: 9.99
  },
  {
    “title”: “producto 2”,
    “price”: 15.99
  }
]
</code></pre></td></tr></tbody></table>

### Trabajando con array de objetos

1. **Selecciona "Array de objetos"**: 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. **Rellena nombres de objetos**: Para guardar el elemento en el esquema, debes completar los nombres tanto del objeto padre como del 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 de objeto hijo**: Un "Array de objetos" debe tener al menos un hijo.

### Probar las instrucciones

Por defecto, 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="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2Fj2thZaXqrk6EctGnn6BB%2FScreenshot%202024-09-24%20at%2018.14.45.png?alt=media&#x26;token=cc59a24b-4cb8-4bb8-a44b-083b5e6c58ca" alt=""><figcaption></figcaption></figure>

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

#### **Paso 3: Copiar/Guardar instrucciones e integrar en trabajos de scraping**

Una vez que las instrucciones sean satisfactorias:

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

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FEXxaaJchNqJxygtZGtNr%2FScreenshot%202024-09-24%20at%2018.17.04.png?alt=media&#x26;token=42f6a232-635e-481f-b231-af57c70b93ca" 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>String</td><td>product_title</td><td>Título del producto</td></tr><tr><td>Número</td><td>precio</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
}
```

### Generando instrucciones de análisis vía API

Si quieres generar muchos conjuntos diferentes de instrucciones de análisis para cubrir la variedad de sitios web con los que trabajas, puedes crear instrucciones de análisis vía una API: consulta [API generadora de instrucciones de análisis](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/features/custom-parser/generating-parsing-instructions-via-api) para ver cómo se hace.

## Constructor de instrucciones del 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](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/features/js-rendering-and-browser-control/browser-instructions).

### Cómo funciona

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

* **URL:** Proporciona una sola URL para generar instrucciones del navegador. OxyCopilot utiliza el HTML de la URL proporcionada para determinar cómo secuenciar las interacciones con la página web que necesitas.&#x20;
* **Prompt:** El prompt es crucial para construir las instrucciones del navegador. Indica claramente qué acciones deseas que se realicen en la página web una vez abierta (p. ej., "Desplazarse hasta el final, esperar a que cargue el botón 'página siguiente', hacer clic en el botón 'página siguiente'").

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2F4oFl4O9MiTTU1WrMSmD0%2Fimage.png?alt=media&#x26;token=c3d4af49-f14a-4c90-9834-b73f37497132" alt=""><figcaption></figcaption></figure>

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

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

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

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2Fy3PXi97y667OluyZXb09%2Fimage.png?alt=media&#x26;token=864598a4-9b9f-40e6-a6a0-e3bc0976fd82" 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: Copiar/Guardar instrucciones e integrar en trabajos de scraping**

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

<figure><img src="https://338917265-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2F3dwrsRJAlICWwdXp0Ou0%2Fimage.png?alt=media&#x26;token=ab5b507d-c630-4864-95d1-1866738b0e90" alt=""><figcaption></figcaption></figure>

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