Новость из категории: Информация

Сбор данных из Интернета с помощью PowerShell и Invoke_WebRequest

Загрузка страницы

Сбор данных из Интернета с помощью PowerShell и Invoke_WebRequest

Для загрузки страницы и последующего ее сохранения в переменную, которую мы назовем $webpage, необходимо ввести следующую команду:
$webpage=Invoke-webrequest www.frf.usace.army.mil

Результат, полученный после выполнения этой команды, подается по конвейеру на вход Get-Member (что всегда полезно, когда впервые имеешь дело с новым существительным-объектом PowerShell), мы увидим, что команда Invoke-WbbRequest разбивает страницу на куски: Swebpage.images — для вывода списка загруженных изображений; Swebpage.headers — информация заголовка; .forms и .inputfields — пустые разделы, так как наша домашняя страница не имеет форм. Затем .links — все гиперссылки, имеющиеся на странице, а также .content и .rawcontent — код HTML. Исходя из предположения, что у нас есть папка C:scripts, сохраняем содержимое в текстовый файл:
$webpage.RawContent | Out-File "c:scriptswebpage.txt" ASCII -Width 9999

либо копируем в буфер и вставляем в блокнот:
$webpage|clip.exe

Сбор данных из Интернета с помощью PowerShell и Invoke_WebRequest
Сайт сбора данных о температуре воды

Анализ текста

На данном этапе текст веб-страницы представляет собой мешанину из HTML-кода. Нам же нужно выделить только температуру воды по Фаренгейту. Для этого придется придумать уникальную схему действий с текстом, из которого необходимо извлечь эти цифры.



Начинаем анализ текста домашней страницы. Можно догадаться, что Pier End встречается на странице только один раз. Поиск в «Блокноте» подтверждает, что эта запись действительно имеется только в одном месте в следующей строке HTML-кода:
<td bgcolor=#ECECEC>Water Temp Pier End<td bgcolor=#ECECEC> 21&deg;C &nbsp;&nbsp; 70&deg;F</td><tr>

После быстрого подсчета устанавливаем, что интересующие нас две цифры начинаются через 45 символов после Pier End. Таким образом, последовательность действий выглядит следующим образом: пропустить весь текст, предшествующий Pier End; отступить на 45 символов вперед от этой записи;
• запомнить следующие два символа;
• все остальное пропустить.

Эту схему в PowerShell можно реализовать с использованием регулярного выражения — regular expression или regex. PowerShell находит каждое вхождение некоего текстового фрагмента и заменяет его другим текстом. Например, заменить Pier на Dock по всей строке можно с помощью запроса: PS
C:scripts> $a="Pierdockpierdock“
PS C:scripts> $a="Pierdockpierdock"
PS C:scripts> $a -replace "pier","dock"
Dockdockdockdock

Необычная запись -replace заставляет думать, что здесь строковая переменная получает параметр команды или что-либо еще, но таков уж синтаксис. Если же говорить о необычном, то приготовьтесь познакомиться с синтаксисом регулярного выражения. При всех своих достоинствах этот инструмент выглядит невероятно.
• «Пропустить весь текст до Pier End» записывается так: [Ss]*Pier End. Здесь [Ss] означает «все, что угодно», а звездочка (*) означает «столько, сколько будет найдено». Pier End означает просто Pier End.
«Отступить 45 символов» записывается так .{45}. Точка (.) означает любой символ, кроме конца строки, а {45} указывает, что число символов равно 45 (в противоположность звездочке, означающей «сколько угодно»),
- «Запомнить следующие два символа» записывается так: (dd). Круглые скобки предписывают запомнить в переменную $1, a d означает «любая цифра». Таким же образом будет работать выражение (d{2}).

Сбор данных из Интернета с помощью PowerShell и Invoke_WebRequest

В завершение пишем [Ss]*, чтобы пропустить все, что осталось. Итак, запрос на извлечение температуры воды выглядит следующим образом:
$webpage=(Invoke-WebRequest www.frf.usace.army.mil).rawcontent
$webpage -replace"[Ss]* Pier End.{45}(dd)[Ss]*",'$1'

Это был всего лишь первый опыт, и наше регулярное выражение вышло несколько неуклюжим, но все же позволило решить задачу. В следующей статье мы продолжим тему сбора данных из Интернета и знакомство с регулярными выражениями.

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх