PowerShell:将 HTML 表提取为 CSV

2023-12-05

我正在尝试将 HTML 表提取到 CSV 文件。我对 PowerShell 了解不多,但在网上我找到了一些示例,但我总是收到相同的错误消息:

您不能对空值表达式调用方法。行数:8 字符:1

  • $table = $oHTML.ParsedHtml.body.getElementsByTagName('table')[0]
  • 类别信息:无效操作:(:) [],运行时异常
  • FullQualifiedErrorId:InvokeMethodOnNull

这就是我目前所拥有的,但我有点卡住了。

$url = "https://winreleaseinfoprod.blob.core.windows.net/winreleaseinfoprod/en-US.html"
$webClient = New-Object System.Net.Webclient
$webClient.DownloadString($url) | Out-File -FilePath C:\Users\USER\Downloads\DUMP\dump.html

$oHTML = Get-Content C:\Users\USER\Downloads\DUMP\dump.html -Raw

#Just grabbing first table for my testing
$table = $oHTML.ParsedHtml.body.getElementsByTagName('Table')[0]

$Headers = ($table.Rows[0].Cells | Select -ExpandProperty innerText).trim()
$psCollection=@()

$dataRows = $table.Rows | Select -Skip 1
foreach ($tablerow in $dataRows) {
    $cells = ($tablerow.Cells | Select -ExpandProperty innerText).trim()
    $obj = New-Object -TypeName PSObject
    $count = 0;
    foreach ($cell in $cells) {
        if ($count -lt $Headers.length) {
            $obj | Add-Member -MemberType NoteProperty -Name $Headers[$count++] -Value $cell
        }
    }
    $psCollection+=$obj
}

$psCollection | Select 'MyField' -Unique

在 PowerShell 库中您会发现Read-HtmlTablecmdlet 基于IHTMLDocument2接口:

安装

Install-Script -Name Read-HtmlTable

Usage:

$uri = "https://winreleaseinfoprod.blob.core.windows.net/winreleaseinfoprod/en-US.html"

Read-HtmlTable $Uri -Table 0 |Format-Table # or: |Export-Csv .\output.csv

Results:

Version Servicing option               Availability date OS build   Latest revision date End of service: Home, Pro, Pro Education, Pro for Workstations and IoT Core End of service: Enterprise, Education and IoT Enterprise
------- ----------------               ----------------- --------   -------------------- --------------------------------------------------------------------------- --------------------------------------------------------
20H2    Semi-Annual Channel            2020-10-20        19042.928  2021-04-13           2022-05-10                                                                  2023-05-09
2004    Semi-Annual Channel            2020-05-27        19041.928  2021-04-13           2021-12-14                                                                  2021-12-14
1909    Semi-Annual Channel            2019-11-12        18363.1500 2021-04-13           2021-05-11                                                                  2022-05-10
1809    Semi-Annual Channel            2019-03-28        17763.1879 2021-04-13           End of service                                                              2021-05-11
1809    Semi-Annual Channel (Targeted) 2018-11-13        17763.1879 2021-04-13           End of service                                                              2021-05-11
1803    Semi-Annual Channel            2018-07-10        17134.2145 2021-04-13           End of service                                                              2021-05-11
1803    Semi-Annual Channel (Targeted) 2018-04-30        17134.2145 2021-04-13           End of service                                                              2021-05-11

参数

-InputObject <string>
包含 html 表的 html 内容(字符串)。

如果字符串少于 2048 个字符并且包含有效的 uri 协议,则下载内容 从相关位置。

-uri <Uri>
引用包含 html 表的 html 内容的 uri 位置

-Header <string[]>
为导入的字符串指定备用列标题行。列标题决定属性 创建的对象的名称ConvertFrom-Csv.

输入以逗号分隔的列表形式的列标题。不要将标题字符串括在引号中。 将每个列标题用单引号引起来。

如果输入的列标题少于数据列,则剩余的数据列将被丢弃。 如果您输入的列标题多于数据列,则会创建附加列标题 具有空数据列。

A $Null而不是列名称,将跨越相应的列与前一列。

注意:要选择特定列或跳过任何数据(或标题)行,请使用Select-Object cmdlet

-TableIndex <int[]>
指定应从 html 内容中选择哪些表(其中 0 指第一个表)。 默认情况下,所有表格均从内容中提取。

