使用Powershell将TD标记值从HTML转换为.txt

使用Powershell将TD标记值从HTML转换为.txt,powershell,Powershell,我仍然在Powershell中爬行,所以在尝试了但没有成功后决定问 我有一个如下的HTML代码。我需要提取tr标签上的单词和td标签上的所有值,并将其导出到.txt文件 使用下面的代码可以很好地工作,但这取决于字体颜色: $result = [regex]::Matches($content, 'style="color&#58;black;".*?>(.*?)</span>') $result | select { ($_.Groups[1].Value -repla

我仍然在Powershell中爬行,所以在尝试了但没有成功后决定问

我有一个如下的HTML代码。我需要提取tr标签上的单词和td标签上的所有值,并将其导出到.txt文件

使用下面的代码可以很好地工作,但这取决于字体颜色:

$result = [regex]::Matches($content, 'style="color&#58;black;".*?>(.*?)</span>')
$result | select { ($_.Groups[1].Value -replace '&#160;', '' -replace '​', '').Trim().Trim(',')} | Out-file $outfile -Encoding ascii
正如您在HTML代码中看到的,有些列TD没有这种模式 如何在Powershell中获取这些值?我尝试了以下选项,但没有成功:

$result = [regex]::Matches($content, 'style="windowtext;".*?>(.*?)</td>')
$result | select { ($_.Groups[1].Value -replace '&#160;', '').Trim().Trim(',')} | Out-file $outfile

$result = [regex]::Matches($content, '<td.*?>(.+)</td>')

$result = [regex]::Matches($content, '<td.*?>(.*?)</td>') | % { $_.Captures[0].Groups[1].value} | Out-file $outfile
同样,我需要提取TR标签上的Chile单词和TD标签上的所有值,并将其导出到.TXT文件中

智利 2. &160; &160; 14,19 1. 26 &160; 15 18,19 9,27 1.
8,25我必须在这里做出一些假设,为您提供答案。我假设您正在使用一个完整的HTML文档。如果没有,请更新您的需求,因为将文档作为XML处理可能更容易

使用invoke webrequest检索该文档:

$html = invoke-webrequest "http://www.yourpath.here"
现在我假设您使用的内容在该页面上只有一个表。这将获得返回文档的第一个表。如果不需要第一个表,可以更改索引,也可以使用where子句根据条件选择所需的表

$table = $html.parsedHtml.getElementsByTagName("table")[0]
现在,因为我不知道你们表格的全部内容,我假设智利不会出现在整个表格的任何其他地方。这必须是真的,因为我将采取一种简单的方法来忽略TR中的所有innerHTML。如果不是这样,您将需要实现额外的逻辑来检查您是否只读取TR中的TH

$TR = $table.getElementsByTagName("tr") | where { $_.innerText -like "*Chile*" }
接下来,我们可以抓住所有TD元素:

$TD = $TR.getElementsByTagName("td")
此时,所有TD对象都在一个数组中。您可以使用以下内容转储内容:

$TD | foreach { $_.innerText }

奇怪的是,仅仅执行$TD.innerText不会产生此输出。

您需要发布您试图解析的文件中的相关行。虽然毫无疑问和标记是什么,但您的个人使用和样式或其他格式说明符可能会有所不同。请参阅:。这是您正在解析的完整HTML文档,还是只是其中的一部分?唉,你,所以希望你已经有了一个完整的HTML文档,因为这样你就可以在DOM树上走下去了。事实上,这正是我正在研究的部分。只是我需要从中提取数据的部分。您好,非常感谢您提供的逻辑解释,今天我花了一些时间来查看它,它对版本5非常有效,但对版本4却不起作用,而版本4正是我目前在服务器上的版本。我正在试图找出如何使其在版本4上工作。您指的是您的PowerShell版本,对吗?我知道Invoke WebRequest从2.0开始就已经存在了,但我明天会检查parsedHTML功能是否在以后引入,以及我是否可以找到替代方案。是的!正确,PS版本问题。我的主要目标是能够从HTML文件中获取表内容并处理数据。我使用的是一个完整的html文件。更正,调用WebRequest是在3.0中引入的。也就是说,我在3和4中测试了这个,它对我有效。你能发布更新代码的详细信息和错误消息吗?我相信我已经发现问题所在,我的服务器网络不允许我从网页下载内容,所以每次我尝试从服务器访问时都会被阻止。从本地机器下载很好,但我已经设法使用另一种方法下载,现在运行良好!:非常感谢你的耐心和帮助,你摇滚!