leer HTML a través de Powershell. Powershell / Sam’s Corner

Obtener información de páginas web a través de Powershell

PS1 En muchos casos, la información que necesitamos está disponible en una o varias páginas web, pero necesitamos procesar la misma información repetidamente. Para automatizar una tarea tan repetida a través de Powershell, necesitamos leer y analizar datos HTML. Por ejemplo, se publicó recientemente una pregunta en el foro de Sharepoint de Microsoft 2010:

Me encanta cómo SharePoint 2010 tiene la página: http://Server:880/_admin/PatchStatus.aspx. Sin embargo, al mirar esta página, cada servidor tiene aproximadamente 100 parches. Desplazarse por esta lista es difícil de ver si a uno de los servidores le falta un parche o tiene parches que otros servidores no tienen. ¿Hay alguna forma de exportar la información en el estado del parche?¿la página aspx en el Administrador central a una hoja de cálculo de Excel?

Para el propósito de este ejercicio, digamos que queremos obtener los títulos de los posts en esta URL https://superwidgets.wordpress.com/category/sql

Primero, leamos en el código HTML de esta página:

HTML2

Ahora, vamos a canalizarlo a Get-Member para ver qué tipo de objeto tenemos y sus métodos y propiedades disponibles:

 HTML3

Después de explorar diferentes propiedades del objeto HTML HTML que tenemos, y con un poco de conocimiento de HTML de fondo, puede ver que la información que estamos buscando está en el cuerpo HTML.

Usando la misma técnica anterior, podemos explorar más propiedades del objeto HTML como «ParsedHTML»

$HTML.ParsedHtml / Get-Member

Esto muestra que es un objeto HTMLDocumentClass con toneladas de eventos, métodos y propiedades:

 HTML7

Lista parcial de eventos, métodos y propiedades de objetos HTMLDocumentClass

Lo que nos resulta útil aquí son los siguientes 3 métodos:

getElementById
getElementsByName
getElementsByTagName

Ahora que sabemos cómo extraer la información que necesitamos de una página web, veamos los detalles de la página web en cuestión https://superwidgets.wordpress.com/category/sql. Ábralo en IE, por ejemplo, presione F12 para abrir el explorador DOM en la parte inferior, expanda las etiquetas HTML y mueva el mouse sobre las etiquetas una por una. Observe que el panel superior de IE cambia el color de fondo del elemento sobre el que está moviendo el ratón. Esto nos da una indicación visual de qué elemento en el código HTML representa qué texto o área de una página HTML.

 HTML6

Puede ver que los títulos de los artículos que nos interesan son los que comienzan con

<clase h2 = «título de entrada»>

Ahora podemos escribir las siguientes líneas de código de script de Powershell para completar la tarea:

 HTML8

# Script para mostrar títulos de publicaciones en la categoría SQL del blog Superwidgets
# Sam Boutros-08/10/2014
UR URI = «https://superwidgets.wordpress.com/category/sql/ «
$HTML = Invoke-WebRequest-Uri UR URI
(HTML HTML.ParsedHtml.getElementsByTagName(‘h2’) | Donde{ $_.className-eq ‘entry-title’ } ).innerText

En la línea 5 elegimos elementos HTML por la etiqueta «H2», filtramos en className = «entry-title» y seleccionamos la propiedad innertext.

La salida se ve así:

HTML9

que son exactamente los títulos de los artículos que nos propusimos obtener.

Esta información se puede procesar, registrar, almacenar o volver a empaquetar en otros informes HTML, CSV u otros..

Deja una respuesta

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