Замена 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);