解析本地HTML文件

时间:2014-07-27 01:56:32

标签: html powershell

我可以使用PowerShell解析HTML页面

PS > $foo = Invoke-WebRequest http://example.com

PS > $foo.Links.Count
1

但是,如果我下载页面

PS > Invoke-WebRequest -OutFile example.htm http://example.com

然后尝试解析下载的页面,它会产生意想不到的结果

PS > $foo = Invoke-WebRequest file://$pwd/example.htm

PS > $foo.Links.Count
0

如何解析本地下载的页面?

3 个答案:

答案 0 :(得分:24)

似乎Invoke-WebRequest加载file协议URI就好了,但即使在PowerShell 4.0(官方支持)中也无法解析它们。

不需要设置网站的替代方法是将HTML直接加载和解析为MSHTML。

$html = New-Object -ComObject "HTMLFile";
$source = Get-Content -Path "file.html" -Raw;
$html.IHTMLDocument2_write($source);

$html.links.length;

请注意,当我测试这个时,单个

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

标头阻止了我的HTML解析,我不明白为什么 - 该文档具有类似的XHTML样式标题,MSHTML没有问题。

答案 1 :(得分:3)

您可以使用带有的文件 web server 绕过Invoke-WebRequest的愚蠢限制

PS > $foo = Invoke-WebRequest http://localhost:8080/example.htm

PS > $foo.Links.Count
1

请注意,即使没有连接也可以使用,例如

PS > Invoke-WebRequest http://example.com
Invoke-WebRequest : The remote name could not be resolved: 'example.com'

答案 2 :(得分:-2)

使用文件链接格式

$foo = Invoke-WebRequest "file:///<path-to-file>"