gpt4 book ai didi

.net - 使用 PowerShell 或 VBS 从 HTML 文件中提取表格

转载 作者:可可西里 更新时间:2023-11-01 09:49:49 26 4
gpt4 key购买 nike

我有一个需要解决的两部分问题。我会尽力描述它,然后分解我“认为”的步骤。

我正在尝试获取网页中的特定表格并将其通过电子邮件发送给自己。

目前我正在尝试使用 GNU\Win32 wget.exe (我宁愿直接使用 PowerShell,但出于某种原因我不能,也许是因为我使用的方法无法呈现 ASPX 页面?)使用 wget我能够制作 ASPX 页面的本地 html 版本。

现在我一直在尝试解析文件并提取特定的表。在这种特殊情况下,表格以 <table border="0" cellpadding="2" cellspacing="2" width="300px"> 开头并以 </table> 结尾并且没有嵌套表格。

我已经针对我的问题使用了一些正则表达式(是的,我知道正则表达式可能不是我在这里需要的工具)但无济于事。

---修正这是我现在所在的位置...

$content = (new-object System.Net.WebClient).DownloadString($url)
$found = $content -cmatch '(?si)<table border="0" cellpadding="2" cellspacing="2" width="300px"[^>]*>(.*?)Total Queries</td>(.*?)</tr>(.*?)</table>'
$result = $matches[3]
$result

最佳答案

我用 PowerShell 做过这类事情。这非常简单:

PS> $url = "http://www.windowsitpro.com/news/PaulThurrottsWinInfoNews.aspx"
PS> $content = (new-object System.Net.WebClient).DownloadString($url)
PS> $content -match '(?s)<table[^>]+border\s*=\s*"0"\s*.*?>(.*?)</table>'
True
PS> $matches[1]

<tr>
<snip>
</tr>

只需将 width 替换为 border 并将 300px 替换为 0 作为您的正则表达式,例如:

PS> $content -match '(?s)<table[^>]+width\s*=\s*"300px"\s*.*?>(.*?)</table>'

在匹配多个表的情况下,您必须从 -match 切换到 Select-String,它是一个 bool 运算符,只是希望找到一个匹配项,它可以找到所有匹配项,例如:

PS> $pattern = '(?s)<table[^>]+width\s*=\s*"300px"\s*.*?>(.*?)</table>'    
PS> $content | Select-String -AllMatches $pattern |
Foreach {$_.Matches | $_.Group[1].Value}

基本上所有匹配项都在 $_.Matches 集合中。如果您知道该表始终是第三个,您可以像这样访问:

... | Foreach {$_.Matches[2].Group[1].Value}

关于.net - 使用 PowerShell 或 VBS 从 HTML 文件中提取表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3605433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com