Ejemplos de instrucciones de parsing
Consulta ejemplos prácticos de instrucciones de parsing para Custom Parser: manejar objetos anidados, listas, errores y arrays de arrays.
El siguiente fragmento HTML se analiza usando instrucciones de análisis de ejemplo en las secciones siguientes.
HTML de ejemplo
<body>
<div id="products">
<div class="product" id="shoes">
<div class="title">Shoes</div>
<div class="price">223.12</div>
<div class="description">
<ul>
<li class="description-item">Super</li>
</ul>
</div>
</div>
<div class="product" id="pants">
<div class="title">Pants</div>
<div class="price">60.12</div>
<div class="description">
<ul>
<li class="description-item">Amazing</li>
<li class="description-item">Quality</li>
</ul>
</div>
</div>
<div class="product" id="socks">
<div class="title">Socks</div>
<div class="price">123.12</div>
<div class="description">
<ul>
<li class="description-item">Very</li>
<li class="description-item">Nice</li>
<li class="description-item">Socks</li>
</ul>
</div>
</div>
</div>
</body>Mínimo indispensable
Ejemplo 1. Selección de elementos de descripción de shoes usando XPath.
El xpath la función encontrará un solo elemento y lo pondrá en una lista como una cadena:
El comportamiento exacto de la xpath función se describe aquí.
Instrucciones de análisis anidadas
Estás apuntando a esta parte del HTML de ejemplo:
Y te gustaría que el resultado analizado tuviera la siguiente estructura:
Las instrucciones de análisis se verían de la siguiente manera.
Ejemplo 2. Se utilizan instrucciones de análisis para analizar shoes información.
xpath_one funciona de forma similar a xpath, pero en lugar de devolver una lista de todas las coincidencias, devuelve el primer elemento que coincide.
En el ejemplo anterior, la shoes propiedad es la única propiedad definida en el ámbito de instrucciones más externo. La shoes propiedad contiene instrucciones de análisis anidadas.
El shoes el ámbito de instrucciones no tiene una canalización definida (_fns propiedad falta). Esto significa que las canalizaciones definidas en title, precio, y description ámbitos usarán el documento-en-análisis como entrada de la canalización.
En el Ejemplo 2, puedes ver una repetición de //div[@id='shoes'] en las expresiones XPath. La repetición puede evitarse definiendo una canalización en shoes ámbito:
Ejemplo 3. Definir una canalización en shoes instrucciones de ámbito para evitar la repetición de expresiones XPath.
Usando las instrucciones de análisis proporcionadas en el Ejemplo 3, Custom Parser hará:
Comenzar procesando
shoes._fnscanalización, que producirá como salida elshoeselemento HTML;Tomar
shoes._fnsla salida de la canalización y usarla como entrada para las canalizaciones definidas entitle,precio, ydescriptionámbitos;Procesar
title,precio, ydescriptionlas canalizaciones para producir los valores finales.
El resultado se verá igual que el resultado del Ejemplo 2:
La principal diferencia entre el Ejemplo 2 y el Ejemplo 3 es que en el Ejemplo 3, la canalización está definida en el shoes ámbito. Esta canalización adicional selecciona el elemento de shoes y lo pasa a canalizaciones adicionales encontradas más abajo en la jerarquía de instrucciones.
Lista de objetos anidados
El HTML de ejemplo se usa nuevamente como el documento-en-análisis.
Si quieres que tu resultado analizado se vea así:
Las instrucciones de análisis se verían de la siguiente manera:
Ejemplo 4. Analizar todos los productos encontrados en el documento HTML.
La estructura de la instrucción de análisis se parece a la del Ejemplo 3. Sin embargo, hay dos diferencias principales:
xpathse usa en lugar dexpath_oneinproducts._fnscanalización.products._fnsla canalización ahora producirá como salida una lista de todos los elementos que coincidan con la expresión XPath proporcionada (una lista de elementos product)._itemspropiedad reservada se usa para indicar que quieres formar una lista iterando a través de cada elemento de laproducts._fnssalida de la canalización y pasando/procesando cada elemento de la lista por separado por el ámbito de la canalización.
Si _items la propiedad reservada no se hubiera usado en las instrucciones de análisis del Ejemplo 4, el resultado analizado se vería así:
_items se usa para especificar que el Custom Parser debe pasar elementos de lista separados en lugar de la lista completa por las instrucciones de análisis.
Seleccionar el enésimo elemento de una lista
Esta sección demuestra la flexibilidad de las canalizaciones. El mismo problema puede abordarse de diferentes maneras.
Se pueden usar múltiples opciones para seleccionar el enésimo elemento de una lista de cualquier tipo de valores.
El HTML de ejemplo se usa de nuevo como ejemplo. Tienes múltiples opciones para seleccionar el 2.º producto.
Opción 1
Puedes utilizar el selector XPath [] y definir la selección en la expresión XPath.
Ejemplo 5. Seleccionar el 2.º precio usando el selector XPath []
Resultado:
Opción 2
También puedes usar la xpath función para encontrar todos los precios y encadenarla a la función select_nth, que selecciona el enésimo elemento de la lista extraída de precios.
Ejemplo 6. Seleccionar el 2.º valor usando la función `select_nth`.
Resultado:
Observa cómo la select_nth función devuelve un elemento de una lista mientras la xpath función devuelve una lista de elementos, incluso si se encuentra un solo elemento.
Opción 3
Puedes usar select_nth con cualquier tipo de lista, incluidas listas de elementos HTML:
Ejemplo 7. Seleccionando todos los elementos HTML de producto con class="product" ==> seleccionando el 2.º elemento de producto de la lista ==> extrayendo el texto del precio del elemento HTML de producto seleccionado.
Resultado:
Manejo de errores
Dado el siguiente fragmento HTML:
Y tratando de analizarlo con las siguientes instrucciones de análisis:
Custom Parser devolverá un resultado analizado donde precio y title se analizaron normalmente, pero el description no se pudo analizar debido a que la convert_to_float función falló al convertir string a float:
Por defecto, todos los errores se cuentan como advertencias y se colocan dentro de la _warnings lista. Si deseas ignorar los errores al analizar un campo, puedes suprimir las advertencias/errores con "_on_error": "suppress" parámetro:
Lo que entonces producirá el siguiente resultado:
Matriz de matrices
Custom Parser permite arreglos N-dimensionales en los resultados analizados. Como ejemplo, usemos el siguiente fragmento HTML:
Supongamos que quieres analizar el documento de modo que el resultado sea una matriz 2D 3x3 de enteros:
Para analizar el HTML en el JSON anterior, puedes usar las siguientes instrucciones de análisis:
Última actualización
¿Te fue útil?

