cSharp' da WebClient ile Html Parse İşlemleri Nasıl Yapılır?

emkoroglu (327) 10 yıl önce sordu

Bir websitesinden WebClient sınıfını kullanarak resimleri nasıl indirebilirim ve Html etiketlerine nasıl ulaşabilirim?
 

Toplam 1 cevap


emkoroglu (327) 10 yıl önce cevapladı

Ö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);
      }

}