powershell 解析HTML以导出特定表格的单元格内容

fae0ux8s  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(129)

有一个使用‘Invoke-WebRequest’将其导出到变量的HTML文件,我想从其中从特定表中导出内容。
$Result=Invoke-WebRequestInvoke‘https://www.dailyfaceoff.com/teams/anaheim-ducks/line-combinations’
不幸的是,通过使用$Result.parsedHTML不会返回任何结果。因此,我考虑使用正则表达式来查找字符串。这就是我要找你帮忙的地方。
请求的操作:

  • 在HTML文件中搜索id=LW1的表
  • 在此单元格中搜索Hello World
  • 导出内容《Hello World》

超文本标记语言结构:

<body ...>
    <div ...>
        <tbody>
            <td id="LW1">
                <a ....>
                    <span class="player-name">Hello World</span>
                </a>
            </td>
        </tbody>
    </div>
</body>

事先感谢您的任何意见或帮助!
尝试1:

$r = Invoke-WebRequest 'https://www.dailyfaceoff.com/teams/anaheim-ducks/line-combinations'
$table = $r.ParsedHtml.getElementsByTagName("table")

结果1:没有输出,看起来像是HTML结构阻止了解析操作。
试试2:

$r = Invoke-WebRequest 'https://www.dailyfaceoff.com/teams/anaheim-ducks/line-combinations'
$string = ($r.Content | 
    where {$_ -match '^a href.*LW1.*\ title=.*>/span.*'}) -replace '.*>'

结果2:正则表达式不匹配

6ojccjat

6ojccjat1#

Please don't try to parse HTML with regex, that's a terrible idea。您可以使用Com对象在PowerShell Core和Windows PowerShell中执行此操作:

$com = New-Object -ComObject htmlfile
$com.write([System.Text.Encoding]::Unicode.GetBytes(@'
<body>
    <div>
        <tbody>
            <td id="LW1">
                <a>
                    <span class="player-name">Hello World</span>
                </a>
            </td>
        </tbody>
    </div>
</body>
'@))

$com.getElementsByClassName('player-name') | ForEach-Object innerHtml

# Outputs: Hello World

$null = [System.Runtime.InteropServices.Marshal]::ReleaseComObject($com)

相关问题