2017-07-09 49 views
0

我正在嘗試處理網絡查詢的結果。我做將PowerShell中的HTML片段轉換爲csv

$data = Invoke-WebRequest $uri $data.RawContent

返回此

HTTP/1.1 200 OK Transfer-Encoding: chunked Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: JSESSIONID=19gbg0sejwxXXXXXXpzwlasaaeer;Path=/informer;Secure Server: Jetty(8.1.8.v20121106) <table><tr><td>username</td><td>firstname</td><td>lastname</td><td>idnumber</td><td>auth</td><td>course1</td></tr><tr valign="top"><td style="mso-number-format:'\@';">d_smith</td><td style="mso-number-format:'\@';">Daniel</td><td style="mso-number-format:'\@';">smith</td><td style="mso-number-format:'\@';">2221840</td><td style="mso-number-format:'\@';">ldap</td><td style="mso-number-format:'\@';">2017CE1-CTP-8001-101</td></tr><tr valign="top"><td style="mso-number-format:'\@';">d_rutherford</td><td style="mso-number-format:'\@';">Daniel</td><td style="mso-number-format:'\@';">rutherford</td><td style="mso-number-format:'\@';">2223039</td><td style="mso-number-format:'\@';">ldap</td><td style="mso-number-format:'\@';">2017CE1-CTP-8001-101</td></tr><tr valign="top"><td style="mso-number-format:'\@';">j_smithe21</td><td style="mso-number-format:'\@';">James</td><td style="mso-number-format:'\@';">smithe</td><td style="mso-number-format:'\@';">2221844</td><td style="mso-number-format:'\@';">ldap</td><td style="mso-number-format:'\@';">2017CE1-CTP-8001-101</td></tr><tr valign="top"><td style="mso-number-format:'\@';">h_phillipsiii</td><td style="mso-number-format:'\@';">Harvey</td><td style="mso-number-format:'\@';">phillips III</td><td style="mso-number-format:'\@';">2221845</td><td style="mso-number-format:'\@';">ldap</td><td style="mso-number-format:'\@';">2017CE1-CTP-8001-101</td></tr><tr valign="top"><td style="mso-number-format:'\@';">h_phillipsiii</td><td style="mso-number-format:'\@';">Harvey</td><td style="mso-number-format:'\@';">phillips III</td><td style="mso-number-format:'\@';">2221845</td><td style="mso-number-format:'\@';">ldap</td><td style="mso-number-format:'\@';">2017CE1-CTP-8001-102</td></tr><tr valign="top"><td style="mso-number-format:'\@';">d_rutherford</td><td style="mso-number-format:'\@';">Daniel</td><td style="mso-number-format:'\@';">rutherford</td><td style="mso-number-format:'\@';">2223039</td><td style="mso-number-format:'\@';">ldap</td><td style="mso-number-format:'\@';">2017CE1-CTP-8001-102</td></tr><tr valign="top"><td style="mso-number-format:'\@';">j_smithe21</td><td style="mso-number-format:'\@';">James</td><td style="mso-number-format:'\@';">smithe</td><td style="mso-number-format:'\@';">2221844</td><td style="mso-number-format:'\@';">ldap</td><td style="mso-number-format:'\@';">2017CE1-CTP-8001-102</td></tr><tr valign="top"><td style="mso-number-format:'\@';">d_smith</td><td style="mso-number-format:'\@';">Daniel</td><td style="mso-number-format:'\@';">smith</td><td style="mso-number-format:'\@';">2221840</td><td style="mso-number-format:'\@';">ldap</td><td style="mso-number-format:'\@';">2017CE1-CTP-8001-102</td></tr><tr valign="top"><td></td></tr></table>

通知沒有HTML或身體標記。盡我所能,這就是爲什麼我沒有看到ParsedHTML選項。這些是$data的唯一屬性顯示在$data Properties以下。

$ data.Content返回組成文本$ data.RawContent產生的字符代碼。 這是當它在Web瀏覽器 rendered table

呈現我怎麼能這個錶轉換爲CSV或PSCustomObject或類似這樣我可以通過線條和過濾器遍歷和處理數據的東西表?

+0

您可以在[JohnLBevan](https://stackoverflow.com/users/361842/johnlbevan)s [answer](https://stackoverflow.com/a/31949668/6811411)中查看[類似問題](https://stackoverflow.com/questions/25918094/how-to-convert-html-table-to-csv-file-with-same-structure-with-powershell)。 – LotPings

回答

1

因爲響應是有效的XML,您可以使用PowerShells XML解析能力,就像這樣:

$data = Invoke-WebRequest $uri 
[xml]$x = $data.RawContent 

$first = $true 
$OldOFS = $OFS 
$OFS = '","' 

foreach ($tr in $x.table.tr) 
{ 
    if ($first) 
    { 
     $first = $false 
     """$($tr.td)""" | Out-File "out.csv" 
    } 
    elseif ($tr.td) 
    { 
     """$($tr.td.'#text')""" | Out-File "out.csv" -Append 
    } 
} 

$OFS = $OldOFS 

notepad out.csv 

$OFS黑客只是快速和骯髒得到轉換的東西CSV般的陣列。例如,您也可以使用-join運算符。

第一行中的$tr.td產生一個標題字符串數組,$tr.td.'#text'爲每個剩餘的非空行產生數組數組。

希望有所幫助。

+0

YAAASSSSSSSSSSS – PsychoData

+0

當我放入桌子時,我並不是100%正確的。還有一些額外的HTML標題等。 https://i.imgur.com/ixc7X7O.png我採取了懶惰的方式,並在'

'之前使用'[xml] $ x = $ data.RawContent.Remove(0,$ data.RawContent.IndexOf( 「
」)-1) ' 其餘的就像你一樣,但是在編輯之前你的回答是100%正確的 – PsychoData