PDA

Показать полную графическую версию : Парсинг HTML, Parser HTML


dosperados
13-04-2016, 10:00
Привет, прошу помощи гуру Powershell по оптимизации и ускорении небольшого HTML парсера.

$SiteDate = "http://mp320vip.com/mp3-preview/SINGLES%20-%20New%20Releases%20-%20Beatport-Juno-Traxsource/EURO-DANCE/"
$HttpContent = Invoke-WebRequest -URI $SiteDate"
$HttpContent.Links | select -skip 5 | Foreach {
$link = $_
$date = [string]($link.href -replace "[/]")
$Fname = [string]"c:\temp\"+($link.href -replace "[/]")+".m3u"
$Flink = [string]"$SiteDate"+$link.href


$HttpContent2 = Invoke-WebRequest -URI $Flink"
$HttpContent2.Links | select -skip 5 | Foreach {
$link2 = $_
[string]"#EXTINF:-1,"+$link2.outerText+" group-title="""+$date+"""" | Out-File -FilePath $Fname -append
[string]"$Flink"+$link2.href | Out-File -FilePath $Fname -append
}

}

Kazun
13-04-2016, 10:56
$wc = New-Object Net.WebClient
$SiteDate = "http://mp320vip.com/mp3-preview/SINGLES%20-%20New%20Releases%20-%20Beatport-Juno-Traxsource/EURO-DANCE/"
$wc.DownloadString("$SiteDate").split("`n") | Where {$_ -match '^<tr>.+<a href="(.+)">.+</a>'} | select -skip 1 | Foreach {
$link = $matches[1]
$date = $link -replace "[/]"
$Fname = "c:\temp\"+($link -replace "[/]")+".m3u"
$flink = $SiteDate + $link
$wc.DownloadString($flink).split("`n") | Where {$_ -match '^<tr>.+<a href="(.+)">(.+)</a>'} | select -skip 1 |Foreach {
$link = $matches[1]
$text = $matches[2]
"#EXTINF:-1,"+$text+" group-title="""+$date+""""
"$flink"+$link
} | Out-File -FilePath $Fname
}

dosperados
13-04-2016, 11:06
Kazun, Т.Е. Net объект явно быстрее? почему ты решил полностью переписать на Net.WebClient вместо использования Invoke-WebRequest?

а как добавить использование прокси к этому объекту?

dosperados
13-04-2016, 13:31
прокси добавил легко,
$wc.Proxy=new-object system.net.WebProxy('http://IP:порт',$true);

а вот понять что делает ваш скрипт не получилось.
данные сильно разнятся с моей версией скрипта...
мой скрипт создает 12608 строк
а ваш 2834

Pavel Nagaev
14-04-2016, 09:30
Вася тоже говорил, что надо использовать Net.WebClient вместо Invoke-WebRequest, вопрос почему?

Foreigner
14-04-2016, 10:43
Pavel Nagaev, достаточно интересная статья (https://blog.jourdant.me/3-ways-to-download-files-with-powershell/) на близкую тему.

dosperados
15-04-2016, 08:46
Foreigner, я читал ее, и сам тестировал на этом же сайте.
Мои результаты отличаются от того что написано в статье.
Если говорить про скачку файлов, то Start-BitsTransfer быстрее всех, но разница в сотых долесекундах...

А статье описано что 27 (Invoke-WebRequest) секунд и 7 (Net.WebClient) секунд...
может быть и на старых версия PoSh была такая разница сейчас Invoke-WebRequest очень быстро все делает, и мне он кажется очень простым.




© OSzone.net 2001-2012