> 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/writing-instructions-manually/list-of-functions/function-examples.md).

# Ejemplos de funciones de análisis

Ejemplos prácticos de funciones de Custom Parser para procesamiento de HTML, manipulación de cadenas, operaciones matemáticas y tareas comunes de análisis.

## Procesamiento de HTML

### `element_text`

#### HTML de ejemplo

```html
<!DOCTYPE html>
<html>
<body>
    <div id="product">
        <div id="product-description">Este es un buen producto</div>
        <div id="product-price">    12  3


        </div>
    </div>
</body>
</html>
```

**Extraer texto de un elemento HTML y eliminar espacios en blanco**

```json
{
    "price": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [".//*[@id='product-price']"]
            },
            {
                "_fn": "element_text"
            }
        ]
    }
}
```

```json
{
    "price": "12  3"
}
```

**Dado un valor de cadena como entrada, no hacer nada**

```json
{
    "price": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [".//*[@id='product-price']/text()"]
            },
            {
                "_fn": "element_text"
            }
        ]
    }
}
```

```json
{
    "price": "    12  3\n\n\n        "
}
```

### `xpath`

#### HTML de ejemplo

```html
<body>
    <div class="product" id="socks">
        <div class="title">Calcetines</div>
        <div class="price">123.12</div>
        <div class="description">
            <ul>
                <li class="description-item">Muy</li>
                <li class="description-item">Bonito</li>
                <li class="description-item">Calcetines</li>
            </ul>
        </div>
    </div>
</body>
```

**Obtener todos los elementos de descripción**

```json
{
    "description_items": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": ["//li[@class='description-item']/text()"]
            }
        ]
    }
}
```

```json
{
    "description_items": ["Muy", "Bonito", "Calcetines"]
}
```

**Obtener el primer elemento de descripción**

```json
{
    "first_description_item": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": ["(//li[@class='description-item'])[1]/text()"]
            }
        ]
    }
}
```

```json
{
    "first_description_item": [
        "Muy"
    ]
}
```

**Verificar si existe el elemento de la sección de descripción**

```json
{
    "description_section_exists": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": ["boolean(//div[@class='description'])"]
            }
        ]
    }
}
```

```json
{
    "description_section_exists": true
}
```

**Obtener el precio como número**

```json
{
    "price": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": ["number(//div[@class='price'])"]
            }
        ]
    }
}
```

```json
{
    "description_section_exists": 123.12
}
```

**Múltiples expresiones a las que recurrir en caso de que falle la expresión anterior**

```json
{
    "price": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [
                    "//div[@class='product-price']/text()", <--- esto no encuentra nada
                    "//div[@class='price']/text()" <--- esto encuentra el precio objetivo
                ]
            }
        ]
    }
}
```

```json
{
    "price": [
        "123.12"
    ]
}
```

**XPath `|` operador para hacer coincidir múltiples expresiones**

```json
{
    "price_and_title": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": ["//div[@class='price']/text() | //div[@class='title']/text()"]
            }
        ]
    }
}
```

```json
{
    "price_and_title": [
        "Calcetines",
        "123.12"
    ]
}
```

### `xpath_one`

#### HTML de ejemplo

```html
<body>
    <div class="product" id="socks">
        <div class="title">Calcetines</div>
        <div class="price">123.12</div>
        <div class="description">
            <ul>
                <li class="description-item">Muy</li>
                <li class="description-item">Bonito</li>
                <li class="description-item">Calcetines</li>
            </ul>
        </div>
    </div>
</body>
```

**Devuelve la primera coincidencia**

```json
{
    "first_description_item": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [".//li/text()"]
            }
        ]
    }
}
```

```json
{
    "first_description_item": "Muy"
}
```

**Usando funciones XSLT**

```json
{
    "price": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": ["number(.//div[@class='price'])"]
            }
        ]
    }
}
```

```json
{
    "price": 123.12
}
```

## Manipulación de cadenas

### `amount_from_string`

#### HTML de ejemplo

```html
<body>
    <div class="product" id="socks">
        <div class="title">Calcetines</div>
        <div class="price">El precio es: 123.12 pesos</div>
    </div>
</body>
```

