Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Парсинг HTML, Parser HTML (http://forum.oszone.net/showthread.php?t=313797)

dosperados 13-04-2016 10:00 2625654

Парсинг HTML, Parser HTML
 
Привет, прошу помощи гуру 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 2625671

Код:

$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 2625672

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

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

dosperados 13-04-2016 13:31 2625728

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

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

Pavel Nagaev 14-04-2016 09:30 2625961

Вася тоже говорил, что надо использовать Net.WebClient вместо Invoke-WebRequest, вопрос почему?

Foreigner 14-04-2016 10:43 2625991

Pavel Nagaev, достаточно интересная статья на близкую тему.

dosperados 15-04-2016 08:46 2626340

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

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


Время: 03:01.

Время: 03:01.
© OSzone.net 2001-