注意:如果有多个表格,则应统一标题,以便正确输出或显示每个表格。
(see: https://github.com/PowerShell/PowerShell/issues/13906)

-Separator <string>
指定用于连接跨多个列的标题的字符。
default:空格字符

-Delimiter <string>
指定用于连接跨多行的标题的字符。
default:操作系统使用的换行符

-NoTrim
默认情况下,所有标题和数据文本都会被修剪,要禁用修剪,请使用 -NoTrim 参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PowerShell:将 HTML 表提取为 CSV 的相关文章

随机推荐

  • Outlook 根据类别自动更改提醒

    我需要自动化 Outlook 以便当用户在约会上设置特定类别时 它会根据该类别自动设置提醒时间 例如 用户具有 现场会议 类别和 场外会议 类别 他希望现场会议的提醒时间自动更改为 15 分钟 场外会议的提醒时间自动更改为 30 分钟 他明
  • 如何使用 Object 参数对 Arraylist 中的对象进行排序

    我在对 Arraylist 中的对象进行排序时遇到问题 因为我是排序对象的新手 对数组列表进行排序非常基本 但对对象的数组列表进行排序是完全不同的事情 基本上 我一直在堆栈溢出中查看代码 人们似乎使用比较器来解决他们的问题 但他们没有解释如
  • XCode 无法构建 Unity3D 项目:找不到 lib

    我有 Unity3D 项目 我为 iOS 构建了它 如果我使用 XCode 的模拟器运行它 它工作得很好 但是 如果我想为 iOS 设备 或连接到我的 Mac 的物理设备编译它 我会遇到很多错误 因此我无法创建存档 出于测试目的 我什至创建
  • 如何使用php将GPS坐标转换为完整地址? [复制]

    这个问题在这里已经有答案了 我的 GPS 坐标格式为54 1456123 10 413456 如何使用 PHP 将它们转换为包含邮政编码 街道和城市的地址 使用谷歌API lat 54 1456123 long 10 413456 url
  • Python for 循环跳过所有其他值

    我在 django 应用程序中遇到了一个奇怪的问题 其中 for 循环跳过了所有其他项目 我已经获取了返回的查询集并且list ed 进行迭代 这样做的目的是删除另一个列表中的项目 该列表通过 POST 变量传递到视图 该视图是一个ajax
  • 如何在 Windows Phone 中使用 Bing 搜索 API?

    我正在尝试使用 Bing 搜索 API 查找图像作为应用程序内图块的背景 我已将 BingSearchContainer cs 包含在我的项目中 但无法使其与此处提供的示例代码一起使用 有关如何在我的 Windows Phone 8 应用程
  • 有时读取 ImportXML 单元格时,.getValue() 返回 #N/A

    我编写了一个脚本 将 ImportXML 公式写入单元格 然后几秒钟后尝试读取单元格并将其替换为它的返回值 问题是当我用获取的值替换单元格时 我经常 但并非总是 得到 N A 问题是 我能够在短时间内看到正确的值 因此 ImportXML
  • Docker 中 Bcrypt 安装失败

    我使用 MongoDB 创建了一个在 Docker 中运行的节点应用程序 它工作得很好 直到我包括在内节点 bcrypt js 这使得 Node 崩溃node gyp and bcrypt 该应用程序在本地和 Heroku 上运行良好 我尝
  • CardLayout,通过ButtonClick在JPanel之间切换

    我想通过单击 JPanel 上的按钮在 JPanel 之间切换 例如 我有一个带有 JButton simknop 的 JPanel sim 和一个带有 JButton helpknop 的 JPanel 帮助 我想通过单击按钮在这 2 个
  • PaintEvent 中警告 QPainter [重复]

    这个问题在这里已经有答案了 我尝试在 QChartView 中绘制更多信息 因此我重新实现了paintEvent virtual void paintEvent QPaintEvent event QChartView paintEvent
  • 当 Coq 中使用自己的可判定性时,评估计算不完整

    The Eval compute命令并不总是计算为简单表达式 考虑代码 Require Import Coq Lists List Require Import Coq Arith Peano dec Import ListNotation
  • 为什么用逗号进行双重初始化是非法的?

    我有三个代码片段 这个 1 7 yes that s all the code 编译没问题 这个 double d 1 7 也编译没问题 然而这个 double d 1 7 编译失败 gcc 4 3 4 说 错误 在数字常量之前预期有不合格
  • 调用 webapi 抛出 No Access-Control-Allow-Origin 标头出现在请求的资源上

    我正在尝试按照 Azure 示例通过此处提供的 WSFederation 将 Azure AD 集成到我的 MVC 4 6 Web 应用程序中https github com Azure Samples active directory d
  • Python 按值搜索

    我需要一个合适的解决方案来搜索 Python 嵌套数据结构中的键 假设我有一个带有值 check 的变量和这样的字典 SERVICES domain check whois register user create show delete
  • NoClassDefFoundError:com.opencsv.CSVWriter

    我尝试使用 opencsv libray 来获取加密格式数据 但在 CSV writer 上写入时 我收到 NoClassDefFoundError 我看过很多与相同错误相关的帖子 并尝试了几乎所有方法 但仍然无法纠正问题 下面的链接有同样
  • 现在如何使用 Blaze 在 Meteor 模板中的动态字段上使用 X-editable?

    I had x 可编辑在 Meteor 0 7 2 中工作 但自从升级到 0 8 0 后 它不再正确渲染 我往往会得到一堆空标签 这很令人沮丧 因为数据就在那里 只是在渲染函数被触发时还没有
  • 使服务层可以访问对象,而无需在 MVC4 应用程序中作为参数传递

    我正在构建一个多租户 MVC 应用程序 其中有一个应用程序池和一个数据库 我有一个租户表 并且我的每个模型都有一个标识的 TenantId 每个租户都有一个字符串 Url 用于标识用于访问该租户数据的完整 URL 我可以通过以下方式从 Ba
  • 如何对列表重新排序? [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 给定一个任意大小的数组n 我想根据数组的离散索引重新组织数组的元素 Python 示例 Unique array of size n a b c d e
  • 对 Tkinter bind_class 感到困惑

    我定义了 GCanvas Canvas 的扩展 我的目的是在类级别绑定到 GCanvas 它不起作用 我还尝试绑定到 tk Canvas 但它也不起作用 绑定到root或 GCanvas 实例工作正常 这两种选择对我来说都没有用 但我只是尝
  • PowerShell:将 HTML 表提取为 CSV

    我正在尝试将 HTML 表提取到 CSV 文件 我对 PowerShell 了解不多 但在网上我找到了一些示例 但我总是收到相同的错误消息 您不能对空值表达式调用方法 行数 8 字符 1 table oHTML ParsedHtml bod