使用PowerShell抓取指定页面首个表格并导出CSV的问题求助
解决方案:提取首个表格并导出为CSV
你的代码目前获取的是表格容器的HTML内容,而非结构化的表格数据。以下是修正后的PowerShell脚本,可直接提取目标页面首个表格的数据并导出为CSV:
# 获取网页内容 $WebResponse = Invoke-WebRequest -Uri "https://www.interactivebrokers.co.uk/en/trading/margin-futures-fops.php" # 定位首个带table-responsive类的容器内的表格 $targetTable = $WebResponse.AllElements | Where-Object {$_.class -match 'table-responsive'} | Select-Object -First 1 | ForEach-Object { $_.AllElements | Where-Object {$_.tagName -eq 'TABLE'} | Select-Object -First 1 } # 提取表头文本 $headers = $targetTable.AllElements | Where-Object {$_.tagName -eq 'TH'} | ForEach-Object { $_.InnerText.Trim() } # 提取数据行并转换为结构化对象 $tableData = foreach ($row in ($targetTable.AllElements | Where-Object {$_.tagName -eq 'TR'} | Select-Object -Skip 1)) { $cells = $row.AllElements | Where-Object {$_.tagName -eq 'TD'} | ForEach-Object { $_.InnerText.Trim() } # 过滤单元格数量与表头不匹配的异常行 if ($cells.Count -eq $headers.Count) { $rowObj = [ordered]@{} for ($i=0; $i -lt $headers.Count; $i++) { $rowObj[$headers[$i]] = $cells[$i] } [PSCustomObject]$rowObj } } # 导出为CSV文件 $tableData | Export-Csv -Path "IB_Futures_Margin.csv" -NoTypeInformation -Encoding UTF8
关键说明:
- 精准定位表格:先找到
table-responsive容器,再从中提取内部的<table>元素,避免获取冗余的容器HTML代码。 - 结构化转换:将表头和每行单元格文本映射为PowerShell自定义对象,保证CSV的列与数据行一一对应。
- 异常处理:添加单元格数量校验,跳过结构不一致的行,避免导出错误数据。
- 编码兼容:使用
UTF8编码导出,避免中文或特殊字符出现乱码问题。
内容的提问来源于stack exchange,提问作者iceman
相关产品推荐
相关产品推荐

