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