SEO программы для веб-мастера > PowerShell для веб-мастеров > Парсинг сайтов Invoke-WebRequest

HTML-парсер на PowerShell

Используя 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


Меню сайта

HTML-парсер на PowerShell
HTML-парсер на PowerShell