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

1

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

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

    Toplam 1 Cevap


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

     

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

      üyelik gerektirir

      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