Web Scraping con Power BI. Caso Práctico: «Obtener datos de distintas URLs desde un mismo dominio»

 In Power Bi

Este post nace por la inquitud de mi compañero Miguel Ángel Rocamora y mía ya que nos hemos tenido que poner manos a la obra con la herramienta de Power BI para “Obtener datos de una Web” y después de haber trabajado sobre esta materia, enseguida me pareció una idea muy interesante para compartir con la comunidad de Power BI university y  escribir sobre el Web Scraping y abordarlo tanto desde el punto de vista tecnológico como jurídico.

Podríamos definir el Web Scraping como la técnica para la extracción de datos de una web. En primer lugar, he de decir que siempre me ha fascinado la posibilidad de realizar web scraping, en mi trabajo suelo realizar análisis financieros de competencia a través de las cuentas anuales depositadas en el registro mercantil y hace mucho tiempo que quería completar estos estudios de benchmarking con el análisis de precios de los principales competidores. Esta es una de las utilidades que le veo al Web Scraping, aunque también se me ocurren aplicaciones en el campo de la reputación on line, optimización de precios y otros muchos.

Me parece una potente herramienta que, en cuanto al caso práctico a tratar, me ha brindado la oportunidad de trabajar con distintas funcionalidades avanzadas de Power BI. Entre las funcionalidades a resaltar podría mencionar “manejo de parámetros, creación de funciones personalizadas, invocar funciones y web scraping”.

En este artículo me centraré en la resolución de un caso concreto “OBTENER DATOS DE DISTINTAS URL QUE FORMAN PARTE DE UN MISMO DOMINIO”, si bien he añadido una “Guía de Web Scraping con Power BI”(HAZ CLIC AQUI:GUÍA OBTENER DATOS WEB )para que los lectores que todavía no hayan realizado las operaciones básicas de extracción de datos dispongan de un manual con los conceptos más básicos.

CASO PRÁCTICO. EXTRAER DATOS SOBRE VENTAS, NOMBRE Y CIF DE 3 EMPRESAS DE UNA WEB EN LA QUE SE PUBLICAN RANKINGS DE EMPRESAS.

Durante esta semana estábamos buscando datos sobre posibles clientes para nuestro proyecto de Consultoría de Control de Gestión apoyado en la Transformación Digital, y queríamos confeccionar una base de datos con empresas de la Comunidad Valenciana que tuvieran un determinado volumen de ingresos. Buscando en internet encontramos una web que disponía de esa información, pero con la problemática de que los datos que estábamos buscando se encontraban en distintas URL dentro de esa web en concreto.

La siguiente pregunta nos vino a la cabeza, ¿podremos usar un parámetro en Power BI cuyo Valor sea una Consulta o una Lista que contenga dichas URL para poder extraer de forma automatizada los valores que estamos buscando?  La respuesta obviamente fue afirmativa y eso es lo que voy a pasar a contaros.

Para afrontar dicho caso práctico tuvimos que realizar las siguientes tareas:

  • Generar una Lista con las URL a analizar
  • Crear un Parámetro usando valores sugeridos.
  • Crear la función con las transformaciones necesarias.
  • Invocar la función para todas las URL a la vez

1.     Generar una Lista con las URL a analizar

 

Existen múltiples formas de conocer las URL que conforman un sitio web, pero esto no es materia de este artículo. Para simplificar la explicación de este caso, sencillamente vamos a confeccionar una tabla desde el botón de “Especificar Datos” donde pegaremos las 3 url que vamos a analizar. En mi caso he llamado a la columna “url” y la tabla “TablaURL”.

Ahora procedemos a editar dicha consulta y en la pestaña Transformar buscamos el botón de “Convertir en Lista”. Convertir la tabla en lista será necesario para poder agregar el parámetro en el paso siguiente.

Una vez realizado este paso vemos que se despliega un nuevo menú llamado “Herramientas de Lista” ·

 

2.     Crear un Parámetro

 

La creación de parámetros puede cumplir muchas funciones en Power BI, en nuestro caso lo que perseguimos es generar un parámetro que se introducirá como argumento de la función que crearemos en el siguiente paso.

Siguiendo por donde estábamos, una vez disponemos de la lista creamos un parámetro nuevo desde administrar parámetros.

Lo he llamado “ParametroURL”

Para nuestro ejemplo  podemos usar dos opciones para generar este parámetro:

  1. Lista, de esta manera debemos escribir o copiar la lista de URL y por lo tanto dicha lista será estática.
  2. Consulta, de esta manera accederemos a los datos de forma dinámica, esto es, si la consulta que contiene la lista varía al actualizarse, entonces de forma dinámica variará la Tabla Final.

