簡體   English   中英

使用Powershell將HTML文件轉換為.CSV

[英]Convert HTML file into .CSV using powershell

因此,我有一個由第三方生成的HTML文件,該文件每天都會通過電子郵件發送給我(和我的小組)。 它包含ID號,名稱和多個電子郵件地址(如果適用)的表。 它用於更新AD中的組成員身份,並且我希望能夠在Powershell中執行此操作,因為組成員身份更新部分很容易。 解析HTML文件以提取電子郵件地址(也是其AD用戶名)是困難的部分。 我有點在樹樁上。 我已經嘗試使用HTMLAgilityParser,但對於我的目的來說似乎並沒有那么好用。 如果我能以某種方式將數據保存到.CSV文件中,那將是很好的選擇。

我需要的是A)直接從HTML中提取電子郵件地址並將其放置在CSV文件中,或者B)將HTML文件轉換為要解析的.CSV。

原因是該數據每天都會到來,因此必須自動進行。

謝謝!

來自html文件的示例,所有標識信息均已刪除和/或調整:

<table>
<tr>
<td class=xl27>
<span class=font7>ID</span>
</td>
<td class=xl27>
<span class=font7>Name</span>
</td>
<td class=xl27>
<span class=font7>Primary E-Mail</span>
</td>
<td class=xl27>
<span class=font7>Alternate E-Mail</span>
</td>
</tr>
<tr>
<td class=xl28>
<span class=font8>00000000</span>
</td>
<td class=xl28>
<span class=font8>Smith,John R</span>
</td>
<td class=xl28>
<span class=font8></span>
</td>
<td class=xl28>
<span class=font8>John_Smith@addr</span>
</td>
</tr>

這是解決方案的開始,效果不是很好。它假定HtmlAgilityPack.dll位於目錄腳本文件的Html-Agility-Pack目錄中。

Add-Type -Path "$(Split-Path -parent $PSCommandPath)\Html-Agility-Pack\HtmlAgilityPack.dll"


$webGraber = New-Object -TypeName HtmlAgilityPack.HtmlWeb
$webDoc = $webGraber.Load("C:\temp\t.htm")
$trDatas = $webDoc.DocumentNode.ChildNodes.Elements("tr")

Remove-Item "c:\temp\t.csv"

foreach ($trData in $trDatas)
{
  $tdDatas = $trData.elements("td")
  $line = ""
  foreach ($tdData in $tdDatas)
  {
    $line = $line + $tdData.InnerText.Trim() + ','
  }
  $line.Remove($line.Length -1) | Out-File -FilePath "c:\temp\t.csv" -Append
}

我很猶豫地發布此答案,因為它非常特定於此情況,但這可以通過簡單的字符串方法來完成。 首先獲取html文件的內容:

$htmlContent = Get-Content -Path 'thePath\andFile.html'

接下來,從html數據中選擇包含您要查找的值的字符串。 這部分絕對特定於您的html結構:

$stringsWithDesiredValues = $htmlContent.Where({$_ -like '*<span class=font8>*'})

現在我們可以使用foreach並使用索引'>'和'<'來獲得僅包含所需值的子字符串。

foreach($htmlString in $stringsWithDesiredValues){
$firstIndex = $htmlString.IndexOf('>') + 1
$lastIndex = $htmlString.LastIndexOf('<')
$lengthOfSubstring = $lastIndex - $firstIndex
$desiredValue = $htmlString.Substring($firstIndex,$lengthOfSubstring)
$desiredValue}

當然,我在這里沒有對期望的值做任何事情,但是此腳本將寫出這些值,以便您可以看到它們是正確的。 顯然,您可以在循環中捕獲這些值,然后按需進行處理。 可以肯定,這是一個丑陋的解決方案,因為沒有其他答案,我只發布了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM