Webresponse Metodu İle Basit Bot Yapımı - C#.NET
-
merhaba arkadaşlar;
Bir çok kişinin aradığı ama türkçe kaynak eksikliğinden dolayı bulamadığı, internet aleminde "başka sitelerden veri çekmek" yani "bot" denilen olayı anlatmaya çalışacağım. Burada amacım size sadece yöntemi anlatmaktır o yüzden çok ufak bir örnekle anlatıcam.
Şimdi öncelikle
Webresponse tipinde bir değişken tanımlıyoruz;
WebResponse cevap;
Ardından bir WebRequest yaratmamız lazım, bu webrequest'den gelen cevabı webresponse ile alacağız.
WebRequest yaratalım;
WebRequest istek = HttpWebRequest.Create("http://www.google.com.tr");
ardından, cevap(webresponse) adlı değişkeninize, istek(webrequest) yaptığımız web sitesinden dönen cevabı veriyoruz. o da şöyle;
cevap = istek.ReadToEnd();
ardından, StreamReader ile cevap'taki html kodlarını okuyabiliriz.
StreamReader donenBilgiler = new StreamReader(cevap.GetResponseStream());
artık elimizde, html kodlar mevcut. yani bize gereken şeyler. onuda bir string değişkene atayıp parse işlemi yapabiliriz;
string gelen = gelenCevap.ReadToEnd();
Ben basit bir örnek yapıcam, google.com.tr sitesinde'ki title'ı okuycam.
bu işlemi yaparken, string metotlarından olan "indexof" metodundan yararlanıcam, bu metot ne işe yarar derseniz. Sizin vermiş olduğunuz karakterin veya string ifadenin, text içinde kaçınca index'te olduğunu geri döner.
int titleIndexBaslangici = gelen.IndexOf("<title>") + 7;
şimdi bu satırda, elimizde ki html kodlarında, <title> tagının kaçınca karakterden başladığını aldık, neden 7 ekledik derseniz. Eğer 7 eklemezsek, elimizde ki indexno ile substring yaparsak, elimize <title> tag'ı da gelicek. ama biz <title> tagının ">" bittiği karakterden sonrasını istiyoruz. o yüzden 7 ekledik (<title> 7 karakter)
Ardından <title> tag'ının bittiği index'i almamız lazım, onu da
int titleIndexBitisi = gelen.Substring(titleIndexBaslangici).IndexOf("</title>");
Bu satırda ise, <title>'ın bittiği yerden itibaren aldık (substring yardımı ile). Ardından </title> tagının bittiği, index'i aldık. burada bir ekleme söz konusu değil, çünkü tag zaten bitti.
label1.Text = gelen.Substring(titleIndexBaslangici, titleIndexBitisi);
En son da label'ın textine Aldığımız veriyi bastık.
Evet çok basit bir örnek'te olsa. sizin olayı kavramanıza yettiğini düşünmekteyim. Html kodlarını aldıktan sonra farklı bir yöntem ile de parse edebilirsiniz. Regular Expression gibi.
Son olarak Programdan bir kaç resim;



