我正在尝试检索有关网站的一些信息,我想查找特定的标签/类,然后返回包含的文本值(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
方法,因为我没有安装Office(无法使用 IHTMLDocument2)
- 我无法使用
Invoke-Webrequest
没有-UseBasicParsing
因为 Powershell 在访问 ParsedHTML 属性时挂起并生成额外的窗口(parsedhtml 不再响应 and 在 PowerShell 3.0 中使用 Invoke-Webrequest 会产生 Windows 安全警告)
既然用正则表达式解析 HTML 是一个很大的禁忌,那么我该怎么做呢?似乎什么都不起作用。
由于没有其他人发布答案,我设法使用以下代码获得了一个可行的解决方案:
$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 并不是进行更复杂解析的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)