HtmlWebResponseObject.ParsedHtml Powershell Core 6 中的替换
HtmlWebResponseObject.ParsedHtml replacement in Powershell Core 6
我的目标是解析使用 Invoke-WebRequest
检索到的 html 文件。如果可能的话,我想避免使用任何外部库。
我面临的问题是,Invoke-WebRequest
returns BasicHtmlWebResponseObject
而不是 HtmlWebResponseObject
since Powershell 6。 Basic
版本缺少 ParsedHtml
属性。在 Powershell Core 6 中是否有解析 html 的好的替代方法?
我试过使用 Select-Xml
但我的 html 不完全有效(例如缺少结束标记),因此无法解析结果。
我发现的另一种选择是使用 New-Object -ComObject "HTMLFile"
,但据我了解,这依赖于 Internet Explorer 进行解析,我想避免这种情况。
有一个非常相似的问题 here 但遗憾的是这个问题没有答案或 activity 自 8 个月以来。
如评论中所述,没有图书馆是不可能的。一个非常好的库,您可以使用它 AngleSharp library for dotnet. It has great html parsing capabilities and dotnet code interacts very friendly with powershell, have a look at this link.
这是他们网站上的一个例子:
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);
我的目标是解析使用 Invoke-WebRequest
检索到的 html 文件。如果可能的话,我想避免使用任何外部库。
我面临的问题是,Invoke-WebRequest
returns BasicHtmlWebResponseObject
而不是 HtmlWebResponseObject
since Powershell 6。 Basic
版本缺少 ParsedHtml
属性。在 Powershell Core 6 中是否有解析 html 的好的替代方法?
我试过使用 Select-Xml
但我的 html 不完全有效(例如缺少结束标记),因此无法解析结果。
我发现的另一种选择是使用 New-Object -ComObject "HTMLFile"
,但据我了解,这依赖于 Internet Explorer 进行解析,我想避免这种情况。
有一个非常相似的问题 here 但遗憾的是这个问题没有答案或 activity 自 8 个月以来。
如评论中所述,没有图书馆是不可能的。一个非常好的库,您可以使用它 AngleSharp library for dotnet. It has great html parsing capabilities and dotnet code interacts very friendly with powershell, have a look at this link.
这是他们网站上的一个例子:
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);