Asp.NET İle Bot Yazma Mantığı

Bu makalede, başka sitelerden içerik çekmek için kullanılan, içerik botu diye adlandırdığımız HTML Parse yöntemini asp.net ile nasıl oluşturacağımız anlatılmaktadır.

Bu makalede, başka sitelerden içerik çekmek için kullanılan, içerik botu diye adlandırdığımız HTML Parse yöntemini asp.net ile nasıl oluşturacağımız anlatılmaktadır.

Öncelikle bot olarak adlandırdığımız kod yapısından bahsetmek istiyorum. Bu makalemde yazımını anlatacağım "bot" diye tabir ettiğimiz yapı, herhangi bir web sayfasından istediğimiz içeriği çekmemizi ve gerekirse veritabanına kaydetmemizi sağlayan bir yapıdır.

Basit olarak botun çalışma mantığı şöyledir;
[*] Web sayfasına istek gönderilir,
[*] Gönderilen isteğe karşılık gelen cevap alınır,
[*] Karakter problemine karşı, gelen cevap encode edilir,
[*] Encode edilen cevap okunur ve HTML formatına aktarılarak parçalanır(parse).

Uygulamamızda kullanacağımız HtmlAgilityPack.dll'yi projemize Reference olarak ekliyoruz. dll'mizin nimetlerinden faydalanabilmek için, aşağıdaki namespace'lerimizi de codebehind kısmına ekliyoruz.


using HtmlAgilityPack;

using System.Net;

using System.Text;

using System.IO;



Projemize bir buton ekleyelim ve "Click" event'ına aşağıdaki kodları yazalım.


HttpWebRequest istek = (HttpWebRequest)WebRequest.Create("http://www.google.com.tr");

HttpWebResponse cevap = (HttpWebResponse)istek.GetResponse();

Encoding cevapkodlama = Encoding.GetEncoding(cevap.CharacterSet);

StreamReader okuyucu = new StreamReader(cevap.GetResponseStream(), cevapkodlama);

string html = okuyucu.ReadToEnd();

HtmlDocument doc = new HtmlDocument();

doc.LoadHtml(html);

HtmlNodeCollection col = doc.DocumentNode.SelectNodes("//link[@href='/intl/tr/ads/']");

foreach ( HtmlNode items in col)

            {

Response.Write(items.innerHtml);

            }



HttpWebRequest nesnesi ile Google'a istek yolluyoruz. HtppWebResponse ile gönderdiğimiz isteğe karşılık gelen cevabı alıp, Encoding ile karakter problemine karşı önlem alıyoruz. StreamReader ile gelen cevabı okuyup HTML formatına çeviriyoruz. HtmlAgilityPack bu aşamadan sonra devreye giriyor. HtmlNodeCollection ile HTML Parse işlemine başlıyoruz.


HtmlNodeCollection col = doc.DocumentNode.SelectNodes("//link[@href='/intl/tr/ads/']");



Kod satırı ile demek istediğimiz şu aslında, href değeri /intl/tr/ads/ olan a tagını getir. A tagını bu kod satırı ile aldıktan sonra a tagının elementlerine ulaşabilmek için foreach döngüsünü kullanıyoruz.
Sonuç aşağıdaki gibi,

Google sayfasında href değeri /intl/tr/ads/ olan a tagı;



Kodlamamız sonucunda botumuzun çektiği değer;


Bir başka duruma daha değinmek istiyorum. Mesela tagının src değerine ulaşmak istesek ne yapmamız gerekir. Onun kodları da aşağıdaki gibi olacak. Ufak bir ekleme yapmamız yeterli;


HttpWebRequest istek = (HttpWebRequest)WebRequest.Create("http://www.internethaber.com/yok-baskani-ozcanin-ayipladigi-olay-298031h.htm");

HttpWebResponse cevap = (HttpWebResponse)istek.GetResponse();

Encoding cevapkodlama = Encoding.GetEncoding(cevap.CharacterSet);

StreamReader okuyucu = new StreamReader(cevap.GetResponseStream(), cevapkodlama);

string html = okuyucu.ReadToEnd();

HtmlDocument doc = new HtmlDocument();

doc.LoadHtml(html);

HtmlNodeCollection col = doc.DocumentNode.SelectNodes("//link[@rel='image_src']");

foreach ( HtmlNode items in col)

            {

//Response.Write(items.InnerHtml);

HtmlAttribute att = items.Attributes["href"];

Response.Write(att.Value);

            }



Burada İnternethaber'de yer alan bir haberin resim adresini çektik. Resmin link yapısı aşağıdaki gibi;



Kodlamamız sonucunda botun çektiği değer;



Son kodlamadaki olay, rel değeri image_src olan link tagının href değerini çektik. Asp.NET ile bot yazma diğer bir deyişle HTML Parse basit olarak bu kadar. Başka bir makalede görüşmek dileğiyle.

  • Etiketler;
