Замена HtmlWebResponseObject.ParsedHtml в Powershell Core 6

Моя цель - проанализировать HTML-файл, полученный с помощью Invoke-WebRequest. Если возможно, я бы не хотел использовать внешние библиотеки.

Проблема, с которой я столкнулся, заключается в том, что Invoke-WebRequest возвращает BasicHtmlWebResponseObject вместо HtmlWebResponseObject начиная с Powershell 6. ВBasic версия пропускает ParsedHtmlсвойство. Есть ли хорошая альтернатива синтаксическому анализу html в Powershell Core 6?

Я пытался использовать Select-Xml но мой html не совсем верен (например, отсутствует закрывающий тег), поэтому это не может проанализировать результат.

Другой альтернативой, которую я нашел, является использование New-Object -ComObject "HTMLFile" но, насколько я понимаю, это зависит от Internet Explorer для синтаксического анализа, которого я бы хотел избежать.

Существует очень похожий вопрос здесь, но к сожалению, этот вопрос не было ответа или деятельность с 8 месяцев.

1 ответ

Решение

Как упоминалось в комментариях, это невозможно без библиотеки. Одна очень хорошая библиотека, вы можете использовать его AngleSharp библиотека для DotNet. Он имеет отличные возможности синтаксического анализа HTML, а код dotnet очень дружелюбно взаимодействует с PowerShell, посмотрите эту ссылку.

Вот пример с их сайта:

var config = Configuration.Default.WithDefaultLoader();
var address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes";
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(address);
var cellSelector = "tr.vevent td:nth-child(3)";
var cells = document.QuerySelectorAll(cellSelector);
var titles = cells.Select(m => m.TextContent);
Другие вопросы по тегам