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:
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:
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.
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”.
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”.
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.
para hacer la que la Query utilice ese parámetro, hacemos click derecho sobre la Query y seleccionamos “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.
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”.
Le damos el nombre que queramos y creamos.
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.
Damos nombre a la nueva columna que se agregara como resultado de aplicar la función customizada a nuestra tabla de URLs y Aplicamos.
y Finalmente tenemos la información de todas las URLs de nuestra tabla, esto tardará un poco.
¡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
1 comment
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?