Конвертировать HTML в CSV - PullRequest
       1

Конвертировать HTML в CSV

0 голосов
/ 21 октября 2019

У меня есть код ниже, чтобы преобразовать из таблицы HTML в CSV. Но каким-то образом, если в данных ячейки таблицы есть "," ... она усекает ячейку таблицы и создает новый столбец ... как я могу убедиться, что данные ячейки таблицы не усекаются, если она содержит "запятую" ..

$r = Invoke-WebRequest 'https://htmlwithtable.htm'
$data = ( $r.ParsedHtml.getElementsByTagName("table") | Select-Object -First 1 ).rows
$table = @()
forEach($datum in $data){
    if($datum.tagName -eq "tr"){
        $thisRow = @()
        $cells = $datum.children
        forEach($cell in $cells){
           if($cell.tagName -imatch "t[dh]"){
                $thisRow += $cell.innerText
            }
        }
        $table += $thisRow -join ","
    }
}

$table | out-file c:\change\htmltocsv.csv -Encoding ascii

1 Ответ

1 голос
/ 21 октября 2019

Вам нужно процитировать значения, которые вы извлекаете из ячеек.

Как-то так должно работать:

# load the System.Web assembly to be able to decode HTML entities
Add-Type -AssemblyName System.Web

$result = Invoke-WebRequest 'https://htmlwithtable.htm'
$data = $result.ParsedHtml.getElementsByTagName("table") | Select-Object -First 1
$table = $data.Rows | ForEach-Object {
    if ($_.tagName -eq 'tr'){
        $csvRow = foreach($cell in $_.children){
            if ($cell.tagName -match 't[dh]'){
                # decode HTML entities and double-up quotes that the value may contain 
                $value = [System.Web.HttpUtility]::HtmlDecode($cell.innerText) -replace '"', '""'
                if ($cell.innerHtml -match 'href="([^"]*)') {
                    # if the cell contains a link, add it to the value between brackets
                    $value += ' ({0})' -f $Matches[1]
                }
                '"{0}"' -f $value
            }
        }
        $csvRow -join ','
    }
}

$table | Out-File 'c:\change\htmltocsv.csv'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...