Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Файлы большого объема html сохранить в csv, изменив структуру

Ответить
Настройки темы
Любой язык - Файлы большого объема html сохранить в csv, изменив структуру

Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Добрый день. В приложении ссылки находятся три файла.
Файл 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=1ob...li253cDbc-GMU_

Отправлено: 16:31, 29-03-2020

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


DJ Mogarych, а… ну, да.

Отправлено: 20:40, 30-03-2020 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Iska:
быстрая обработка возможна для реляционных баз данных »
реляционные данные это, я так понял, без всяких объединений.
Вот смотрите, если в PQ(на обработку ушло 30 секунд на этот файл) слегка обработать и после сохранить в csv, то на выходе прикрепленный файл. Такой файл можно быстро обработать(извлечь текст между NOWRAP> и </TD>, удалить &nbsp?

Последний раз редактировалось v79italya, 16-07-2020 в 18:31.


Отправлено: 22:27, 30-03-2020 | #12


Deadooshka


Сообщения: 2488
Благодарности: 673

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip 15p.html.csv.zip
(422.2 Kb, 4 просмотров)

для себя кстати распарсил, но выкладывать вряд-ли буду. Там помимо colspan'ов ещё всякого нежданчика может быть...

Отправлено: 15:41, 31-03-2020 | #13


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Sham:
кстати распарсил »
Сколько времени уходит на обработку файла?

Отправлено: 20:40, 31-03-2020 | #14


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата v79italya:
Сколько времени уходит на обработку файла? »
Распарсить-то возможно. Но время будет невменяемым, с таким подходом.
На тот файл .html, который был показан, будет уходить минут от 5 до 15, как минимум...

-------
scio me nihil scire. Ѫ


Отправлено: 11:54, 01-04-2020 | #15


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
будет уходить минут от 5 »
Значит, обработка в Power Query за минуту не такой уж и медленный вариант.
А я думал что PQ много в чем тормозит

Отправлено: 12:26, 01-04-2020 | #16


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата v79italya:
Значит, обработка в 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 минут.

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:33, 01-04-2020 | #17


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6496
Благодарности: 1466

Профиль | Отправить PM | Цитировать


YuS_2, вы героический человек.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 20:57, 01-04-2020 | #18


Старожил


Сообщения: 235
Благодарности: 8

Профиль | Отправить PM | Цитировать


YuS_2, спасибо. Завтра опробую

Отправлено: 21:28, 01-04-2020 | #19


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
YuS_2, вы героический человек. »
Не то слово . Присоединюсь.

Отправлено: 00:08, 02-04-2020 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Файлы большого объема html сохранить в csv, изменив структуру

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Синхронизация большого объема данных zer0c0o1 Windows Server 2008/2008 R2 2 28-10-2014 14:26
EP-8HDA5J не функционирует с винчестерами большого объема. love_fist911 Материнские платы и память 6 15-08-2011 05:52
Разное - [решено] Не запускаются exe файлы большого объема. necrospunk Microsoft Windows 2000/XP 6 24-04-2011 15:46
2008 R2 - Подвисает копирование файлов большого объема из сети ujin Windows Server 2008/2008 R2 2 07-10-2010 12:57
HDD - старый BIOS и винчестер большого объема. Trinux Накопители (SSD, HDD, USB Flash) 2 30-05-2009 20:22




 
Переход