Web scraping con Pentaho Data Integration

O como parsear el código html de una página web a través de Pentaho Data Integracion.

El video anterior es un ejemplo sobre recoger información de una página web de deportes sobre la que he llevado a practica lo que a continuación os relato, sin dejar de mencionar a la comunidad/foro de Pentaho en que me apoyo en todo momento en forma de respuestas y adjuntos.

Descargar ejemplo .ktr :  ExampleWS

Para empezar  necesitaremos descargarnos la librería de Java jsoup y ubicar el fichero .jar en el directorio lib de la ubicación del Pentaho Data Integration.

Tomaremos como referencia un fichero main.html que contiene un listado de productos en una tabla y con un enlace propio a cada producto donde se da más detalle del producto (product_01.html, producto_02.html, …product_0N.html)

La página web main.html contendría el siguiente código html:

 

El objeto es leer el codigo fuente html de esta página web y convertirlo a xml para así poder tratarlo como si de cualquier otro origen de datos se tratara.

Webscraping01

De tal forma que seguiremos los siguientes pasos:

  1. Pasamos el enlace (En este ej. he utilizado el Get more rows)
  2. Leemos en enlace con el Http Client
  3. Y es en el objeto Java Script Values donde importaremos la librería descargada jsoup y la utilizaremos para quedarnos con el fragmento de html que nos interesa (Este código lo obtuve del foro oficial de Pentaho)

Webscraping02

 

Recomiendo absolutamente leer la api de jsoup para poder recoger correctamente la información que deseemos en todo momento

4. En el objeto Get data from XML parametrizaremos la lectura y conversión a xml del string que le enviamos de los pasos previos. Para ello y

  • File: Indicamos la variable que contiene nuestro html del paso anterior
  • Content: Loop xPath (//tr)
  • Fields: Como si de un array se tratase definimos por el campo que queremos la información los campos pasándole la posición entre corchetes.

Webscraping03

 

En el caso de Producto lo distingo en ‘Result type‘ como ‘Single node‘  porque no quiero solo el valor, si no tambien el enlace href que contiene ese Producto.

Éste sería el resultado si hiciesemos una previsualización en este punto para 1 registro:

  • Producto: <td><a href=”http://www.pagina.com/productos/product_01.html”>Producto_01</a></td>
  • Descripción: Descripción de Product_01

5. En este punto, necesitamos tratar la cadena de texto del campo ‘Producto’ para guardar en dos campos diferentes el nombre del producto y el enlace que lo encesitaremos más adelante y para ello utilizaremos una expresión regular en el objeto Regex.

En el ejemplo que llevé yo a cabo necesité en más de una ocasión utilizar el objeto Replace in string para ir quitando código que no necesitaba y mediante expresiones regulares o utilizandolo el módulo de javascript no era capaz.

6.  En una segunda fase, utilizaremos esta información de productos que previamente hemos recogido junto a sus respectivos enlaces para navegar a través las páginas del detalle de los productos y recoger así la información que necesitemos utilizando un flujo de objetos similar al de este proceso.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *