C# İle Bot Yapımı(Web Sitelerinden Veri Çekme)

Merhaba arkadaşlar. Bu benim sizinle paylaştığım ilk örnek bu yüzden çok heyecanlıyım  Eğer bir kusurum olursa çok özür dilerim  Yazım 0’dan başlayan kişilere hitap edeceği için biraz uzun gözükebilir. Eğer C# ilerlemişseniz direk kodlardan başlayabilirsiniz 

Arkadaşlar size bu örneğimde bir web sitesindeki verileri nasıl çekeceğimizi anlatacağım. Bu işlem için internette çok güzel bir örnek bulmuştum. Anlatımım o örnek üzerinden olacak.

En baştan başlarsak;
-Visual Studio’yu açıyoruz.
-Sol üst köşeden File—>New—>Project
-Açılan pencerede soldan Visual C# altındaki Windows yazan yere tıklıyoruz.
-Tıkladıktan sonra Templales altındakilerden Windows Forms Application’ı seçiyoruz.
-Alt tarafta Name bölümüne projemize isim OK’e tıklıyoruz.
-Form penceremiz karşımıza geldi.
-Toolbox menüsünden birer adet buton nesnesi ile label nesnemizi formumuza sürükleyerek bırakıyoruz.

Bu örneğimizde Google’ın title’ını yani sayfanın başlığında yazan yazıyı çekeceğiz. Formumuzda da buton nesnesine basıldığı zaman title’ımız label nesnemizde yazıcak.

-Şimdi işlemimiz butona tıklandığı zaman gerçekleştirileceği butonun click olayının altına komutlarımızı yazacağız. Kısayol olarak butonumuzun üzerine çift tıklayarak kod penceremizi açıyoruz ve butonumuzun click olayı orda gözüküyor.

Gelelim işin kod kısmına;

-Şimdi ilk olarak kodları vereceğim ve sonrasında satır satır açıkmalasını yapacağım.

Kodlarımız;

string adres = “http://www.google.com.tr”; //1
WebRequest istek = HttpWebRequest.Create(adres); //2
WebResponse cevap; //3
cevap = istek.GetResponse(); //4
StreamReader donenBilgiler = new StreamReader(cevap.GetResponseStream()); //5
string gelen = donenBilgiler.ReadToEnd(); //6
int titleIndexBaslangici = gelen.IndexOf(“<title>”) + 7; //7
int titleIndexBitisi = gelen.Substring(titleIndexBaslangici).IndexOf(“</title>”); //8

label1.Text = gelen.Substring(titleIndexBaslangici, titleIndexBitisi); //9

NOT : Kodları kopyalayıp yapıştırdığınız zaman WebRequest, WebResponse gibi birkaç komutta hata verebilir yani altını kırmızı olarak çizebilir. Bu o komutların kütüphanesinin çağırılmadığı anlamına gelir. Bu sorunu halletmek için en pratik yol komutu doğru şekilde yazın ve en sonunda gelince Control+nokta tuşuna basın sonra küçük bir kutu çıkıcak direk entera basın kütüphaneyi kendi eklicektir 

-İlk başta bağlanacağımız adresi ileride daha kullanımı kolay olsun diye string türünden adres adlı bir değişkenimize atadık. //1

-Sonra web adresimize bağlanmak için WebRequest türünden istek adlı nesnemizi tanımladık. //2

Sonra yaptığımız istekten cevabımızı alabilmek için WebResponse türünden cevap adlı bir nesne tanımladık. //3

-Şimdi cevabımızı almak için isteğimizi gerçekleştirdik ve bunu cevap nesnemize atadık. //4

-Sonra cevabımızı okumak için StreamReader türünden donenBilgiler adında bir nesne oluşturduk ve cevabımızı okuttuk. //5

-Sonra bu cevabımızı kullanabilmek için string türünden gelen adlı bir değişken oluşturup donenBilgiler’deki bilgileri atadık. Şimdi sitemizin o 
sayfadaki Html kodları gelen adlı değişkenimizde tutulmuş oldu. //6

-Şimdi, sayfanın başlığı Html komutlarında title etiketleri arasında yazdığı için bu komutun başlangıç indexini alıyoruz. IndexOf komutu ile <title> etiketinin indexini buluyoruz ve integer türüden titleIndexBaslangici değişkenimizi oluşturuyoruz ve buna indexi atıyoruz. Dikkat ettiyseniz orda birde indexe 7 sayısını ekliyoruz. Bunun sebebi ise bizim bulduğumuz index <title> etiketinin başlangıç indexi ama biz arasındaki yazının başlangıç indexini istiyoruz. Niye yedi ekledik ozaman dersenizde <title> etiketi 7 harfli. Bulduğumuz indexe 7 eklediğimiz zaman <title> etketinin hemen yanındaki yerin indexini almış oluyoruz. //7

-Şimdide <title> etiketinin bitişi olan </title> etkitinin kaç index ileride olduğunu Substring ve IndexOf komutları ile buluyoruz. //8

-Artık işimiz nerdeyse bitti diyebiliriz. İstediğimiz metnin başlangıç indexini ve uzunluğunu bulduk. Şimdide Substring komutu ile başlangıç indexini ve uzunluğunu girip o metni oradan çekiyoruz ve bunu label nesnemizin textine atıyoruz.  İşte başardık. Label nesnemizin yazısında Google yazıyor 

Bu yazı tamamen bana aittir. Sadece örnek kodlar internetten alınmadır 

Bu sitedeki ve internetteki ilk yazım bitmiş oluyor . Herkese kolay gelsin..

NOT : İlk yazım hakkında olumlu-olumsuz tüm yorumlarınızı bekliyorum 

EDIT// Söylemeyi unuttum. Bu örnekten başka birsürü örnek türetebilirsiniz. Tek bilmenin gereken o verinin hangi komutlar arasında tutulduğu. Bunuda sitenin kaynak kodunu inceleyerek bulabilirsiniz. Mesela ben şuan bir HavaDurumuBot’u yapıyorum. Bitince belki onuda paylaşabilirim.

Berke Bora Mutafoğlu – 02 Temmuz 2011..

Alıtıdır : C# İle Bot Yapımı(Web Sitelerinden Veri Çekme)

Sevebilirsin...

7 Yanıt

  1. Yusuf dedi ki:

    int titleIndexBaslangici = gelen.IndexOf(“”) + 7; +7 nasıl olduğunu hesaplayacağımızı kısaca açıklar mısınız ?

  2. Umut Gürler dedi ki:

    C# ile bot yapımı oldukça kolaymış meğersem 🙂

  3. Ozan S. dedi ki:

    C# ile bir form ekranına login olma işlemi konusunda çalışmalarınız var ise paylaşır mısınız?

  4. Oğuzhan dedi ki:

    Öncelikle Teşekkürler…
    İki sorum olacak
    1.Çektiğimiz değeri mesela Kursadaltan olsun ben sadece Kurs kısmını çekmek istersem ne yapabilirim?
    2.Çekeceğimiz tag <a class = "class-adi" olsa bunu nasıl çektirebiliriz?

    • joker(oğuz arkadaş için) dedi ki:

      string adres = “http://kahramanmaraseo.org/”; //1
                  WebRequest istek = HttpWebRequest.Create(adres); //2
                  WebResponse cevap; //3
                  cevap = istek.GetResponse(); //4
                  StreamReader donenBilgiler = new StreamReader(cevap.GetResponseStream()); //5
                  string gelen = donenBilgiler.ReadToEnd(); //6
                  int titleIndexBaslangici = gelen.IndexOf(@””)+130; //7

                  int titleIndexBitisi = gelen.Substring(titleIndexBaslangici).IndexOf(“”); //8

                 label1.Text = gelen.Substring(titleIndexBaslangici, titleIndexBitisi); //9

  5. Egemen Korkut dedi ki:

    Meraba Berke havadurumu botu mu yaptın mı? Bana buyuk bir yardımda bulunmak istermisin? 

  6. Yasin Engin dedi ki:

    programı çalıştırıyorum butona tıklıyorum hiçbir işlem yapmıyorum formu kapatmak istiyorum kapanmıyor kilitliyor 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir