1
Bir websitesinden WebClient sınıfını kullanarak resimleri nasıl indirebilirim ve Html etiketlerine nasıl ulaşabilirim?
2
Öncelikle HtmlAgilityPack kütüphanesimizi kullanabilmek için .dll dosyasını projenize import etmemiz gerekiyor. HtmlAgilityPack.dll
using HtmlAgilityPack; // HtmlAgilityPack namaspace tanımladık.
WebClient wc = new WebClient(); // webclient sınıfımızı tanımladık string webSite = wc.DownloadString("http://www.uzmanim.net"); // Kaynak kodunu indirmek istediğimiz websitesini yazıyoruz.
İkincisi XPATH nasıl kullanılır onu öğrenmeniz gerek.Html Agility Pack kullanacağız.Örneğin yukarıda yazmış olduğumuz websitesinin kaynak kodu aşağıdaki gibi varsayalım.
<table id="image"> <tr> <td class="bir"><img src="uzmanim.net/deneme1.jpg"/></td> </tr> <tr> <td class="bir"><img src="uzmanim.net/deneme2.jpg"/></td> </tr> <tr> <td class="bir"><img src="uzmanim.net/deneme3.jpg"/></td> </tr> </table>
XPATH kullanarak şu işlemleri yapabiliriz;
//table /*Bütün table'ları alır*/
//table[@id='image'] /*ID' si image olan table'ı alır*/
//table[@id='image']/tr /*ID 'si image olan tablonun içirisindeki tr' leri alır*/
//table[@id='image']/td[@class] /* ID'si image olan tablonun içerisindeki td'lerden sadece class'a sahip olanları alır*/
//table[@id='image']/td[@class='bir'] /*ID'si image olan table'nin içersindeki td 'lerden sadece class'ı "bir" olanları getirir */
Öncelikle string olarak indirdiğimiz websitesinin kaynak kodlarını, HtmlDocument oluşturarak parse işlemini gerçekleştireceğiz.
HtmlAgilityPack.HtmlDocument hd = new HtmlDocument(); hd.LoadHtml(webSite); // indirmiş oldugumuz kaynak kodu değşkenini(webSite) kullanıyorum
HtmlDocument'in DocumentNode adlı bir property'si vardır ve html'deki bütün elementleri içerisinde bulundurur.SelectNodes metodu ile de XPATH kodundaki istenilen node çekilir ve kullanılır.
HtmlNodeCollection hnc = hd.DocumentNode.SelectNodes("//table[@id='image']/td[@class='bir']"); // kaynak kodumuzda ID'si "image" olan ve td nin class'ı bir olanları getirdik
td tag'ın elementlerine ulaşabilmek için HtmlNode kullanıyoruz.
foreach (HtmlNode hn in hnc) { string imgHref = "http://"+ hn.Attributes["src"].Values; // img tag'ın src değerlerini imgHref değişkenine attık. string imageName = imgHref.SubString(imgHref.LastIndexOf('/')+1,imgHref.Length-imgHref.LastIndexOf('/')-1); /* resim url'sinden resim adını SubString ile aldık */ string dosyaYol = @"image\"; // resmin indirilecegi konum using (WebClient imgDown = new WebClient()) { imgDown.DownloadFile(imgHref , dosyaYol+imageName); } }
Cevap yazabilmek için üye girişi yapmalısınız.
Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol