我可以使用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
如何解析本地下载的页面?
答案 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>"