Kaynak belirtmeden lütfen paylaşmayınız.Konu hakkında sorularınızı lütfen konu altından sorunuz.
Herkese İyi Çalışmalar
-
C# 'da html kodlarını okuyabilmek için Html Agility gibi birşey vardı zamanında kurcalamamıştım ama becerememiştim.Sonra biryerde C#'ın html taglarını desteklediğini okumuştum ama ayrıntı bulamamıştım.
Bu konu hakkında bilgin varmı?
-
Sonra buna multithread ile aynı anda 50 kere calışmasını sağla, sonra title okuduktan sonra tekrardan okumasını sağla her biri için,
sonra başlat cubuğunda vsde görünmeyecek şekilde ayarlar,
git üniversitedeki 5-10 bilgisayara yükle...
tmm işte bitti gitti...
-
TeRRoR bunu yazdı:
-----------------------------
C# 'da html kodlarını okuyabilmek için Html Agility gibi birşey vardı zamanında kurcalamamıştım ama becerememiştim.Sonra biryerde C#'ın html taglarını desteklediğini okumuştum ama ayrıntı bulamamıştım.
Bu konu hakkında bilgin varmı?
-----------------------------bende bu konuyu araştırırken yabancı forumlarda rastladım dediğine, malesef benimde o konuda bilgim yok.
edit: aslına bakılırsa, webbrowser kontrolü ile bu işlemler daha kolay hale geliyor :)
@renegadealien
şeytanice, hiç öyle şeyler düşünmem :P :))
-
SharpShooter bunu yazdı:
-----------------------------
TeRRoR bunu yazdı:
-----------------------------
C# 'da html kodlarını okuyabilmek için Html Agility gibi birşey vardı zamanında kurcalamamıştım ama becerememiştim.Sonra biryerde C#'ın html taglarını desteklediğini okumuştum ama ayrıntı bulamamıştım.
Bu konu hakkında bilgin varmı?
-----------------------------bende bu konuyu araştırırken yabancı forumlarda rastladım dediğine, malesef benimde o konuda bilgim yok.
edit: aslına bakılırsa, webbrowser kontrolü ile bu işlemler daha kolay hale geliyor :)
@renegadealien
şeytanice, hiç öyle şeyler düşünmem :P :))
-----------------------------Bu C# ve bot üzerine çok kastım diyebilirim.
Webbrowser da sadece body, head gibi basit şeyleri destekliyordu yanlış hatırlamıyorsam.
En kesin çözüm sanırım regex ile ayrıştırmak sanırım.
-
TeRRoR bunu yazdı:
-----------------------------
SharpShooter bunu yazdı:
-----------------------------
TeRRoR bunu yazdı:
-----------------------------
C# 'da html kodlarını okuyabilmek için Html Agility gibi birşey vardı zamanında kurcalamamıştım ama becerememiştim.Sonra biryerde C#'ın html taglarını desteklediğini okumuştum ama ayrıntı bulamamıştım.
Bu konu hakkında bilgin varmı?
-----------------------------bende bu konuyu araştırırken yabancı forumlarda rastladım dediğine, malesef benimde o konuda bilgim yok.
edit: aslına bakılırsa, webbrowser kontrolü ile bu işlemler daha kolay hale geliyor :)
@renegadealien
şeytanice, hiç öyle şeyler düşünmem :P :))
-----------------------------Bu C# ve bot üzerine çok kastım diyebilirim.
Webbrowser da sadece body, head gibi basit şeyleri destekliyordu yanlış hatırlamıyorsam.
En kesin çözüm sanırım regex ile ayrıştırmak sanırım
-----------------------------ben webbrowser'ı , mesela sayfada ki bir butona tıklamak, bir textbox'a bir şey yazmak vs gibi işlemlerde kullanıp, geri dönen html içeriği bu şekilde ayırıyorum. biraz amelece farkındayım ama işime yarıyor :))
regex konusunda sonuna kadar katılıyorum.
-
SharpShooter bunu yazdı:
-----------------------------
TeRRoR bunu yazdı:
-----------------------------
SharpShooter bunu yazdı:
-----------------------------
TeRRoR bunu yazdı:
-----------------------------
C# 'da html kodlarını okuyabilmek için Html Agility gibi birşey vardı zamanında kurcalamamıştım ama becerememiştim.Sonra biryerde C#'ın html taglarını desteklediğini okumuştum ama ayrıntı bulamamıştım.
Bu konu hakkında bilgin varmı?
-----------------------------bende bu konuyu araştırırken yabancı forumlarda rastladım dediğine, malesef benimde o konuda bilgim yok.
edit: aslına bakılırsa, webbrowser kontrolü ile bu işlemler daha kolay hale geliyor :)
@renegadealien
şeytanice, hiç öyle şeyler düşünmem :P :))
-----------------------------Bu C# ve bot üzerine çok kastım diyebilirim.
Webbrowser da sadece body, head gibi basit şeyleri destekliyordu yanlış hatırlamıyorsam.
En kesin çözüm sanırım regex ile ayrıştırmak sanırım
-----------------------------ben webbrowser'ı , mesela sayfada ki bir butona tıklamak, bir textbox'a bir şey yazmak vs gibi işlemlerde kullanıp, geri dönen html içeriği bu şekilde ayırıyorum. biraz amelece farkındayım ama işime yarıyor :))
regex konusunda sonuna kadar katılıyorum.
-----------------------------o tıklamadada foreach ile 1 saatte dönüyor dönüyor buluyor tam kasıntı.
Regex ile yazdığım bir bot var ama bot işlemlerde Threading çok öne çıkıyor sanırım.İnternetten threadingleri araştırırken threading ile normal class içerisinde yapılan işlem binlerce kat hızlı şekilde yapılıyordu hatta 3-4 farklı Threading yazmıştı adam.Belki o yöntemler uygulanırsa güzel bir bot yapılabilir.
-
TeRRoR bunu yazdı:
-----------------------------
SharpShooter bunu yazdı:
-----------------------------
TeRRoR bunu yazdı:
-----------------------------
SharpShooter bunu yazdı:
-----------------------------
TeRRoR bunu yazdı:
-----------------------------
C# 'da html kodlarını okuyabilmek için Html Agility gibi birşey vardı zamanında kurcalamamıştım ama becerememiştim.Sonra biryerde C#'ın html taglarını desteklediğini okumuştum ama ayrıntı bulamamıştım.
Bu konu hakkında bilgin varmı?
-----------------------------bende bu konuyu araştırırken yabancı forumlarda rastladım dediğine, malesef benimde o konuda bilgim yok.
edit: aslına bakılırsa, webbrowser kontrolü ile bu işlemler daha kolay hale geliyor :)
@renegadealien
şeytanice, hiç öyle şeyler düşünmem :P :))
-----------------------------Bu C# ve bot üzerine çok kastım diyebilirim.
Webbrowser da sadece body, head gibi basit şeyleri destekliyordu yanlış hatırlamıyorsam.
En kesin çözüm sanırım regex ile ayrıştırmak sanırım
-----------------------------ben webbrowser'ı , mesela sayfada ki bir butona tıklamak, bir textbox'a bir şey yazmak vs gibi işlemlerde kullanıp, geri dönen html içeriği bu şekilde ayırıyorum. biraz amelece farkındayım ama işime yarıyor :))
regex konusunda sonuna kadar katılıyorum.
-----------------------------o tıklamadada foreach ile 1 saatte dönüyor dönüyor buluyor tam kasıntı.
Regex ile yazdığım bir bot var ama bot işlemlerde Threading çok öne çıkıyor sanırım.İnternetten threadingleri araştırırken threading ile normal class içerisinde yapılan işlem binlerce kat hızlı şekilde yapılıyordu hatta 3-4 farklı Threading yazmıştı adam.Belki o yöntemler uygulanırsa güzel bir bot yapılabilir
-----------------------------evet dediğin gibi bu işlemi 3-4 parçaya bölüp, thread mantığı ile yaparsan korkunç performans kazançları olacaktır. Birde bir şey rica edicem. yazdığın uygulamayı paylaşabilme ihtimalin var mı incelemek isterim ?
-
Alıntı yapmadım,
Kaynak kodlarını bulabilirsem eklerim çok önce yazmıştım hatta 1 tanede saldırı botu vardı kayıt floodu yapıyordu dandik bir siteye.
-
TeRRoR bunu yazdı:
-----------------------------
Alıntı yapmadım,
Kaynak kodlarını bulabilirsem eklerim çok önce yazmıştım hatta 1 tanede saldırı botu vardı kayıt floodu yapıyordu dandik bir siteye.
-----------------------------tamam hocam bulup , paylaşabilirsen güzel olur hem konu zenginleşmiş olur. ısrar etmemin sebebi türkçe kaynak malesef çok çok kısıtlı bu konuda. arayanlar daha kolay ulaşmalı bilgiye :)
ellerine sağlık bu arada :)
-
Webdeki controllere nasıl erişiyorsunki?
Asıl bu konuda kaynak yok.