Para el ejemplo lo vamos a crear Tipo “Texto” (a estos efectos el formato de las url), valores sugeridos “Consulta”, consulta “TablaURL” (la que hemos creado con anterioridad) y como valor actual una de las URL con las que estamos trabajando.

Ya tenemos nuestro parámetro listo para usar

 

3.     Crear la función

 

La idea es crear una consulta cuyo origen será una de las URL sobre las que estamos trabajando y posteriormente realizar las transformaciones necesarias hasta que nuestra consulta tenga el formato apropiado. En mi caso tuve que realizar alguna transformación sobre la cifra de ventas. Cuando ya tenemos todos los pasos creados en nuestra Query es el momento de crear una función que usará “ParametroURL” como variable con la finalidad de aplicar todas las transformaciones realizadas en nuestro parámetro ejemplo a cada una de las URL que tenemos en nuestra consulta.

 

Para ello seleccionamos el botón “Nuevo Origen” y buscamos “Web”

 

Nos aparece la siguiente ventana y debemos hacer clic en “Agregar Tabla mediante ejemplos”

 

Por simplificar vamos a extraer solo los datos de {nombre, cif, ventas}, aunque nos reconoce muchísimos más, los cuales podrían formar una tabla en función de nuestras necesidades.

 

Cargamos esa consulta al Editor de Consultas

 

Y realizamos las transformaciones necesarias para convertir las ventas en número o moneda.

Estas transformaciones son las que pretendemos automatizar mediante una función. Hasta este momento en el editor avanzado tenemos las trasformaciones realizadas sobre el origen “url consignada”.

La idea es que desde el propio editor avanzado sustituir el origen “(http://ranking-empresas.lasprovincias.es/comunidad-valenciana/empresas-valencia/valencia/anecoop-sc) por nuestro “ParametroURL” creado en el paso anterior, que podemos comprobar que se encuentra a continuación del “let” en la siguiente línea de código.

 

Ahora nos toca convertir la consulta en función

 

Como podemos comprobar se nos ha generado una función cuyo icono es “fx” que está a nuestra disposición para poder ser invocada.

De esta manera estamos consiguiendo que la función sea dinámica y nos traiga todos los valores del parámetro, hemos puesto 3 url pero podrían haber sido muchas más. Podemos hacer la comprobación añadiendo los datos de otra de las url de la consulta por ejemplo la de Mercadona.

Esta función se conecta a la web y nos trae los datos de Mercadona

 

 

4.     Invocar la función para todas las URL a la vez

 

Ya tenemos todos los elementos necesarios para traernos los datos [función y parámetros], por lo que procedemos a invocar la función y que extraiga los datos de todas las url a la vez, en el ejemplo hemos usado 3 pero podrían haber sido muchas más.

Podemos duplicar la TablaURL la renombramos como TablaFinal y la convertimos a tabla

 

Una vez tenemos la tabla, en agregar columna “Invocar función personalizada”

Seleccionamos MiFuncion

Nos aparece un mensaje de que se requiere información sobre privacidad de los datos. En nuestro ejemplo estamos ante datos de carácter público por tratarse de un medio de comunicación. Más adelante voy a explicar de forma detallada las diferentes opciones que existen en este paso.

Una vez realizado esto, nos conectaremos a las URL indicadas y nos traeremos los datos indicados en la función y las respectivas transformaciones realizadas

 

Con lo que solo nos queda expandir “Table”

 

 

Y como resultado tendremos la tabla final con todos los datos que necesitábamos.

 

Hasta aquí el ejemplo de extracción de datos de diferentes url pertenecientes a un mismo dominio en el que hemos aplicado unas trasformaciones estandarizadas que luego hemos convertido en función.

 

 

Como segunda parte del artículo me gustaría explicar las implicaciones jurídicas que tiene este tipo de proyectos, ¿qué debemos tener en cuenta para realizar proyectos de Web Scraping?

Hablando un poco de mí, además de ser un apasionado de Power BI soy abogado ejerciente, y por ello me veo obligado a analizar la controvertida figura jurídica del “Web Scraping (Raspado Web u Obtener Datos de una Web)”. No quisiera profundizar mucho sobre el asunto, debido a que estamos en un blog tecnológico, pero sí hacer una breve mención a las obligaciones y deberes jurídicos que, en España, debemos tener en cuenta antes de realizar cualquier proyecto en el que se pretenda obtener datos de una web de terceros.

Para analizar las implicaciones jurídicas que conlleva la obtención de datos de una web debemos como mínimo acudir a la legislación española vigente sobre Protección de Datos de Carácter Personal y sobre Propiedad Intelectual.

En primer lugar, queremos analizar ¿debemos pedir consentimiento expreso para obtener datos de una web de terceros?

La respuesta a esta pregunta la encontramos en la
Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales y en el Real Decreto 1720/2007, de 21 de diciembre, por el que se aprueba el Reglamento de protección de datos de carácter personal.

Uno de los principios de la PROTECCIÓN DE DATOS es el del consentimiento: para tratar datos de carácter personales será necesario el consentimiento inequívoco del afectado, salvo que una Ley disponga otra cosa. Aquí aparece el primer concepto importante, ha de tratarse de datos relativos a personas físicas, de hecho, la ley excluye de su ámbito de aplicación a las personas jurídicas, así como a los empresarios individuales. En caso de que sean datos de personas físicas si podremos libremente extraer información si se trata de las enumeradas en el artículo 7 del mencionado Real Decreto

“Fuentes accesibles al público:

  1. A efectos del artículo 3, párrafo j) de la Ley Orgánica 15/1999, se entenderá que sólo tendrán el carácter de fuentes accesibles al público
  2. El censo promocional.
  3. Las guías de servicios de comunicaciones electrónicas.
  4. Las listas de personas pertenecientes a grupos de profesionales que contengan únicamente los datos de nombre, título, profesión, actividad, grado académico, dirección profesional e indicación de su pertenencia al grupo.
  5. Los diarios y boletines oficiales.
  6. Los medios de comunicación social.
  7. En todo caso, para que los supuestos enumerados en el apartado anterior puedan ser considerados fuentes accesibles al público, será preciso que su consulta pueda ser realizada por cualquier persona, no impedida por una norma limitativa, o sin más exigencia que, en su caso, el abono de una contraprestación”

 