**Extraer cantidad de una cadena**

```json
{
    "price": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [".//div[@class='price']/text()"]
            },
            {
                "_fn": "amount_from_string"
            }
        ]
    }
}
```

```json
{
    "price": 123.12
}
```

### `amount_range_from_string`

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="price">
            El precio es: 123.12 pesos;
            El precio es: 345.12 pesos;
            El precio es: 678.12 pesos
        </div>
    </div>
</body>
```

**Extraer todas las cantidades de una cadena**

```json
{
    "prices": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [".//div[@class='price']/text()"]
            },
            {
                "_fn": "amount_range_from_string"
            }
        ]
    }
}
```

```json
{    
    "prices": [
        123.12,
        345.12,
        678.12
    ]
}
```

### `join`

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="price">
            El precio es: 123.12 pesos;
        </div>
        <div class="price">
            El precio es: 345.12 pesos;
        </div>
        <div class="price">
            El precio es: 678.12 pesos
        </div>
    </div>
</body>
```

**Unir un array de cadenas en una sola cadena**

```json
{
    "price_variants": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [".//div[@class='price']"]
            },
            {  // Si llamamos a normalize-space() en la primera función de la canalización, 
               // devolverá solo el primer valor.
                "_fn": "xpath",
                "_args": ["normalize-space(text())"]
            },  
            {
                "_fn": "join",
                "_args": ""
            }
        ]
    }
}
```

```json
{
    "price_variants": "El precio es: 123.12 pesos;El precio es: 345.12 pesos;El precio es: 678.12 pesos"
}
```

### `regex_find_all` <a href="#regex_find_all" id="regex_find_all"></a>

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="description">
            [una descripción]
            [dos descripciones]
            [tres descripciones]
        </div>
    </div>
</body>
```

**Encontrar todas las coincidencias entre dos caracteres**

```json
{
    "descriptions": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [".//div[@class='description']/text()"]
            },
            {
                "_fn": "regex_find_all",
                "_args": ["\\[(.*)\\]"]
            }
        ]
    }
}
```

```json
{
    "descriptions": [
        "una descripción",
        "dos descripciones",
        "tres descripciones"
    ]
}
```

### `regex_search` <a href="#regex_search" id="regex_search"></a>

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="description">
            [una descripción]
            [dos descripciones]
            [tres descripciones]
            {la que necesito}
        </div>
    </div>
</body>
```

**Devolver la descripción entre dos caracteres**

```json
{
    "description": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [".//div[@class='description']/text()"]
            },
            {
                "_fn": "regex_search",
                "_args": ["{(.*)}", 1]
            }
        ]
    }
}
```

```json
{
    "description": "la que necesito"
}
```

### `regex_substring`

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="description">
            * una descripción
            * dos descripciones
            * tres descripciones
            * {esta que me gustaría reemplazar}
        </div>
    </div>
</body>
```

**Reemplazar una parte del texto con el valor especificado**

```json
{
    "descriptions": {
        "_fns": [
            {
                "_fn": "xpath_one",
                "_args": [".//div[@class='description']/text()"]
            },
            {
                "_fn": "regex_substring",
                "_args": ["{this one i would like to get replaced}", "four description"]
            },
            {
                "_fn": "regex_find_all",
                "_args": ["\\*\\s(.*)\n"]
            }
        ]
    }
}
```

```json
{
    "descriptions": [
        "una descripción",
        "dos descripciones",
        "tres descripciones",
        "cuatro descripciones"
    ]
}
```

## Funciones comunes

### `convert_to_*`

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="price">123</div>
        <div class="price">124</div>
        <div class="price">456</div>
        <div class="price">421</div>
        <div class="price">100</div>
    </div>
</body>
```

**Obtener el conteo de variantes de precio**

```json
{
    "price_variants": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [".//div[@class='price']"]
            },
            {
                "_fn": "length"
            }
        ]
    }
}
```

```json
{
    "price_variants": 5
}
```

**Obtener el conteo de variantes de precio en un array multidimensional**

HTML de ejemplo:

