Используя PowerShell, можно очень просто парсить HTML-сайты, благодаря тому, что командлет Invoke-WebRequest сразу же формирует из содержимого web-документа массивы ссылок, скриптов, изображений и других элементов страницы.
Так, чтобы получить список ссылок на странице, достаточно выполнить простой скрипт:
$SiteAdress = "http://seo-praktika.com"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
$HttpContent.Links | Foreach {$_.href }
Список ссылок на все изображения:
$SiteAdress = "http://seo-praktika.com"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
$HttpContent.Images | Foreach {$_.src }
Также при помощи PowerShell можно скачать все изображения со страницы в заданную папку, сохранив их названия:
$Img = Invoke-WebRequest "http://seo-praktika.com"
$Img.Images
$images = $Img.Images | select src
$wc = New-Object System.Net.WebClient
$images | foreach { $wc.DownloadFile( $_.src, ("c:\temp\"+[io.path]::GetFileName($_.src) ) ) }
Однако необходимо учитывать, что сценарий способен скачивать только изображения, для которых на странице указан абсолютный путь (включающий название сайта). Если web-документ содержит изображения с относительными путями, возникнет ошибка: Исключение при вызове "DownloadFile" с "2" аргументами: "Не удалось найти часть пути…"
Также просто можно "выстаскивать" из HTML-документа значения различных элементов. Предположим, нам нужно получить тексты всех сообщений с определенной страницы форума, где все все посты находятся в элементе с классом postmsg. Тогда чтобы вывести все сообщения на экран, необходимо выполнить код
$url = 'https://[HIDE]/viewtopic.php?id=2032&p=3'
$res = Invoke-WebRequest $url
$res.AllElements | where Class -eq 'postmsg' | Foreach {$_.innerText}
Вот так можно получить первое сообщение со страницы:
$url = 'https://[HIDE]/viewtopic.php?id=2032&p=3'
$res = Invoke-WebRequest $url
$res.AllElements | where Class -eq 'postmsg' | select -First 1 innerText