A modo de ejemplo podremos extraer información de carácter personal de un periódico por tratarse de un medio de comunicación social (tal y como hemos realizado en el ejemplo), sin embargo, la Agencia Española de Protección de Datos (AEPD) no considera las páginas webs como un medio de comunicación social ni como cualquier otra fuente accesible de las mencionadas en dicho artículo 7. Como ejemplos de los cuales NO podríamos realizar el Web Scraping sin obtener consentimiento serían datos relativos a las personas físicas en una red social (Facebook, Instagram, etc).

De forma esquemática quiero resolver dicha cuestión:

Una vez analizados los posibles casos a tratar según la Protección de Datos, es el turno de analizar la extracción de datos desde el punto de vista de la Ley de Propiedad Intelectual. Los sistemas de comercio electrónico, los motores de búsqueda, los programas informáticos, el diseño de una web. el código fuente de una web, así como su contenido “imágenes, videos, textos, etc.” puede ser objeto de protección por derechos de autor.

Ante esta situación debemos hacernos la siguiente pregunta ¿se trata de contenido protegido el que quiero extraer?

Mi primera recomendación es acudir al Aviso Legal y/o Política de Privacidad que suele estar en el pie de página o footer de cualquier página corporativa y leer detenidamente si existe dicha protección y el autor lo comunica expresamente. En caso de realizar dicha extracción de datos comportaría una conducta antijurídica y por lo tanto podría ser sancionada. Sin embargo, también puede darse el caso de que el contenido de una página web o parte del mismo este protegido mediante la inscripción en el Registro de Propiedad Intelectual y no esté enunciado expresamente en la propia web. Para este caso recomiendo que verifiquemos la posible existencia de símbolos de registrado ®, Copyrigiht ©, TM, SM u otros símbolos equivalentes. Por último, también se pueden usar páginas como TinEye https://www.tineye.com/ donde puedes comprobar si las imágenes están libres de derechos de autor o no lo están.

Realizar todas estas comprobaciones será necesario antes de empezar cualquier proyecto de Web Scraping.

Nota: El contenido de este post no es más que mi opinión personal sobre la materia pudiendo existir otras que versen sobre lo mismo e incluso ser contradictorias.

 

Archivo: Guia Obtener datos de una web con PowerBI

Archivo Caso práctico en Power BI: Descargar Pbix

 

 

 

 

 

 

 

Manuel Ramón Ramón

Ceo www.iddeas.es

 

Recent Posts
Showing 2 comments
  • Ezequiel

    Hola, esta buenisimo el tutorial, logre hacerlo. Pero tengo un unico tema.
    Yo quiero hacer esto mismo pero que directamente me cargue TODAS LAS URLs.
    Que no tenga que elegirlas como parametros.
    Una especie de foreach por todas las url y que el contenido que extrajo de cada una las guarde en una tabla

  • jose

    Sirviría para recopilar datos de URL que tienen «desplegables» como es el caso de la pagina Pulso de Sabadell?

    https://estardondeestes.com/movi/es/pulso