```html
<body>
    <div class="product">
        <property class="colors">
            <option class="color">Rojo</option>
            <option class="color">Verde</option>
            <option class="color">Azul</option>
        </property>
        <property class="sizes">
            <option class="size">S</option>
            <option class="size">M</option>
            <option class="size">L</option>
            <option class="size">XL</option>
        </property>
    </div>
</body>
```

```json
{
    "number_of_variants": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [".//property"]
            },
            {
                "_fn": "xpath",
                "_args": [".//option"]
            },
            {
                "_fn": "length"
            }
        ]
    }
}
```

```json
{
    "number_of_variants": [
        3,
        3
    ]
}
```

### `select_nth`

#### HTML de ejemplo

```html
<body>
    <div class="product" id="socks">
        <div class="title">Calcetines</div>
        <div class="price">123.12</div>
        <div class="description">
            <ul>
                <li class="description-item">Muy</li>
                <li class="description-item">Bonito</li>
                <li class="description-item">Calcetines</li>
            </ul>
        </div>
    </div>
</body>
```

**Seleccionar el primer elemento de descripción del array**

```json
{
    "price_and_title": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": ["//li[@class='description-item']/text()"]
            },
            {
                "_fn": "select_nth",
                "_args": 0
            }
        ]
    }
}
```

```json
{
    "price_and_title": "Muy"
}
```

**Seleccionar el último elemento de descripción del array**

```json
{
    "description_item": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": ["//li[@class='description-item']/text()"]
            },
            {
                "_fn": "select_nth",
                "_args": -1
            }
        ]
    }
}
```

```json
{
    "description_item": "Calcetines"
}
```

## Funciones matemáticas

### `average`

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="price">123</div>
        <div class="price">124</div>
        <div class="price">456</div>
        <div class="price">421</div>
        <div class="price">100</div>
    </div>
</body>
```

**Encontrar el promedio de todos los precios listados**

```json
{
    "price_average": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [".//div[@class='price']"]
            },
            {
                "_fn": "xpath_one",
                "_args": ["number(text())"]
            },
            {
                "_fn": "average"
            }
        ]
    }
}
```

```json
{
    "price_average": 244.8
}
```

### `max`

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="price">123</div>
        <div class="price">124</div>
        <div class="price">456</div>
        <div class="price">421</div>
        <div class="price">100</div>
    </div>
</body>
```

**Encontrar el máximo de todos los precios listados**

```json
{
    "price_max": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [".//div[@class='price']"]
            },
            {
                "_fn": "xpath_one",
                "_args": ["number(text())"]
            },
            {
                "_fn": "max"
            }
        ]
    }
}
```

```json
{
    "price_max": 456.0
}
```

### `min`

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <div class="price">123</div>
        <div class="price">124</div>
        <div class="price">456</div>
        <div class="price">421</div>
        <div class="price">100</div>
    </div>
</body>
```

**Encontrar el promedio de todos los precios listados**

```json
{
    "price_min": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [".//div[@class='price']"]
            },
            {
                "_fn": "xpath_one",
                "_args": ["number(text())"]
            },
            {
                "_fn": "min"
            }
        ]
    }
}
```

```json
{
    "price_min": 100.0
}
```

### `product`

#### HTML de ejemplo

```html
<body>
    <div class="product">
        <property class="colors">
            <option class="color">Rojo</option>
            <option class="color">Verde</option>
            <option class="color">Azul</option>
        </property>
        <property class="sizes">
            <option class="size">S</option>
            <option class="size">M</option>
            <option class="size">L</option>
            <option class="size">XL</option>
        </property>
    </div>
</body>
```

**Obtener el conteo de diferentes variantes de producto**

```json
{
    "number_of_variants": {
        "_fns": [
            {
                "_fn": "xpath",
                "_args": [".//property"]
            },
            {
                "_fn": "xpath",
                "_args": [".//option"]
            },
            {
                "_fn": "length"
            },
            {
                "_fn": "product"
            }
        ]
    }
}
```

```json
{
    "number_of_variants": 12
}
```


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developers.oxylabs.io/products/es/web-scraper-api/features/custom-parser/writing-instructions-manually/list-of-functions/function-examples.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
