En esta entrada se va a explicar paso a paso como poder extraer datos que tengamos disponibles en páginas web, también como podemos automatizar para que sea extensible a todas las páginas que tengan el mismo formato web.

Para conseguir ese “web scraping” con Power BI, haremos uso de las siguientes features:

  • Conector web.
  • Web By Example.
  • Custom Functions.
  • Parámetros.

El primer paso para extraer estos datos web es elegir una página web la cual será nuestra plantilla de extracción por así decirlo, en este caso utilizaré un Post del blog de SolidQ:

https://blogvisionarios.com/es/novedades/powerbi-bookmarks-para-que-sirven-y-como-puedo-utilizarlos/

Una vez hemos elegido nuestra página web plantilla, vamos al menú Get data y seleccionamos el conector web:

Get Data Menu
Get Data Menu

Una vez dentro, insertamos la página web y hacemos click en OK.

Esto nos abre el menú navigator dentro de este menú vamos a utilizar la primera feature “Web from Example”, para hacerlo seleccionamos add table using example:

Add Table Using Examples
Add Table Using Examples

Para acceder a la información de la página Web, solo tenemos que hacer click en las filas de las columnas y escribir el valor del contenido que se quiere extraer de la web, el intellisense nos hará sugerencias sobre qué contenido está disponible en la página web.

Automatizando Extracción información Web (Web Scraping) con Power BI!

Seleccionamos todas las columnas que queremos extraer de la página web y hacemos click en OK, ahora la nueva tabla con la selección de columnas la tendremos disponible desde el menú navigator.

Seleccionamos la opción editar para ir al menú de Power Query, y comenzar a hacer extensible esta consulta “Plantilla”.

Select The New Table
Select The New Table

 

Seleccionamos la Query, pulsamos f2 para renombrarla y poner el nombre que queramos, en mi caso se va a llamar “plantilla”, una vez hecho esto para poder convertir esta Query  en una consulta que pueda ser utilizada de forma genérica por otras tablas tenemos que utilizar un parámetro dentro de ella. Para añadir un parámetro hacemos click derecho debajo de la consulta y elegimos “New Parameter”.

Añadir Parámetro
Add Parameter

Configuramos el parámetro dándole un nombre, de tipo texto y el valor por defecto insertamos la url que utilizamos para generar la Query plantilla y hacemos click en OK.

Parameter Configuration
Parameter Configuration

para hacer la que la Query utilice ese parámetro, hacemos click derecho sobre la Query y seleccionamos “Advanced Editor“.

Advanced Editor
Advanced Editor

Esto nos mostrara el código M de la consulta, para hacer que utilice el parámetro seleccionamos la dirección de la página web, borramos y cambiamos por el nombre del parámetro en este caso URL.

Query M Code
Query M Code

 

Replacing With Url Parameter
Replacing With Url Parameter

El siguiente paso es utilizar la feature Custom function, que genera funciones reutilizables a partir de Querys, para esto solo tenemos que seleccionar la Query y elegir “Custom Function”.

Create Custom Function
Create Custom Function

Le damos el nombre que queramos y creamos.

Custom Function Creation
Custom Function Creation

El siguiente paso después tener nuestra función customizada lista, es tener el listado de URL las cuales vamos extraerles la información.

En mi caso tenía un excel con el listado de URL , pero este origen puede ser cualquiera.

Lo cargamos dentro de Power BI y finalmente solo tendremos que aplicar la función customizada al listado de URLs, esto se puede desde conseguir desde el menú invoke custom functions.

Invoke Custom Function
Invoke Custom Function

Damos nombre a la nueva columna que se agregara como resultado de aplicar la función customizada a nuestra tabla de URLs y Aplicamos.

Apply Custom Function
Apply Custom Function

y Finalmente tenemos la información de todas las URLs de nuestra tabla, esto tardará un poco.

Result
Result

 

¡Gracias por seguir esta entrada! Cualquier duda, ¡comentad!

 

¿Quieres estar actualizado de todas las novedades de Power BI? Apúntate a nuestros webinars mensuales aquí

 

Saludos

0 Shares:
1 comment
  1. Buen día,

    Estoy intentando extrar información de una lista de URL, estoy usando esta función

    let GetResults=(URL) =>

    let
    Source = Web.Page(Web.Contents(URL)),
    #”Filtered Rows” = Table.SelectRows(Source, each ([Source] = “Table”)),
    Data = #”Filtered Rows”{0}[Data],
    #”Changed Type” = Table.TransformColumnTypes(Data,{{“Column1”, type text}, {“Column2″, type text}}),
    #”Transposed Table” = Table.Transpose(#”Changed Type”),
    #”Promoted Headers” = Table.PromoteHeaders(#”Transposed Table”, [PromoteAllScalars=true]),
    #”Changed Type1″ = Table.TransformColumnTypes(#”Promoted Headers”,{{“Swift code”, type text}, {“Swift code (8 characters)”, type text}, {“Branch name”, type text}, {“Branch address”, type text}, {“Branch code”, type text}, {“Bank name”, type text}, {“City”, type text}, {“Country”, type text}})
    in
    #”Changed Type1″

    in GetResults

    Yo estoy filtrando ya que me aparece algo que no es una tabla, luego traspongo y por último pongo los headers

    el problema es que tengo casi 4000 links y se demora demasiado en el query uso esto

    let
    Source = Excel.CurrentWorkbook(){[Name=”URL_Others”]}[Content],
    #”Changed Type” = Table.TransformColumnTypes(Source,{{“URL”, type text}}),
    #”Added Custom” = Table.AddColumn(#”Changed Type”, “Custom”, each try Binary.Length(Binary.From(Web.Contents([URL]))) >0 otherwise false),
    #”Filtered Rows” = Table.SelectRows(#”Added Custom”, each ([Custom] = true)),
    #”Removed Columns” = Table.RemoveColumns(#”Filtered Rows”,{“Custom”}),
    #”Invoked Custom Function” = Table.AddColumn(#”Removed Columns”, “fGetWikiResults”, each fGetWikiResults([URL]))
    in
    #”Invoked Custom Function”

    en 1 hora solo me han cargado 52, hay alguna forma de optimar?

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

You May Also Like