Показать полную графическую версию : Файлы большого объема html сохранить в csv, изменив структуру
v79italya
29-03-2020, 16:31
Добрый день. В приложении ссылки находятся три файла.
Файл csv - желаемый результат.
Файл html - материал для обработки, приложил один, а так их несколько.
Файл xlsx - получаемый результат в Excel в надстройке Power Query. Если в папке один файл html, то Power Query его обработает за минуту-пол-тары. Если скопировать пару раз этот же файл, то PQ три файла обработает за минут пять. Если же размножить до десяти, то на обработку уходит более 15 минут. Результат не очень.
http://forum.oszone.net/thread-150969-4.html
Глядя в этой теме как лихо скрипты расправляются с файлами csv, хотел бы решить и эту задачу, используя скрипт. То есть обработать папку с файлами html, изменив структуру данных и сохранив в csv. Возможно ли это и сколько времени потребуется на обработку?
https://drive.google.com/open?id=1oblqbYoTYj6WOAieaQli253cDbc-GMU_
DJ Mogarych
30-03-2020, 09:05
html-файлы создаются для отображения уже готовой информации в виде, понятном человеку. Обрабатывать их, особенно таблицы с огромным количеством объединённых строк - занятие крайне неблагодарное и непродуктивное.
Что создаёт эти html-таблицы, откуда они выгружаются?
v79italya
30-03-2020, 09:24
откуда они выгружаются? »выгружаются из R-Keeper (программа в ресторанах)
особенно таблицы с огромным количеством объединённых строк »одним из вариантов обработки в Power Query было перевернуть данные(то, что было справа, стало слево) и добавить null-ей до общего количества значений 18 штук, затем перевернуть обратно
DJ Mogarych
30-03-2020, 10:27
Этот R-Keeper умеет выгружать данные во что-то другое?
Там вроде бы есть экспорт в DBF или MSSQL (https://www.sql.ru/forum/975655/r-keeper-kak-ottuda-izvlech-dannye).
v79italya
30-03-2020, 10:37
умеет выгружать данные во что-то другое? » точно не скажу, говорят что может выгружать в Excel, но при открытии больших файлов часть данных теряется.
DJ Mogarych
30-03-2020, 10:44
при открытии больших файлов часть данных теряется »
Какая прелесть.
В любом случае, можно, наверное, делать нечеловеческие усилия и парсить этот HTML, но я бы не советовал. Надо выгружать во что-то более осмысленное. Я немножко пытался парсить, но безрезультатно.
одним из вариантов обработки в Power Query было перевернуть данные(то, что было справа, стало слево) и добавить null-ей до общего количества значений 18 штук, затем перевернуть обратно »
слишком частное решение, помимо rowspan-ов, в таблице могут оказаться и colspan-ы, тогда этот метод не сработает... во всяком случае, правильно не сработает.
можно, наверное, делать нечеловеческие усилия и парсить этот HTML, но я бы не советовал. Надо выгружать во что-то более осмысленное. »
именно так!
Чтобы распарсить rowspan-ы, потребуются немаленькие усилия... если бы таблица была простой, то и парсить её было бы просто.
Правильнее - получать доступ к исходным данным и уже потом заниматься их обработкой.
v79italya
30-03-2020, 16:06
DJ Mogarych, отсюда ноги растутhttps://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=127043&TITLE_SEO=127043-kak-vygruzit-iz-ogromnogo-fayla-html-dannye-v-power-qwery
Мне было интересно возможно ли быстрая обработка файлов
v79italya, быстрая обработка возможна для реляционных баз данных. Почему авторы R-Keeper не озаботились экспортом во что-то вменяемое — хрен его знает.
DJ Mogarych
30-03-2020, 20:35
Так озаботились же вроде, просто разобраться надо.
v79italya
30-03-2020, 22:27
быстрая обработка возможна для реляционных баз данных »реляционные данные это, я так понял, без всяких объединений.
Вот смотрите, если в PQ(на обработку ушло 30 секунд на этот файл) слегка обработать и после сохранить в csv, то на выходе прикрепленный файл. Такой файл можно быстро обработать(извлечь текст между NOWRAP> и </TD>, удалить )?
для себя кстати распарсил, но выкладывать вряд-ли буду. Там помимо colspan'ов ещё всякого нежданчика может быть...
v79italya
31-03-2020, 20:40
кстати распарсил »Сколько времени уходит на обработку файла?
Сколько времени уходит на обработку файла? »
Распарсить-то возможно. Но время будет невменяемым, с таким подходом.
На тот файл .html, который был показан, будет уходить минут от 5 до 15, как минимум...
v79italya
01-04-2020, 12:26
будет уходить минут от 5 » Значит, обработка в Power Query за минуту не такой уж и медленный вариант.
А я думал что PQ много в чем тормозит
Значит, обработка в Power Query за минуту не такой уж и медленный вариант. »
Если результат устраивает, то можно считать быстро...
Вот парсер на powershell
$infile = '15p.html'
$outfile = '15p_out.csv'
$timefile = 'time.txt'
measure-command{
$skip = 2 # Пропуск первых строк таблицы, для формирования заголовков
$html = new-object -com "HTMLFile"
$html.ihtmldocument2_write($(gc $infile -raw -enc utf8))
$table = $html.getelementsbytagname("table")
$tr = $table[0]|%{$_.getelementsbytagname("tr")}
$head = $tr[$skip]|%{$_.getelementsbytagname("td")}
$rowind = ,1 * $head.count
$headers = $null
$tr[$skip..$tr.count]|%{
$row = $_.getelementsbytagname("td") | select innertext,rowspan,colspan
if ($headers) {
$str = [ordered]@{}
$rowspan = new-object 'int[]' $head.count
$k=0
foreach ($item in $row){
while ($rowind[$k] -gt 1){
$str[$headers[$k]] = $null
$rowind[$k] -= 1
$rowspan[$k] = 1
$k++
}
$str[$headers[$k]] = $item.innertext.trim()
$rowspan[$k] = $item.rowspan
$k++
}
for($i=0;$i -lt $rowind.count;$i++){
if ($rowspan[$i] -gt 1){$rowind[$i] = $rowspan[$i]}
}
[pscustomobject]$str
} else {
$headers = $row.innertext.trim()
}
}|export-csv $outfile -notype -enc utf8 -d ';'
}|out-file $timefile
Возможно, не оптимально, но что уж получилось...
rowspan-ы учитываются...
colspan-ы не учитываются...
Пробуйте... у меня парсился файл 11 минут.
DJ Mogarych
01-04-2020, 20:57
YuS_2, вы героический человек.
v79italya
01-04-2020, 21:28
YuS_2, спасибо. Завтра опробую
YuS_2, вы героический человек. »
Не то слово ;). Присоединюсь.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.