GÜREL GÜREL
Sanalkurs.net
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Bu nasıl bir ders arkadaşım yaa!!! Benim de web sitem var el emeğimle bilgi birikimimle hiç bir yerden alıntı yapmadan oturup saatlerce parmaklarım uyuşana kadar içerik hazılayıp insanlara faydalı olsun diye uğraşıyorum, sen kalmış insanlara HIRSIZLIK nasıl yapılır onu öğretiyorsun ayıp be! Ben internette gezerken bir bilginin al birinden diğerine yapıştır şeklinde her sitede noktası noktasına aynı yazıları görmekten bıkmış biriyim. Özgün içerik yapın arkadaşım! Yapamıyorsan da site kurmayın! buton altı yazılımcı mantığını bırakın! insanlara nasıl başkalarının içeriği ÇALINIR bunu öğretmeyin! Ayıp be! KINIYORUM BU konu anlatımını yapan Abdurrahman GÜREL Bey'i!
[b]@shadow26[/b] ilginç bir yaklaşım. Silah da zararlıdır ama kendinizi korumak için kullandığınızda büyük bir niğmettir. Ben bu makalemde HtmlAgilityPack.dll 'nin niğmetlerinden bahsettim. Siz anlamak istediğiniz kadarını anlamışsınız. Makale içeriği herhangi bir sorun teşkil etseydi zaten onaylanmazdı diye düşünüyorum. Eleştiriniz için teşekkürler.
merhaba ben sayfa kaynagından bılgı cekmek ıstıyorum document.frmRegister.txtBDay.selectedIndex = get_idx(document.frmRegister.txtBDay, '4'); document.frmRegister.txtBMonth.selectedIndex = get_idx(document.frmRegister.txtBMonth, '26'); document.frmRegister.txtBYear.selectedIndex = get_idx(document.frmRegister.txtBYear, '1997'); burdaki sayıları(tarihleri) almak istiyorum nasıl yaparım ??
Güzel anlatım başarılı. teşekkürler
@e l b r u z bu isteğiniz yukarıda anlatılan konu ile mümkün görünmüyor.
@Shadow26 senin fikrine katılmıyorum çüknü. benim bir bot programına ihtiyacım var. benim işim liste hazırlamak nasılmı? bak şöyle. şimdi benim bitane excell dosyam var ve excell dosyamda 35000 adet parça kodu var ve ben 35000 adet parça kodunu tek tek alıp bu parçaların fiyatlarını güncel olarak gördüğüm bir bayi ekranı var bunun için 4 kişi uğraşıyoruz ve 1 haftada geceli gündüzlü anca bitirebiliyoruz yani adam başı 8750 parça yapıyor tabi biz bunları yaparken geçmiş olduğumuz 1 parça 5 dakika sonra değişirse farklı şekilde kar veya zarar edebilirim. şimdi ben bi bot yapmaya çalışacağım buda şu şekilde çalışacak. excell den satır satır kod alacak fiyatları aldığım sayfaya gidecek yapıştırıp fiyatını web sayfasına getirecek ve bizim daha önce belirlemiş olduğumuz alandan fiyatı alıp veritabanına veya başka bir excell dosyasına yazacak. 4 adam boşa çıkacak 35000 parça 1 günde belkide daha kısa sürede bitecek ve 4 adamı farklı yerlerde değerlendireceğiz. bilmem anlatabildim mi.
Merhaba ben de bir siteden bilgi almak için bot yapıyorum. Bir sorum olacak; Ben site adresini de kendisi giren bir bot yaptım ancak bazı site adresleri mevcut değil 404 hatası veriyor, doğal olarak bot çalışırken orda patlıyorum. for (int i = 82728; i < 1000000; i++) { Mon_ID.Text = i.ToString(); string adres = "http://www.oykb.com/ppalocat/pp" + Mon.Text.PadLeft(7, '0') + "/"; WebRequest wr = HttpWebRequest.Create(adres); WebResponse cevap; cevap = wr.GetResponse(); site mevcut olmadığında cevap= ' li satırda patlıyor. site yoksa devam etmeyi nasıl yapabilirim. İyi Günler
@ihsnclk Merhaba, cevap değişkeninin boş olup olmadığını kontrol ettirip ondan sonra değer ataması yaptırırsanız sorun olmayacaktır. if(cevap != null || cevap != "") { cevap=wr.GetResponse(); } gibi kontrol edebilirsiniz.
@gürel merhaba, teşekkur ederim, şimdi denedim tekrar,yazdığımda: Error 2 Operator '!=' cannot be applied to operands of type 'System.Net.WebResponse' and 'string' hatası alıyorum. Nasıl yapabilirim iyi günleri
Try catch ile sorunu çözdüm. :)

Yukarı Git