【问题标题】:Parsing HTML with PowerShell on dynamic sites在动态站点上使用 PowerShell 解析 HTML
【发布时间】:2016-05-12 00:54:14
【问题描述】:

有没有办法使用 Invoke-WebRequest cmdlet 从http://www.pgatour.com 站点解析 HTML?当我尝试这样做时,ParsedHtml 不包含我需要的元素(因为 cmdlet 错误地解析了页面)。 我尝试通过在 PowerShell 中创建 IE COM 对象从该页面获取数据,它可以工作,但速度很慢,所以我想知道是否有另一种使用 Invoke-WebRequest(甚至外部解析器)的方法。

谢谢!

【问题讨论】:

  • 您是否考虑过使用支持此功能的 .NET 解析库并从 powershell 中调用它?
  • 我考虑使用外部工具来解析 HTML。你知道吗?

标签: powershell html-parsing


【解决方案1】:

您可以尝试使用HmtlAgilityPack 解析Invoke-WebRequest 返回的内容。在这种情况下,我会使用-UseBasicParsing 参数。

【讨论】:

  • 是的,我知道这个包,但它不支持 CSS 定位器,我需要这个支持。我还查看了 Fizzler,但它不会经常更新,现在已经过时了。
【解决方案2】:

窗口 10 64 位。 PowerShell 5.1

使用 Invoke-WebRequest 和正则表达式在动态站点上使用 PowerShell 5.1 解析 HTML,该正则表达式返回非嵌套标签(如 <html>,<title>,<head><body>)之间的所有内容。嵌套标签需要一些调整。

Invoke-WebRequest -Uri http://www.pgatour.com | sc golf.html
(gc -raw golf.html) -match '(<body>)(.*|\n).*?(<\/body>)'
$matches[0] 

&lt;div class="success-message"&gt; 和下一个&lt;/div&gt; 之间的所有内容

Invoke-WebRequest -Uri http://www.pgatour.com | sc golf.html
(gc -raw golf.html) -match '(<div class="success-message">)(.*?|\n)*(<\/div>)'
$matches[0] 

Greedy and lazy quantifiers explained

regex101.com 是你的朋友。

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 2012-06-13
    • 1970-01-01
    • 2013-11-25
    • 2012-02-21
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多