我正在尝试检索有关网站的一些信息,我想查找特定的标签/类,然后返回所包含的文本值(innerHTML)。这是我到目前为止所拥有的
$request = Invoke-WebRequest -Uri $url -UseBasicParsing
$HTML = New-Object -Com "HTMLFile"
$src = $request.RawContent
$HTML.write($src)
foreach ($obj in $HTML.all) {
$obj.getElementsByClassName('some-class-name')
}
我认为将HTML转换为HTML对象存在问题,因为在尝试“选择对象”它们时会看到很多未定义的属性和空结果。
所以花了两天之后,我应该如何用Powershell解析HTML?
IHTMLDocument2
方法Invoke-Webrequest
,我将无法使用-UseBasicParsing
,因为Powershell在访问ParsedHTML属性(parsedhtml doesnt respond anymore和Using Invoke-Webrequest in PowerShell 3.0 spawns a Windows Security Warning)时会挂起并生成其他窗口因此,由于使用正则表达式解析HTML非常重要,因此我该如何做呢?似乎没有任何作用。
答案 0 :(得分:3)
在2020年使用PowerShell 5+,您可以像这样进行操作:
../../../../core/material
答案 1 :(得分:0)
由于没有其他人发布了答案,因此我设法通过以下代码获得了可行的解决方案:
$request = Invoke-WebRequest -Uri $URL -UseBasicParsing
$HTML = New-Object -Com "HTMLFile"
[string]$htmlBody = $request.Content
$HTML.write([ref]$htmlBody)
$filter = $HTML.getElementsByClassName($htmlClassName)
在使用某些URL时,我遇到了$ filter变量为空而为其他URL填充的情况。总而言之,这可能适合您的情况,但似乎Powershell并不是进行更复杂的解析的方法。