Böngészés

A következő gyakori feladat a weben található információk letöltése. Erre a célra a .NET keretrendszerben a System.Net.WebClient osztály áll rendelkezésre. Itt nem egy emberi fogyasztásra szánt web böngészőt kell elképzelni, hanem egy olyan alapszolgáltatást, ami csatlakozik egy adott URL segítségével a webkiszolgálóhoz és kiolvassa az adott weboldalt:

[2] PS C:\> $client = New-Object System.Net.WebClient

[3] PS C:\> $client.DownloadString("http://www.geocaching.hu")

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

 

 

<html>

<head>

        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859

-2">

        <title>geocaching.hu</title>

        <meta name="description" content="A magyar geocaching központja, geo

ládák

koodinátái, leírások, fényképek, letöltés, fórum.">

        <meta name="keywords" content="kincskeresés, geocaching, geochaching

, geoc

ashing, geokesing, gps, kincs, kincsvadászat, keresés, láda, geoláda, koord

ináta, koordináták, letöltés, kincsesláda, cache">

<link rel="stylesheet" href="style.css" type="text/css">

...

A [3]-as sorban a DownloadString metódussal indítom a böngészést. Az eredmény – mivel külön nem rendelkeztem róla – a konzolra került ki. Látható, hogy a teljes HTML tartalmat megkaptam. Természetesen szkriptjeimben ezt nem a képernyőre fogom kifolyatni, hanem egy változóba töltök be és valamilyen elemzés, átalakítás (például a HTML címkéktől való megszabadítás) után adom csak vissza az engem ténylegesen érdeklő információkat.

A DonwloadString metódus olvasható karaktereket vár azon a weboldalon, amelyre ráirányítjuk. Ha azonban egy bináris állományt, például egy ZIP fájlt akarunk letölteni, akkor ez nem lesz nekünk jó. Ilyen letöltésekre egy másik metódust, a DownloadFile-t használhatjuk:

[5] PS I:\>$client = New-Object System.Net.WebClient

[6] PS I:\>$url= "http://www.xs4all.nl/~hneel/software/bytecount.zip"

[7] PS I:\>$filename = "c:\bytecount.zip"

[8] PS I:\>$client.DownloadFile($url, $filename)

[9] PS I:\>Get-ChildItem c:\b*

 

 

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\

 

 

Mode                LastWriteTime     Length Name

----                -------------     ------ ----

-a---     2008. 04. 22.      9:53     419660 bytecount.zip

A fenti példában látható, hogy ennek a metódusnak az URL-en kívül egy fájl elérési útja is paramétere, ahova majd letölti a bináris állományt.

Megjegyzés

Fájlt letölteni a BitsTransfer modul segítségével is lehet:

PS C:\> Import-Module BitsTransfer

PS C:\> Start-BitsTransfer 'http://www.iqjb.hu/UserFiles/video/PowerShell_1.avi

' $home/PowerShell_1.avi

A böngészést összeköthetjük a strukturált adatkezeléssel! Például a Bing kereső képes XML formátumban is visszaadni a keresési találatokat. Erre alapozottan készítettem egy függvényt, ami megadja a Binggel történő keresés eredményét:

function Search-BingXML ([string] $search, $max = 10) {

     $wc = New-Object net.WebClient

     $wc.Encoding = [System.Text.Encoding]::UTF8

     $találat1 = [xml] $wc.DownloadString(

          "http://www.bing.com/search?q=$search&format=XML")

     $maxtalálat = [Math]::Min($találat1.searchresult.documentset.total, $max)

     $találat1.searchresult.documentset.document

     for($i = 11; $i -le $maxtalálat; $i+=10){

          $t = [xml] $wc.DownloadString(

                "http://www.bing.com/search?q=$search&first=11&format=XML")

          $t.searchresult.documentset.document

     }

     $wc.Dispose()

}

Ez a függvény vár egy keresési kifejezést és egy opcionális maximális találatszámot. Belsejében a WebClient osztály egy objektuma dolgozik, a szebb megjelenítés érdekében UTF8-as kódolással dolgozom. Az első keresési eredmények strukturált adathalmazából kiszedem a $maxtalálat változóba, hogy hány találat van összesen. Ebben az első etapban maximum 10 találat van, és a lapozás is 10 találatonként mehet, amit a for ciklusban teszek meg, az URL-ben jelzett first paraméter megadásával.

Ennek kimenete:

[23] PS C:\> Search-BingXML "Soós Tibor" 10 | Format-Table title, desc, languag

e, url

 

title               desc                language            url

-----               ----                --------            ---

Microsoft Techne... Soós Tibor. IQSO... hu                  http://www.micr...

Meet our Author:... Tibor Soós is fr... en                  http://www.rsc....

Az előadás címe     Windows Server 2... hu                  http://www.micr...

Soós Tibor          Soós Tibor. Loca... en                  http://my.opera...

Soós Tibor          Soós Tibor festő... hu                  http://www.ngks...

Soós Tibor/Tel      Tel: Összes kép:... hu                  http://www.ngks...

AIB Real Estate ... Please contact o... en                  http://www.aib....

Thionation Using... Thionation Using... en                  http://www.orga...

Untitled Page       Soós Tibor Bizto... hu                  https://tudasta...

Exchange 2010 Hi... Exchange Server ... hu                  http://download...

Megjegyzés

Sajnos, nem sokkal a fenti kis Bing szkriptem megírása után a Microsoft megszűntette a szolgáltatás ilyen jellegű hozzáférését, így ne csodálkozzon senki, ha már nem működik.



Word To HTML Converter